मानते हुए , इस मॉडल में Bernoulli प्रतिक्रिया चर हैA≤1Yi
Pr(Yi=1)=A1+e−X′ib,
जहाँ (और संभवतः , यह निर्भर करता है कि इसे स्थिरांक या पैरामीटर के रूप में माना जाता है) फिट किए गए गुणांक हैं और अवलोकन लिए डेटा है । मुझे लगता है कि इंटरसेप्ट शब्द को डेटा मैट्रिक्स में निरंतर मान 1 के साथ एक चर जोड़कर नियंत्रित किया जाता है।bAXii
पल की स्थिति हैं:
E[(Yi−A1+e−X′ib)Xi]=0.
हम इसे अवलोकन मानकर, स्थिति के नमूने समकक्ष के साथ प्रतिस्थापित करते हैं :N
m=1N∑i=1N[(Yi−A1+e−X′ib)Xi]=0
यह व्यावहारिक रूप से सभी संभावित गुणांक मानों में को कम करके हल किया गया है (नीचे हम इस अनुकूलन को करने के लिए Nelder-Mead सिंप्लेक्स का उपयोग करेंगे )।खm′mb
इस विषय पर एक उत्कृष्ट आर-ब्लॉगर्स ट्यूटोरियल से उधार लेना , गम पैकेज के साथ आर में इसे लागू करना बहुत सरल है। एक उदाहरण के रूप में, आइरिस आइरिस के साथ काम करते हैं, यह अनुमान लगाते हैं कि क्या एक आईरिस छद्म लंबाई और चौड़ाई और पंखुड़ी की लंबाई और चौड़ाई के आधार पर है। मुझे लगता है कि इस मामले में स्थिर और 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(Yi−A1+e−X′ib)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
प्रदान किए गए मापदंडों के लिए) पर एक त्वरित नज़र से पता चलता है कि गम पैकेज एम'एम को न्यूनतम कर जैसा कि ऊपर बताया गया है। निम्न समतुल्य कोड आर फ़ंक्शन को सीधे कॉल करता है, उसी अनुकूलन को करते हुए जिसे हमने कॉल के साथ प्राप्त किया है :m′moptim
gmm
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