Tôi tự hỏi làm thế nào là giá trị bắt đầu mặc định được chỉ định trong glm
.
Bài đăng này gợi ý rằng các giá trị mặc định được đặt thành số không. Đây một nói rằng có một thuật toán đằng sau nó, tuy nhiên liên kết có liên quan bị phá vỡ.
Tôi đã cố gắng để phù hợp với mô hình hồi quy logistic đơn giản với theo dõi thuật toán:
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)))
Đầu tiên, không có đặc điểm kỹ thuật của các giá trị ban đầu:
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
Trong bước đầu tiên, giá trị ban đầu là NULL
.
Thứ hai, tôi đặt giá trị bắt đầu là số không:
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
Và chúng ta có thể thấy rằng các lần lặp giữa cách tiếp cận thứ nhất và thứ hai khác nhau.
Để xem các giá trị ban đầu được chỉ định bởi glm
tôi đã cố gắng khớp mô hình chỉ với một lần lặp:
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
Ước tính các tham số (không đáng ngạc nhiên) tương ứng với ước tính của cách tiếp cận đầu tiên trong lần lặp thứ hai tức là, [1] 0.386379 1.106234
Đặt các giá trị này làm giá trị ban đầu dẫn đến trình tự lặp giống như trong cách tiếp cận đầu tiên:
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
Vậy câu hỏi là, những giá trị này được tính như thế nào?
glm.fit
mã nhưng tôi vẫn không biết các giá trị ban đầu được tính như thế nào.
start
các giá trị, chúng được sử dụng để tính toán những gì được truyền vàoC_Cdqrls
thường trình. Nếu bạn không, các giá trị được chuyển sẽ được tính toán (bao gồm cả cuộc gọieval(binomial()$initialize)
), nhưngglm.fit
không bao giờ tính toán rõ ràng các giá trị chostart
. Mất một hoặc hai giờ và nghiên cứuglm.fit
mã.