R में glm function में किस ऑप्टिमाइज़ेशन एल्गोरिथम का उपयोग किया जाता है?


17

इस तरह के कोड का उपयोग करके आर में एक लॉगिट रिग्रेशन कर सकता है:

> 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

ऐसा लगता है कि अनुकूलन एल्गोरिथ्म में परिवर्तित हो गया है - फिशर स्कोरिंग एल्गोरिदम के चरणों की संख्या के बारे में जानकारी है:

Call:
glm(formula = cbind(Menarche, Total - Menarche) ~ Age, family = binomial(logit), 
    data = menarche)

Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-2.0363  -0.9953  -0.4900   0.7780   1.3675  

Coefficients:
             Estimate Std. Error z value Pr(>|z|)    
(Intercept) -21.22639    0.77068  -27.54   <2e-16 ***
Age           1.63197    0.05895   27.68   <2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1   1

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 3693.884  on 24  degrees of freedom
Residual deviance:   26.703  on 23  degrees of freedom
AIC: 114.76

Number of Fisher Scoring iterations: 4

मैं उत्सुक हूं कि यह किस आशावादी एल्गोरिथम के बारे में है? क्या यह न्यूटन-रफसन एल्गोरिथ्म (दूसरा क्रम ढाल मूल) है? क्या मैं कॉची एल्गोरिथ्म (पहले क्रम ढाल वंश) का उपयोग करने के लिए कुछ पैरामीटर सेट कर सकता हूं?


5
क्या आप यह हवाला देते हैं कि न्यूटन-राफसन एल्गोरिथम को "ग्रेडिएंट डिसेंट लेवल II" कहा जाता है?
क्लिफ एबी

4
FIsher स्कोरिंग खुद से संबंधित है, लेकिन न्यूटन-रफसन से अलग है, प्रभाव में मॉडल के तहत अपने अपेक्षित मूल्य के साथ हेस्सियन की जगह।
Glen_b -Reinstate मोनिका

@ क्लिफब सॉरी। मुझे लगता Newton's methodहै कि एक दूसरे क्रम ढाल वंश विधि है।
Marcin Kosi Marski

1
@ hxd1011, आपको किसी और के प्रश्न को बदलने के लिए संपादित नहीं करना चाहिए। यह संपादित करना एक बात है जब आप सोचते हैं कि आप जानते हैं कि उनका क्या मतलब है, लेकिन उनका सवाल अस्पष्ट है (शायद अंग्रेजी उनकी मूल भाषा नहीं है, उदाहरण के लिए), लेकिन आपको उनके प्रश्न को अलग नहीं करना चाहिए (जैसे, अधिक सामान्य)। चाहता था। इसके बजाय, एक नया प्रश्न पूछें कि आप क्या चाहते हैं। मैं संपादन वापस ला रहा हूं।
गूँज - मोनिका

1
@ MarcinKosiński न्यूटन की विधि है न्यूटन- Raphson, Raphson केवल एक अधिक सामान्य मामले के लिए न्यूटन के विचारों पर बनाया गया।
एडम जूल

जवाबों:


19

आपको यह जानने में रुचि होगी कि के glmमाध्यम से पहुँचा के लिए प्रलेखन?glm कई उपयोगी जानकारी प्रदान करते हैं: इसके तहत methodहम पाते हैं कि पुनरावृत्त कम से कम वर्ग के लिए डिफ़ॉल्ट विधि है glm.fit, जिसके लिए वर्कहोर्स फ़ंक्शन है glm। इसके अतिरिक्त, दस्तावेज़ में उल्लेख किया गया है कि उपयोगकर्ता-परिभाषित फ़ंक्शन डिफ़ॉल्ट के बजाय यहां प्रदान किए जा सकते हैं।


3
आप स्रोत कोड का अध्ययन करने के लिए केवल फ़ंक्शन नाम glmया प्रॉम्प्ट fit.glmपर भी टाइप कर सकते हैं R
मैथ्यू ड्र्यू

