Как вычисляется перехват в подгонке GLM? - PullRequest
2 голосов
/ 25 июня 2010

Я читал код , используемый R для соответствия обобщенной линейной модели (GLM), поскольку исходный код R находится в свободном доступе.Используемый алгоритм называется итеративно переоцененными наименьшими квадратами (IRLS), что является довольно документированным алгоритмом.Для каждой итерации существует вызов функции Fortran для решения проблемы взвешенных наименьших квадратов.

С точки зрения конечного пользователя, например, для логистической регрессии, вызов в R выглядит так:

y <- rbinom(100, 1, 0.5)
x <- rnorm(100)
glm(y~x, family=binomial)$coefficients

И если вы не хотите использовать перехват , любой из этих вызовов в порядке:

glm(y~x-1, family=binomial)$coefficients
glm(y~x+0, family=binomial)$coefficients

Однако мне не удается понять, как формула , то есть y~x или y~x-1, имеет смысл в коде и понимается, использовать ли перехват или нет.Я искал часть кода, где столбец единиц был бы связан с x, но, похоже, его нет.

Спасибо.

PS: Насколько я знаючитай, логический перехват, который появляется в функции с именем glm.fit, не совпадает с перехватом, о котором я говорю.И то же самое для смещения .

Документация о glm и glm.fit здесь здесь .

1 Ответ

6 голосов
/ 25 июня 2010

Вы, наверное, ищете не в том месте.Обычно, model.matrix() вызывается первым в функциях подгонки:

> D <- data.frame(x1=1:4, x2=4:1)
> model.matrix(~ x1 + x2, D)
  (Intercept) x1 x2
1           1  1  4
2           1  2  3
3           1  3  2
4           1  4  1
attr(,"assign")
[1] 0 1 2
> model.matrix(~ x1 + x2 -1 , D)
  x1 x2
1  1  4
2  2  3
3  3  2
4  4  1
attr(,"assign")
[1] 1 2
> 

, и это вывод model.matrix(), который передается на Фортран.Это относится к lm() и другим установщикам моделей.

Для glm() он отличается и вызывается только model.frame(), который не добавляет столбец перехвата.Почему это так связано с разницей между обобщенными линейными моделями и стандартными линейными моделями и выходит за рамки этой публикации.

...