polr()
MASS
Y1,…,g,…,kX1,…,Xj,…,Xppolr()
logit(p(Y⩽g))=lnp(Y⩽g)p(Y>g)=β0g−(β1X1+⋯+βpXp)
अन्य कार्यों में लागू संभावित विकल्पों के लिए, यह उत्तर देखें । लॉजिस्टिक फ़ंक्शन लॉगिट-फ़ंक्शन का व्युत्क्रम है, इसलिए पूर्वानुमानित संभाव्यताएं हैंp^(Y⩽g)
p^(Y⩽g)=eβ^0g−(β^1X1+⋯+β^pXp)1+eβ^0g−(β^1X1+⋯+β^pXp)
भविष्यवाणी की गई श्रेणी की संभावनाएँ । आर में दो भविष्यवक्ताओं साथ एक प्रतिलिपि प्रस्तुत करने योग्य उदाहरण है । एक क्रमिक चर के लिए, मैंने एक सिम्युलेटेड निरंतर चर को 4 श्रेणियों में काटा।एक्स1,एक्स2YP^(Y=g)=P^(Y≤g)−P^(Y≤g−1)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^(Y⩽g)
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
predict
फ़ंक्शन द्वारा लौटाए गए मान आपके द्वारा उत्पन्न किए गए से अलग कैसे हैं ? आपके आश्रित चर की संरचना क्या है? कृपया एक प्रतिलिपि प्रस्तुत करने योग्य उदाहरण प्रदान करें।