@MatthewDrury मुझे लगता है कि आपको वर्कहॉर्स से मतलब है glm.fitजो पूरी तरह से प्रतिलिपि प्रस्तुत करने योग्य नहीं होगा क्योंकि यह सी कोड पर निर्भर करता है C_Cdqrls
एडम जूल

याह, आप सही कह रहे हैं, मैं आर में ऑर्डर मिलाता हूं। हालांकि आपका क्या मतलब नहीं प्रजनन योग्य है?
मैथ्यू पारा

16

उपयोग की गई विधि आउटपुट में ही उल्लिखित है: यह फिशर स्कोरिंग है। यह ज्यादातर मामलों में न्यूटन-रफसन के बराबर है। अपवाद स्थितियों में आप गैर-प्राकृतिक मापदंडों का उपयोग कर रहे हैं। सापेक्ष जोखिम प्रतिगमन ऐसे परिदृश्य का एक उदाहरण है। वहां, अपेक्षित और देखी गई जानकारी अलग-अलग हैं। सामान्य तौर पर, न्यूटन रैपसन और फिशर स्कोरिंग लगभग समान परिणाम देते हैं।

pp(1p) । तो एक एल्गोरिथ्म एक भोले मॉडल में माध्य का अनुमान लगाकर बनाया गया है, पूर्वानुमानित माध्य से भार पैदा करता है, फिर बारीक परिशुद्धता का उपयोग करते हुए अभिसरण तक अर्थ का पुनर्मूल्यांकन करता है। यह, यह पता चला है, हैफिशर स्कोरिंग। इसके अतिरिक्त, यह EM एल्गोरिथ्म के लिए कुछ अच्छा अंतर्ज्ञान देता है जो जटिल संभावना का अनुमान लगाने के लिए एक अधिक सामान्य रूपरेखा है।

R में डिफ़ॉल्ट सामान्य ऑप्टिमाइज़र एक दूसरे क्षण का अनुमान लगाने के लिए संख्यात्मक तरीकों का उपयोग करता है, मूल रूप से एक रेखीयकरण पर आधारित है (आयामीता के अभिशाप से सावधान रहें)। इसलिए यदि आप कार्यकुशलता और पूर्वाग्रह की तुलना करने में रुचि रखते हैं, तो आप कुछ के साथ एक भोली तार्किक अधिकतम संभावना दिनचर्या को लागू कर सकते हैं

set.seed(1234)
x <- rnorm(1000)
y <- rbinom(1000, 1, exp(-2.3 + 0.1*x)/(1+exp(-2.3 + 0.1*x)))
f <- function(b) {
  p <- exp(b[1] + b[2]*x)/(1+exp(b[1] + b[2]*x))
  -sum(dbinom(y, 1, p, log=TRUE))
}
ans <- nlm(f, p=0:1, hessian=TRUE)

मुझे देता है

> ans$estimate
[1] -2.2261225  0.1651472
> coef(glm(y~x, family=binomial))
(Intercept)           x 
 -2.2261215   0.1651474 

एक ढाल सभ्य / न्यूटन की विधि / BFGS की तुलना में क्या अंतर है? मुझे लगता है कि आपने समझाया, लेकिन मैं काफी फॉलो नहीं हूं।
हायतौ डू

@ hxd1011 देखें "असंवैधानिक अनुकूलन और गैर-समीकरण समीकरणों के लिए संख्यात्मक तरीके" डेनिस, जेई और
श्नेबेल

1
@ hxd1011 जहां तक ​​मैं बता सकता हूं, न्यूटन राफसन को चरणों में हेसियन की आवश्यकता या अनुमान नहीं है। न्यूटन-प्रकार विधि nlmअनुमान के अनुसार क्रमिक रूप से न्यूटन रैपसन को लागू करती है। बीएफजीएस में मुझे लगता है कि न्यूटन राफसन के साथ ढाल की आवश्यकता है, लेकिन क्रमिक चरणों का मूल्यांकन दूसरे क्रम सन्निकटन का उपयोग करके किया जाता है जिसके लिए हेसियन के अनुमान की आवश्यकता होती है। बीएफजीएस अत्यधिक नॉनलाइनर अनुकूलन के लिए अच्छा है। लेकिन जीएलएम के लिए, वे आमतौर पर बहुत अच्छा व्यवहार करते हैं।
एडम जूल

