পূর্বাভাস দেওয়া আরে লগইটের আদেশ


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
আমি মনে করি আপনি এটি দেখতে চাইবেন- stats.stackexchange.com/questions/18119/…
ব্লেইন

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()প্যাকেজ থেকে MASS, একটি শ্রেণীগত নির্ভরশীল পরিবর্তনশীল সঙ্গে পরিস্থিতি অনুমান আদেশ বিভাগগুলির সঙ্গে এবং ভবিষ্যতবক্তা । আনুপাতিক প্রতিকূলতা মডেল ধরে1 , , , , কে এক্স 1 , , এক্স জে , , এক্স পিY1,,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 টি বিভাগে কাটা করি।P^(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
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.