আমি ভাবছি কীভাবে নির্দিষ্ট মানগুলিতে সুনির্দিষ্টভাবে নির্দিষ্ট করা হয় 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
কোডটি অধ্যয়ন করুন ।