लॉजिस्टिक रिग्रेशन प्रिडिक्शन का आउटपुट


14

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

full.model.f = lm(Ft_45 ~ ., LOG_D)
base.model.f = lm(Ft_45 ~ IP_util_E2pl_m02_flg)
step(base.model.f, scope=list(upper=full.model.f, lower=~1),
     direction="forward", trace=FALSE)

मैंने तब अंतिम मॉडल बनाने के लिए आउटपुट का उपयोग किया है:

final.model.f = lm(Ft_45 ~ IP_util_E2pl_m02_flg + IP_util_E2_m02_flg + 
                           AE_NumVisit1_flg + OP_NumVisit1_m01_flg + IP_TotLoS_m02 + 
                           Ft1_45 + IP_util_E1_m05_flg + IP_TotPrNonElecLoS_m02 + 
                           IP_util_E2pl_m03_flg + LTC_coding + OP_NumVisit0105_m03_flg +
                           OP_NumVisit11pl_m03_flg + AE_ArrAmb_m02_flg)

तब मैंने पूर्वानुमान फ़ंक्शन का उपयोग करके डेटा के एक अलग सेट के लिए परिणामों की भविष्यवाणी की है:

log.pred.f.v <- predict(final.model.f, newdata=LOG_V)

मैं एक मनभावन आरओसी वक्र की स्थापना का उपयोग करने में सक्षम रहा हूं और संवेदनशीलता और विशिष्टता स्थापित करने के लिए एक तालिका बनाई है जो मुझे प्रतिक्रियाएं देती है जो मुझे उम्मीद है।

हालाँकि, मैं जो करने की कोशिश कर रहा हूँ वह डेटा की प्रत्येक पंक्ति के लिए स्थापित है, जिसकी सम्भावना फीट_45 की है। 1. यदि मैं log.pred.fv के आउटपुट को देखता हूँ, उदाहरण के लिए,:

1 -0.171739593    
2 -0.049905948    
3 0.141146419    
4 0.11615669    
5 0.07342591    
6 0.093054334    
7 0.957164383    
8 0.098415639    
.
.
.
104 0.196368229    
105 1.045208447    
106 1.05499112

जैसा कि मेरे पास केवल एक अस्थायी समझ है जो मैं कर रहा हूं मैं यह समझने के लिए संघर्ष कर रहा हूं कि नकारात्मक और उच्चतर 1 व्याख्या कैसे करें क्योंकि मैं 0 और 1 के बीच होने की संभावना की उम्मीद करूंगा।

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

जवाबों:


23

सबसे पहले, ऐसा लगता है कि आपने एक नियमित रैखिक प्रतिगमन मॉडल बनाया, न कि लॉजिस्टिक प्रतिगमन मॉडल। लॉजिस्टिक रिग्रेशन मॉडल बनाने के लिए, आपको इसके glm()साथ उपयोग करने की आवश्यकता है family="binomial" , नहीं lm()

आप स्वतंत्र चरों का उपयोग कर निम्नलिखित रसद प्रतिगमन मॉडल बनाने मान लीजिए , और घटना की संभावना की भविष्यवाणी करने के :x1,x2x3y

logit <- glm(y~x1+x2+x3,family="binomial")

इस मॉडल में प्रतिगमन गुणांक और । β0,β1,β2β3

यदि आप करते हैं predict(logit), तो आर गणना करेगा और वापस लौटेगा b0 + b1*x1 + b2*x2 + b3*x3

याद रखें कि आपका लॉजिस्टिक रिग्रेशन समीकरण । y=log(p1p)=β0+β1x1+β2x2+β3x3

इसलिए, आप जो संभावनाएं प्राप्त करना चाहते हैं, आपको लिए इस समीकरण को हल करने की आवश्यकता है ।p

आर में, आप कुछ इस तरह से कर सकते हैं:

pred <- predict(logit,newdata=data) #gives you b0 + b1x1 + b2x2 + b3x3
probs <- exp(pred)/(1+exp(pred)) #gives you probability that y=1 for each observation

बहुत बहुत धन्यवाद, पहला मेरे कोड को सही करने के लिए और दूसरा यह समझाने के लिए कि आर में संभावनाओं को कैसे प्राप्त किया जाए। मैंने इसे दिया है और यह पूरी तरह से काम करता है। काश, मैंने हफ्तों पहले पूछा होता !!
सेबी

2
probs <- exp(predict(logit, type = "response" , newdata=data)कम से कम `probs <- 1 / (1 + exp (-pred)) के साथ कम किया जा सकता है
snoram

11

के प्रलेखन को देखते हुए predict.glm, ऐसा लगता है कि predictकॉल में एक अतिरिक्त पैरामीटर का उपयोग करना जितना आसान है :

 type = "response"

प्रलेखन देखें:

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

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