Существует ли способ получения коэффициентов для каждого шага алгоритма оптимизации в функции 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 ответ:
Аргумент
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)".