Всегда ли коэффициенты объекта lm перечисляют перехват первым?

#r #linear-regression

#r #линейная регрессия

Вопрос:

В coef(l) , где l объект класса «lm» (Intercept) всегда указан первым?

Исходный код R для lm() не так прост. lm() появляется вызов lm.fit() , который получает коэффициенты путем вызова функции C с .Call(C_Cdqrls, x, y, tol, FALSE) помощью , которая в конечном итоге вызывает процедуру подбора наименьших квадратов в FORTRAN в соответствии с этим информативным сообщением в блоге . Я недостаточно хорошо знаком с внутренними компонентами R или фактическим кодом, чтобы выполнить регрессию наименьших квадратов, чтобы ответить на мой вопрос.

Комментарии:

1. Он появится первым, если только вы не подходите для модели, в которой нет перехвата.

2. @MrFlick тогда перехват равен всего 0? или вы имеете в виду что-то другое.

3. Если вы запускаете модель, подобную coef(lm(y~x-1, data.frame(x=rnorm(10), y=runif(10)))) then, просто нет перехвата, поэтому он не первый. Таким образом, перехват не всегда является первым коэффициентом, но если вы соответствуете модели, у которой есть перехват, тогда он будет указан первым (по крайней мере, с lm )

4. @MrFlick Ха, я этого не знал. Можете ли вы превратить комментарий в ответ? Вы знаете, что он указан первым из внутреннего кода или просто по опыту?

Ответ №1:

Нет, только когда у вас есть перехват. Перехват неявен в формуле, но вы можете указать модель без него, используя - 1 или 0 :

 x <- rnorm(20)
y <- rnorm(20, 10)

> coef(lm(y ~ x   I(x^2)))
(Intercept)           x      I(x^2) 
 10.3035412  -0.1506304  -0.3092836 

> coef(lm(y ~ I(x^3)   x - 1))
    I(x^3)          x 
-0.5094851 -0.6598634 
  

Коэффициенты будут перечислены в том порядке, в котором они отображаются в формуле. Если есть перехват, он будет первым. Но, как и во многих других ситуациях в R, если вам нужно получить значение определенного компонента (перехвата или любого другого), рекомендуется вызывать его по имени. Он вернется NA , если у объекта его нет:

 intercept <- coef(model)["(Intercept)"]
  

Комментарии:

1. знаете ли вы, что если есть перехват, он всегда будет указан первым?

2. Я бы не стал рассчитывать на какой-либо конкретный порядок коэффициентов. Используйте имена.