मैं सोच रहा हूँ कि कैसे डिफ़ॉल्ट प्रारंभिक मान निर्दिष्ट हैं glm
।
यह पोस्ट बताता है कि डिफ़ॉल्ट मान शून्य के रूप में सेट किए गए हैं। यह एक कहता है कि इसके पीछे एक एल्गोरिथ्म है, हालांकि प्रासंगिक लिंक टूट गया है।
मैंने एल्गोरिथ्म ट्रेस के साथ सरल लॉजिस्टिक प्रतिगमन मॉडल को फिट करने की कोशिश की:
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
।
दूसरा, मैंने शुरू किया मान शून्य होने के लिए:
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
दिनचर्या में पारित हो जाता है। यदि आप नहीं करते हैं, तो पास किए गए मानों की गणना की जाती है (कॉल सहितeval(binomial()$initialize)
), लेकिनglm.fit
कभी भी स्पष्ट रूप से मानों की गणना नहीं करता हैstart
। एक या दो घंटे का समय लें औरglm.fit
कोड का अध्ययन करें ।