R के साथ लॉजिस्टिक रिग्रेशन में गुणांक की गणना करें


18

एकाधिक रैखिक प्रतिगमन में निम्न सूत्र के साथ गुणांक का पता लगाना संभव है।

b=(XX)1(X)Y

beta = solve(t(X) %*% X) %*% (t(X) %*% Y) ; beta

उदाहरण के लिए:

> y <- c(9.3, 4.8, 8.9, 6.5, 4.2, 6.2, 7.4, 6, 7.6, 6.1)
> x0 <- c(1,1,1,1,1,1,1,1,1,1) 
> x1 <-  c(100,50,100,100,50,80,75,65,90,90)
> x2 <- c(4,3,4,2,2,2,3,4,3,2)
> Y <- as.matrix(y)
> X <- as.matrix(cbind(x0,x1,x2))

> beta = solve(t(X) %*% X) %*% (t(X) %*% Y);beta
         [,1]
x0 -0.8687015
x1  0.0611346
x2  0.9234254
> model <- lm(y~+x1+x2) ; model$coefficients
(Intercept)          x1          x2 
 -0.8687015   0.0611346   0.9234254 

मैं उसी "मैनुअल" तरीके से गणना करना चाहूंगा कि लॉजिस्टिक रिग्रेशन के लिए बीटा। जहाँ निश्चित रूप से y 1 या 0 होगा। मान लें कि मैं द्विपद परिवार के साथ एक लॉजिक लिंक का उपयोग कर रहा हूं।


1
वास्तव में आप जो प्रश्न पूछते हैं, वह पहले से ही Analytics.stackexchange.com/questions/949/… पर सामने आ चुका है । यह प्रश्न जो आप पूछना चाहते हैं, वह यहां के उत्तरों द्वारा संबोधित किया गया है।
whuber

जवाबों:


26

रेखीय प्रतिगमन मॉडल में ओएलएस अनुमानक संपत्ति होने में काफी दुर्लभ है कि इसे बंद रूप में दर्शाया जा सकता है, जो कि किसी फ़ंक्शन के अनुकूलक के रूप में व्यक्त किए जाने की आवश्यकता के बिना है। हालांकि, यह एक फ़ंक्शन का एक अनुकूलक है - वर्गों के अवशिष्ट योग - और इस तरह से गणना की जा सकती है।

लॉजिस्टिक रिग्रेशन मॉडल में MLE एक उपयुक्त रूप से परिभाषित लॉग-लाइबिलिटी फ़ंक्शन का ऑप्टिमाइज़र भी है, लेकिन चूंकि यह बंद रूप में उपलब्ध नहीं है, इसलिए इसे ऑप्टिमाइज़र के रूप में गणना की जानी चाहिए।

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

वर्गों के रैखिक प्रतिगमन अवशिष्ट राशि

OLS आकलनकर्ता को स्क्वेर्स फ़ंक्शन के प्रसिद्ध अवशिष्ट योग के अनुकूलक के रूप में परिभाषित किया गया है:

β^=आर्गमिनटβ(Y-एक्सβ)'(Y-एक्सβ)=(एक्स'एक्स)-1एक्स'Y

दो बार अलग-अलग होने की स्थिति में, वर्गों के अवशिष्ट योग की तरह उत्तल कार्य, अधिकांश ग्रेडिएंट-आधारित ऑप्टिमाइज़र अच्छा काम करते हैं। इस मामले में, मैं बीएफजीएस एल्गोरिथ्म का उपयोग करूंगा।

#================================================
# reading in the data & pre-processing
#================================================
urlSheatherData = "http://www.stat.tamu.edu/~sheather/book/docs/datasets/MichelinNY.csv"
dfSheather = as.data.frame(read.csv(urlSheatherData, header = TRUE))

# create the design matrices
vY = as.matrix(dfSheather['InMichelin'])
mX = as.matrix(dfSheather[c('Service','Decor', 'Food', 'Price')])

# add an intercept to the predictor variables
mX = cbind(1, mX)

# the number of variables and observations
iK = ncol(mX)
iN = nrow(mX)

#================================================
# compute the linear regression parameters as 
#   an optimal value
#================================================
# the residual sum of squares criterion function
fnRSS = function(vBeta, vY, mX) {
  return(sum((vY - mX %*% vBeta)^2))
}

# arbitrary starting values
vBeta0 = rep(0, ncol(mX))

# minimise the RSS function to get the parameter estimates
optimLinReg = optim(vBeta0, fnRSS,
                   mX = mX, vY = vY, method = 'BFGS', 
                   hessian=TRUE)

