आर में लॉग इन करने का आदेश दिया


12

मैं एक आदेशित प्रतिगमन करने की कोशिश कर रहा हूँ। मैं ऐसा मॉडल चला रहा हूं (आय और जनसंख्या उपायों से बाजार में कंपनियों की संख्या का आकलन करने वाला एक छोटा सा मॉडल)। मेरा सवाल भविष्यवाणियों के बारे में है।

nfirm.opr<-polr(y~pop0+inc0, Hess = TRUE)
pr_out<-predict(nfirm.opr)

जब मैं पूर्वानुमान चलाता हूं (जो मैं भविष्यवाणी की गई y को प्राप्त करने के लिए उपयोग करने की कोशिश कर रहा हूं), तो आउटपुट 0, 3, या 27 हैं, जो किसी भी तरह से प्रतिबिंबित नहीं करता है कि गुणांक से मेरे मैनुअल भविष्यवाणियों के आधार पर भविष्यवाणी क्या प्रतीत होनी चाहिए अनुमान और हस्तक्षेप। क्या कोई जानता है कि मेरे ऑर्डर किए गए लॉगिट मॉडल के लिए "सटीक" भविष्यवाणियां कैसे प्राप्त करें?

संपादित करें

मेरी चिंता को स्पष्ट करने के लिए, मेरे प्रतिक्रिया डेटा में सभी स्तरों के अवलोकन हैं

>head(table(y))
y
0  1  2  3  4  5 
29 21 19 27 15 16 

जहाँ मेरा अनुमान चर के रूप में लगता है

> head(table(pr_out))
pr_out
0     1   2   3   4   5 
117   0   0 114   0   0 

2
यह काफी अस्पष्ट है। predictफ़ंक्शन द्वारा लौटाए गए मान आपके द्वारा उत्पन्न किए गए से अलग कैसे हैं ? आपके आश्रित चर की संरचना क्या है? कृपया एक प्रतिलिपि प्रस्तुत करने योग्य उदाहरण प्रदान करें।
स्वेन हेनस्टीन

1
मुझे लगता है कि आप इसे देखना चाहेंगे- आंकड़े.stackexchange.com/questions/18119/…
Waan

2
मैं आपकी स्थिति का काफी पालन नहीं करता। आप कहते हैं कि आप एक क्रमिक प्रतिगमन मॉडल का उपयोग कर रहे हैं, लेकिन आप यह भी कहते हैं, जैसा कि मुझे सबसे अच्छा समझ में आता है, कि आपकी प्रतिक्रिया चर एक बाजार में फर्मों की संख्या है। यह एक गणना है , यह क्रमबद्ध है, लेकिन ओएलआर मॉडल बनाने का सही तरीका नहीं है; आप पोइसन प्रतिगमन के कुछ प्रकार का उपयोग करना चाहते हैं।
गूँग - मोनिका

2
@ गुंग हां, मैं गिनती बनाम अध्यादेश के बारे में बात समझता हूं। फिलहाल, मैं कागजी विचारों को दोहराने की कोशिश कर रहा हूं ।repec.org/a/ucp/jpolec/v99y1991i5p977-1009.html और वे एक क्रमिक प्रतिगमन का उपयोग करते हैं। मैंने भी गणना मॉडल का अनुमान लगाया है, लेकिन यह मुझे इस विशेष कार्य में मदद नहीं करता है। इसके अलावा, नहीं, ऐसा नहीं है कि मैं आर को ऐसा करना चाहता हूं, मैं यह समझने की कोशिश कर रहा हूं कि व्यवहार मेरी अपेक्षाओं से भटक रहा है (क्योंकि मुझे संदेह है कि त्रुटि मेरी ओर है, आर नहीं)।
प्रोटोस्टैस्ट

1
क्या आपने polr()अन्य कार्यों के खिलाफ सत्यापन किया था ? आप की कोशिश कर सकते lrm()पैकेज से rms: lrmFit <- lrm(y ~ pop0 + inc0); predict(lrmFit, type="fitted.ind")। एक अन्य विकल्प है vglm()पैकेज से VGAM: vglmFit <- vglm(y ~ pop0 + inc0, family=propodds); predict(vglmFit, type="response")। दोनों ही अनुमानित श्रेणी की संभावनाओं के मैट्रिक्स को लौटाते हैं। वहां से अनुमानित श्रेणियों को प्राप्त करने के लिए मेरा उत्तर देखें ।
काराकल