2
आपके द्वारा उल्लिखित एल्गोरिदम की तुलना में मौजूदा उत्तर में "पुनरावृत्त कम से कम वर्ग" का उल्लेख किया गया है, जो चित्र में कैसे प्रवेश करता है?
अमीबा का कहना है कि मोनिका

@ क्या आप अमीबा की टिप्पणियों को संबोधित कर सकते हैं? धन्यवाद
हैताओ दू

1

रिकॉर्ड के लिए, फिशर स्कोरिंग (पुनरावृत्त कम से कम वर्गों) के आधार पर, आर की चमक एल्गोरिथ्म का एक सरल शुद्ध आर कार्यान्वयन, जैसा कि अन्य उत्तर में बताया गया है:

glm_irls = function(X, y, weights=rep(1,nrow(X)), family=poisson(log), maxit=25, tol=1e-16) {
    if (!is(family, "family")) family = family()
    variance = family$variance
    linkinv = family$linkinv
    mu.eta = family$mu.eta
    etastart = NULL

    nobs = nrow(X)    # needed by the initialize expression below
    nvars = ncol(X)   # needed by the initialize expression below
    eval(family$initialize) # initializes n and fitted values mustart
    eta = family$linkfun(mustart) # we then initialize eta with this
    dev.resids = family$dev.resids
    dev = sum(dev.resids(y, linkinv(eta), weights))
    devold = 0
    beta_old = rep(1, nvars)

    for(j in 1:maxit)
    {
      mu = linkinv(eta) 
      varg = variance(mu)
      gprime = mu.eta(eta)
      z = eta + (y - mu) / gprime # potentially -offset if you would have an offset argument as well
      W = weights * as.vector(gprime^2 / varg)
      beta = solve(crossprod(X,W*X), crossprod(X,W*z), tol=2*.Machine$double.eps)
      eta = X %*% beta # potentially +offset if you would have an offset argument as well
      dev = sum(dev.resids(y, mu, weights))
      if (abs(dev - devold) / (0.1 + abs(dev)) < tol) break
      devold = dev
      beta_old = beta
    }
    list(coefficients=t(beta), iterations=j)
}

उदाहरण:

## Dobson (1990) Page 93: Randomized Controlled Trial :
y <- counts <- c(18,17,15,20,10,20,25,13,12)
outcome <- gl(3,1,9)
treatment <- gl(3,3)
X <- model.matrix(counts ~ outcome + treatment)

coef(glm.fit(x=X, y=y, family = poisson(log))) 
  (Intercept)      outcome2      outcome3    treatment2    treatment3 
 3.044522e+00 -4.542553e-01 -2.929871e-01 -7.635479e-16 -9.532452e-16

coef(glm_irls(X=X, y=y, family=poisson(log)))
     (Intercept)   outcome2   outcome3    treatment2   treatment3
[1,]    3.044522 -0.4542553 -0.2929871 -3.151689e-16 -8.24099e-16

GLM फिटिंग एल्गोरिदम की एक अच्छी चर्चा, जिसमें न्यूटन-राफ्सन के साथ तुलना शामिल है (जो IRLS एल्गोरिथ्म में अपेक्षित हेस्सियन के विपरीत हेसियन का उपयोग करता है) और हाइब्रिड एल्गोरिदम (जो IRLS से शुरू होता है, क्योंकि ये शुरू करना आसान है, लेकिन फिर न्यूटन-रफसन का उपयोग करके और अधिक अनुकूलन के साथ समाप्त) जेम्स डब्लू हार्डिन और जोसेफ एम। हिल्बे की पुस्तक "सामान्यीकृत रैखिक मॉडल और एक्सटेंशन" में पाया जा सकता है ।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.