#================================================
# compare to the LM function
#================================================
linregSheather = lm(InMichelin ~ Service + Decor + Food + Price,
                    data = dfSheather)

यह प्रदान करता है:

> print(cbind(coef(linregSheather), optimLinReg$par))
                    [,1]         [,2]
(Intercept) -1.492092490 -1.492093965
Service     -0.011176619 -0.011176583
Decor        0.044193000  0.044193023
Food         0.057733737  0.057733770
Price        0.001797941  0.001797934

लॉजिस्टिक रिग्रेशन लॉग-लाइबिलिटी

लॉजिस्टिक रिग्रेशन मॉडल में MLE से संबंधित मानदंड फ़ंक्शन लॉग-लाइबिलिटी फ़ंक्शन है।

लॉगएलn(β)=Σमैं=1n(YमैंलॉगΛ(एक्समैं'β)+(1-Yमैं)लॉग(1-Λ(एक्समैं'β)))
जहां लॉजिस्टिक फ़ंक्शन है। पैरामीटर का अनुमान इस फ़ंक्शन के ऑप्टिमाइज़र हैं Λ()=1/(1+exp(-))
β^=आर्गअधिकतमβलॉगएलn(β)

मैं दिखाता हूं optim()कि बीएफजीएस एल्गोरिथ्म को एक बार फिर से काम करने के लिए फ़ंक्शन का उपयोग करके मानदंड फ़ंक्शन का निर्माण और अनुकूलन कैसे करें ।

#================================================
# compute the logistic regression parameters as 
#   an optimal value
#================================================
# define the logistic transformation
logit = function(mX, vBeta) {
  return(exp(mX %*% vBeta)/(1+ exp(mX %*% vBeta)) )
}

# stable parametrisation of the log-likelihood function
# Note: The negative of the log-likelihood is being returned, since we will be
# /minimising/ the function.
logLikelihoodLogitStable = function(vBeta, mX, vY) {
  return(-sum(
    vY*(mX %*% vBeta - log(1+exp(mX %*% vBeta)))
    + (1-vY)*(-log(1 + exp(mX %*% vBeta)))
    ) 
  ) 
}

# initial set of parameters
vBeta0 = c(10, -0.1, -0.3, 0.001, 0.01) # arbitrary starting parameters

# minimise the (negative) log-likelihood to get the logit fit
optimLogit = optim(vBeta0, logLikelihoodLogitStable,
                   mX = mX, vY = vY, method = 'BFGS', 
                   hessian=TRUE)

#================================================
# test against the implementation in R
# NOTE glm uses IRWLS: 
# http://en.wikipedia.org/wiki/Iteratively_reweighted_least_squares
# rather than the BFGS algorithm that we have reported
#================================================
logitSheather = glm(InMichelin ~ Service + Decor + Food + Price,
                                  data = dfSheather, 
                         family = binomial, x = TRUE)

यह प्रदान करता है

> print(cbind(coef(logitSheather), optimLogit$par))
                    [,1]         [,2]
(Intercept) -11.19745057 -11.19661798
Service      -0.19242411  -0.19249119
Decor         0.09997273   0.09992445
Food          0.40484706   0.40483753
Price         0.09171953   0.09175369

एक चेतावनी के रूप में, ध्यान दें कि संख्यात्मक अनुकूलन एल्गोरिदम को सावधानीपूर्वक उपयोग की आवश्यकता होती है या आप सभी प्रकार के रोग समाधानों के साथ समाप्त हो सकते हैं। जब तक आप उन्हें अच्छी तरह से नहीं समझते हैं, तब तक उपलब्ध पैकेज्ड विकल्पों का उपयोग करना सबसे अच्छा है, जो आपको अनुमान लगाने के तरीके के बारे में चिंता करने के बजाय मॉडल को निर्दिष्ट करने पर ध्यान केंद्रित करने की अनुमति देते हैं।


1
महान काम @tchakravarty, लॉग-लाइबिलिटी फ़ंक्शन का उपयोग करके सरल किया जा सकता है-sum(vY%*%(mX%*%vBeta)-log(1+exp(mX%*%vBeta)))
ममून बेंगज़ल

11

आप यहां से वहां नहीं पहुंच सकते। सामान्य रैखिक मॉडल और लॉजिस्टिक मॉडल दोनों के समाधान संबंधित अधिकतम संभावना समीकरणों को हल करने से उत्पन्न होते हैं, लेकिन केवल रैखिक मॉडल में एक बंद फॉर्म समाधान होता है।

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


2
या "पुनरावृत्त कम से कम वर्गों" के लिए वेब पर खोज करें ...
बेन बोल्कर

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