ম্যানুয়ালি ভবিষ্যৎবাণী ব্যবহার থেকে উদ্ভূত যাচাই করতে polr()
প্যাকেজ থেকে MASS
, একটি শ্রেণীগত নির্ভরশীল পরিবর্তনশীল সঙ্গে পরিস্থিতি অনুমান আদেশ বিভাগগুলির সঙ্গে এবং ভবিষ্যতবক্তা । আনুপাতিক প্রতিকূলতা মডেল ধরে1 , … , ছ , … , কে এক্স 1 , … , এক্স জে , … , এক্স পি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 টি বিভাগে কাটা করি।P^(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
ফাংশনটি দিয়ে ফিরে আসা মানগুলি আপনি নিজে নিজে তৈরি করেছেন তার থেকে আলাদা কীভাবে ? আপনার নির্ভরশীল ভেরিয়েবলের কাঠামো কী? একটি পুনরুত্পাদনযোগ্য উদাহরণ প্রদান করুন।