जवाबों:


23

polr()MASSY1,,g,,kX1,,Xj,,Xppolr()

logit(p(Yg))=lnp(Yg)p(Y>g)=β0g(β1X1++βpXp)

अन्य कार्यों में लागू संभावित विकल्पों के लिए, यह उत्तर देखें । लॉजिस्टिक फ़ंक्शन लॉगिट-फ़ंक्शन का व्युत्क्रम है, इसलिए पूर्वानुमानित संभाव्यताएं हैंp^(Yg)

p^(Yg)=eβ^0g(β^1X1++β^pXp)1+eβ^0g(β^1X1++β^pXp)

भविष्यवाणी की गई श्रेणी की संभावनाएँ । आर में दो भविष्यवक्ताओं साथ एक प्रतिलिपि प्रस्तुत करने योग्य उदाहरण है । एक क्रमिक चर के लिए, मैंने एक सिम्युलेटेड निरंतर चर को 4 श्रेणियों में काटा।एक्स1,एक्स2YP^(Y=g)=P^(Yg)P^(Yg1)X1,X2Y

set.seed(1.234)
N     <- 100                                    # number of observations
X1    <- rnorm(N, 5, 7)                         # predictor 1
X2    <- rnorm(N, 0, 8)                         # predictor 2
Ycont <- 0.5*X1 - 0.3*X2 + 10 + rnorm(N, 0, 6)  # continuous dependent variable
Yord  <- cut(Ycont, breaks=quantile(Ycont), include.lowest=TRUE,
             labels=c("--", "-", "+", "++"), ordered=TRUE)    # ordered factor

अब प्रयोग करने वाले आनुपातिक बाधाओं के मॉडल को फिट करें polr()और उपयोग की गई श्रेणी की संभावनाओं के मैट्रिक्स को प्राप्त करें predict(polr(), type="probs")

> library(MASS)                              # for polr()
> polrFit <- polr(Yord ~ X1 + X2)            # ordinal regression fit
> Phat    <- predict(polrFit, type="probs")  # predicted category probabilities
> head(Phat, n=3)
         --         -         +        ++
1 0.2088456 0.3134391 0.2976183 0.1800969
2 0.1967331 0.3068310 0.3050066 0.1914293
3 0.1938263 0.3051134 0.3067515 0.1943088

इन परिणामों को मैन्युअल रूप से सत्यापित करने के लिए, हमें पैरामीटर अनुमानों को निकालने की आवश्यकता है, इनमें से पूर्वानुमानित लॉग की गणना करें, इन लॉगिट्स से अनुमानित भविष्यवाणियों की गणना , और फिर एक मैट्रिक्स पर अनुमानित पूर्वानुमान संभावनाओं को बाँधते हैं। ।p^(Yg)

ce <- polrFit$coefficients         # coefficients b1, b2
ic <- polrFit$zeta                 # intercepts b0.1, b0.2, b0.3
logit1 <- ic[1] - (ce[1]*X1 + ce[2]*X2)
logit2 <- ic[2] - (ce[1]*X1 + ce[2]*X2)
logit3 <- ic[3] - (ce[1]*X1 + ce[2]*X2)
pLeq1  <- 1 / (1 + exp(-logit1))   # p(Y <= 1)
pLeq2  <- 1 / (1 + exp(-logit2))   # p(Y <= 2)
pLeq3  <- 1 / (1 + exp(-logit3))   # p(Y <= 3)
pMat   <- cbind(p1=pLeq1, p2=pLeq2-pLeq1, p3=pLeq3-pLeq2, p4=1-pLeq3)  # matrix p(Y = g)

से परिणाम की तुलना करें polr()

> all.equal(pMat, Phat, check.attributes=FALSE)
[1] TRUE

भविष्यवाणी की गई श्रेणियों के लिए, predict(polr(), type="class")बस प्रत्येक अवलोकन के लिए - सबसे अधिक संभावना वाली श्रेणी।

> categHat <- levels(Yord)[max.col(Phat)]   # category with highest probability
> head(categHat)
[1] "-"  "-"  "+"  "++" "+"  "--"

से परिणाम की तुलना करें polr()

> facHat <- predict(polrFit, type="class")  # predicted categories
> head(facHat)
[1] -  -  +  ++ +  --
Levels: -- - + ++

> all.equal(factor(categHat), facHat, check.attributes=FALSE)  # manual verification
[1] TRUE
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.