에 기본 시작 값이 어떻게 지정되어 있는지 궁금합니다 glm
.
이 게시물 에서는 기본값이 0으로 설정되어 있다고 제안합니다. 이 사람은 그러나 관련 링크가 깨진 뒤에 알고리즘이 있다는 것을 말한다.
알고리즘 추적으로 간단한 로지스틱 회귀 모델을 맞추려고했습니다.
set.seed(123)
x <- rnorm(100)
p <- 1/(1 + exp(-x))
y <- rbinom(100, size = 1, prob = p)
# to see parameter estimates in each step
trace(glm.fit, quote(print(coefold)), at = list(c(22, 4, 8, 4, 19, 3)))
먼저 초기 값을 지정하지 않은 경우 :
glm(y ~ x, family = "binomial")
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
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] 0.386379 1.106234
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] 0.3991135 1.1653971
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] 0.3995188 1.1669508
첫 번째 단계에서 초기 값은 NULL
입니다.
둘째, 시작 값을 0으로 설정했습니다.
glm(y ~ x, family = "binomial", start = c(0, 0))
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] 0 0
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] 0.3177530 0.9097521
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] 0.3909975 1.1397163
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] 0.3994147 1.1666173
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] 0.3995191 1.1669518
그리고 우리는 첫 번째와 두 번째 접근법 사이의 반복이 다르다는 것을 알 수 있습니다.
지정된 초기 값을 보려면 glm
한 번의 반복으로 모델을 맞추려고했습니다.
glm(y ~ x, family = "binomial", control = list(maxit = 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
NULL
Call: glm(formula = y ~ x, family = "binomial", control = list(maxit = 1))
Coefficients:
(Intercept) x
0.3864 1.1062
Degrees of Freedom: 99 Total (i.e. Null); 98 Residual
Null Deviance: 134.6
Residual Deviance: 115 AIC: 119
모수의 추정치 (놀랍지 않게도)는 두 번째 반복의 첫 번째 접근법의 추정치에 해당합니다. 즉, [1] 0.386379 1.106234
이 값을 초기 값으로 설정하면 첫 번째 접근법과 동일한 반복 시퀀스가됩니다.
glm(y ~ x, family = "binomial", start = c(0.386379, 1.106234))
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] 0.386379 1.106234
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] 0.3991135 1.1653971
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] 0.3995188 1.1669508
문제는 이러한 값이 어떻게 계산 되는가입니다.
glm.fit
코드 를 연구하려고했지만 초기 값을 계산하는 방법에 대한 단서가 없습니다.
start
값 을 제공 하면C_Cdqrls
루틴에 전달되는 값을 계산하는 데 사용됩니다 . 그렇지 않으면 전달 된 값이 (call 포함eval(binomial()$initialize)
)glm.fit
계산 되지만 명시 적으로에 대한 값을 계산 하지는 않습니다start
. 1-2 시간이 걸리고glm.fit
코드를 연구하십시오 .