लॉजिस्टिक रिग्रेशन पैरामीटर की गणना के लिए क्षणों (जीएमएम) की सामान्यीकृत विधि का उपयोग करना


13

मैं एक रिग्रेशन के गुणांक की गणना करना चाहता हूं जो लॉजिस्टिक रिग्रेशन (वास्तव में एक और गुणांक के साथ लॉजिस्टिक रिग्रेशन के समान है: जब दिया जा सकता है)। मैंने गुणांक की गणना करने के लिए GMM का उपयोग करने के बारे में सोचा था, लेकिन मुझे यकीन नहीं है कि मुझे किन परिस्थितियों का उपयोग करना चाहिए।

A1+e(b0+b1x1+b2x2+),
A

क्या कोई मेरी यह मदद कर सकता है?

धन्यवाद!


जब आप कहते हैं कि " दिया जा सकता है", तो क्या इसका मतलब यह है कि यह उपयोगकर्ता द्वारा निर्दिष्ट है या यह मॉडल द्वारा अनुमानित है? A
मैक्रो

किसी भी तरह से। मैं इसे एक इनपुट के रूप में रख सकता हूं (उदाहरण के लिए = 0.25) या पाए जाने वाले गुणांकों में से एक हो सकता
हूं

क्या यह विषय से अलग-अलग होता है (यानी यह डेटा है) या क्या यह सभी टिप्पणियों में एक निश्चित स्थिर है?
मैक्रो

सभी प्रेक्षणों (जैसे b0, b1, ...) पर
नियत

2
जीएमएम के बजाय अधिकतम संभावना का उपयोग क्यों न करें?
मैक्रो

जवाबों:


6

मानते हुए , इस मॉडल में Bernoulli प्रतिक्रिया चर हैA1Yi

Pr(Yi=1)=A1+eXib,

जहाँ (और संभवतः , यह निर्भर करता है कि इसे स्थिरांक या पैरामीटर के रूप में माना जाता है) फिट किए गए गुणांक हैं और अवलोकन लिए डेटा है । मुझे लगता है कि इंटरसेप्ट शब्द को डेटा मैट्रिक्स में निरंतर मान 1 के साथ एक चर जोड़कर नियंत्रित किया जाता है।bAXii

पल की स्थिति हैं:

E[(YiA1+eXib)Xi]=0.

हम इसे अवलोकन मानकर, स्थिति के नमूने समकक्ष के साथ प्रतिस्थापित करते हैं :N

m=1Ni=1N[(YiA1+eXib)Xi]=0

यह व्यावहारिक रूप से सभी संभावित गुणांक मानों में को कम करके हल किया गया है (नीचे हम इस अनुकूलन को करने के लिए Nelder-Mead सिंप्लेक्स का उपयोग करेंगे )।mmb

इस विषय पर एक उत्कृष्ट आर-ब्लॉगर्स ट्यूटोरियल से उधार लेना , गम पैकेज के साथ आर में इसे लागू करना बहुत सरल है। एक उदाहरण के रूप में, आइरिस आइरिस के साथ काम करते हैं, यह अनुमान लगाते हैं कि क्या एक आईरिस छद्म लंबाई और चौड़ाई और पंखुड़ी की लंबाई और चौड़ाई के आधार पर है। मुझे लगता है कि इस मामले में स्थिर और 1 के बराबर है:A

dat <- as.matrix(cbind(data.frame(IsVersicolor = as.numeric(iris$Species == "versicolor"), Intercept=1), iris[,1:4]))
head(dat)
#      IsVersicolor Intercept Sepal.Length Sepal.Width Petal.Length Petal.Width
# [1,]            0         1          5.1         3.5          1.4         0.2
# [2,]            0         1          4.9         3.0          1.4         0.2
# [3,]            0         1          4.7         3.2          1.3         0.2
# [4,]            0         1          4.6         3.1          1.5         0.2
# [5,]            0         1          5.0         3.6          1.4         0.2
# [6,]            0         1          5.4         3.9          1.7         0.4

यहां लॉजिस्टिक रिग्रेशन का उपयोग करते हुए फिट किए गए गुणांक हैं:

summary(glm(IsVersicolor~., data=as.data.frame(dat[,-2]), family="binomial"))
# Coefficients:
#              Estimate Std. Error z value Pr(>|z|)    
# (Intercept)    7.3785     2.4993   2.952 0.003155 ** 
# Sepal.Length  -0.2454     0.6496  -0.378 0.705634    
# Sepal.Width   -2.7966     0.7835  -3.569 0.000358 ***
# Petal.Length   1.3136     0.6838   1.921 0.054713 .  
# Petal.Width   -2.7783     1.1731  -2.368 0.017868 *  

मुख्य टुकड़ा हम उपयोग जीएमएम करने की जरूरत है एक समारोह है कि रिटर्न पल की स्थिति, अर्थात् पंक्तियों प्रत्येक अवलोकन के लिए :i(YiA1+eXib)Xii

moments <- function(b, X) {
  A <- 1
  as.vector(X[,1] - A / (1 + exp(-(X[,-1] %*% cbind(b))))) * X[,-1]
}

हम अब संख्यात्मक रूप से फिट किए गए गुणांक को एक सुविधाजनक प्रारंभिक बिंदु के रूप में रैखिक प्रतिगमन गुणांक का उपयोग करके फिट कर सकते हैं (जैसा कि ऊपर दिए गए ट्यूटोरियल में सुझाव दिया गया है):b

init.coef <- lm(IsVersicolor~., data=as.data.frame(dat[,-2]))$coefficients
library(gmm)
fitted <- gmm(moments, x = dat, t0 = init.coef, type = "iterative", crit = 1e-19,
              wmatrix = "optimal", method = "Nelder-Mead",
              control = list(reltol = 1e-19, maxit = 20000))
fitted
#  (Intercept)  Sepal.Length   Sepal.Width  Petal.Length   Petal.Width  
#      7.37849      -0.24536      -2.79657       1.31364      -2.77834  
# 
# Convergence code =  0 

0 का अभिसरण कोड अभिसरण प्रक्रिया को इंगित करता है, और पैरामीटर लॉजिस्टिक प्रतिगमन द्वारा लौटाए गए समान हैं।

गम पैकेज स्रोत (कार्यों momentEstim.baseGmm.iterativeऔर gmm:::.obj1प्रदान किए गए मापदंडों के लिए) पर एक त्वरित नज़र से पता चलता है कि गम पैकेज एम'एम को न्यूनतम कर जैसा कि ऊपर बताया गया है। निम्न समतुल्य कोड आर फ़ंक्शन को सीधे कॉल करता है, उसी अनुकूलन को करते हुए जिसे हमने कॉल के साथ प्राप्त किया है :mmoptimgmm

gmm.objective <- function(theta, x, momentFun) {
  avg.moment <- colMeans(momentFun(theta, x))
  sum(avg.moment^2)
}
optim(init.coef, gmm.objective, x=dat, momentFun=moments,
      control = list(reltol = 1e-19, maxit = 20000))$par
#  (Intercept) Sepal.Length  Sepal.Width Petal.Length  Petal.Width 
#    7.3784866   -0.2453567   -2.7965681    1.3136433   -2.7783439 
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.