Существует ли способ получения коэффициентов для каждого шага алгоритма оптимизации в функции glm?


При выполнении логит-регрессии в R можно получить коэффициенты после того, как алгоритм оптимизации сошелся (или не сошелся) с функцией coefficients():

library(MASS)
data(menarche)
glm.out = glm(cbind(Menarche, Total-Menarche) ~ Age,
               family=binomial(logit), data=menarche)
coefficients(glm.out)
## (Intercept)         Age 
## -21.226395    1.631968

Существует ли способ получения коэффициентов для каждого шага алгоритма оптимизации, чтобы проследить его шаги?

1 8
glm

1 ответ:

Аргумент control= с показанным значением вызывает отклонение для печати, а оператор trace вызовет значения коэффициента для печати:

trace(glm.fit, quote(print(coefold)), at = list(c(22, 4, 8, 4, 19, 3)))
glm.out = glm(cbind(Menarche, Total-Menarche) ~ Age,
                     family=binomial(logit), data=menarche,
                     control = glm.control(trace = TRUE))

Вывод будет выглядеть следующим образом:

Tracing glm.fit(x = structure(c(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,  .... step 22,4,8,4,19,3 
NULL
Deviance = 27.23412 Iterations - 1
Tracing glm.fit(x = structure(c(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,  .... step 22,4,8,4,19,3 
[1] -20.673652   1.589536
Deviance = 26.7041 Iterations - 2
Tracing glm.fit(x = structure(c(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,  .... step 22,4,8,4,19,3 
[1] -21.206854   1.630468
Deviance = 26.70345 Iterations - 3
Tracing glm.fit(x = structure(c(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,  .... step 22,4,8,4,19,3 
[1] -21.226370   1.631966
Deviance = 26.70345 Iterations - 4

Для удаления трассировки используйте:

untrace(glm.fit)
Обратите внимание, что в вызове trace coefold - это имя переменной, используемой внутренне в исходном коде glm.fit, а используемые числа относятся к номерам операторов в исходном коде, и поэтому любой из них может потребоваться изменить, если изменяется источник glm.fit. Я использую "Исправлена версия 3.2.2 R (2015-10-19 r69550)".