আমি একটি লিমার () মডেল থেকে ভবিষ্যদ্বাণীটির কাছাকাছি পূর্বাভাস ব্যবধান পেতে চাই। আমি এ সম্পর্কে কিছু আলোচনা পেয়েছি:
http://rstudio-pubs-static.s3.amazonaws.com/24365_2803ab8299934e888a60e7b16113f619.html
তবে তারা এলোমেলো প্রভাবগুলির অনিশ্চয়তাটিকে বিবেচনায় নেবে না বলে মনে হয়।
এখানে একটি নির্দিষ্ট উদাহরণ। আমি সোনার মাছ দৌড় করছি। আমার কাছে গত 100 রেসের ডেটা রয়েছে have আমার আরআর অনুমান এবং এফই অনুমানের বিষয়টি অনিশ্চিততার মধ্যে রেখে আমি 101 তম ভবিষ্যদ্বাণী করতে চাই। আমি মাছের জন্য এলোমেলো ইন্টারসেপ্ট (10 টি আলাদা আলাদা মাছ রয়েছে) এবং ওজনের স্থির প্রভাব (কম ভারী মাছ দ্রুত হয়) সহ আমি অন্তর্ভুক্ত করছি।
library("lme4")
fish <- as.factor(rep(letters[1:10], each=100))
race <- as.factor(rep(900:999, 10))
oz <- round(1 + rnorm(1000)/10, 3)
sec <- 9 + rep(1:10, rep(100,10))/10 + oz + rnorm(1000)/10
fishDat <- data.frame(fishID = fish,
raceID = race, fishWt = oz, time = sec)
head(fishDat)
plot(fishDat$fishID, fishDat$time)
lme1 <- lmer(time ~ fishWt + (1 | fishID), data=fishDat)
summary(lme1)
এখন, ১০১ তম প্রতিযোগিতা সম্পর্কে ভবিষ্যদ্বাণী করা। মাছগুলি ওজন করা হয়েছে এবং যেতে প্রস্তুত:
newDat <- data.frame(fishID = letters[1:10],
raceID = rep(1000, 10),
fishWt = 1 + round(rnorm(10)/10, 3))
newDat$pred <- predict(lme1, newDat)
newDat
fishID raceID fishWt pred
1 a 1000 1.073 10.15348
2 b 1000 1.001 10.20107
3 c 1000 0.945 10.25978
4 d 1000 1.110 10.51753
5 e 1000 0.910 10.41511
6 f 1000 0.848 10.44547
7 g 1000 0.991 10.68678
8 h 1000 0.737 10.56929
9 i 1000 0.993 10.89564
10 j 1000 0.649 10.65480
ফিশ ডি সত্যিই নিজেকে ছেড়ে দিয়েছে (১.১১ ওজ) এবং ফিশ ই এবং ফিশ এফের কাছে হেরে যাওয়ার পূর্বাভাস রয়েছে, দুজনেই তিনি অতীতের চেয়ে ভাল ছিলেন। তবে, এখন আমি বলতে সক্ষম হতে চাই, "ফিশ ই (0,91 ওজন ওজনের) ফিশ ডি (সম্ভাব্য পি। দিয়ে 1.11oz ওজন) কে পরাস্ত করবে।" Lme4 ব্যবহার করে এই জাতীয় বিবৃতি দেওয়ার কোনও উপায় আছে কি? আমি চাই আমার সম্ভাব্যতা পি স্থির প্রভাব এবং এলোমেলো প্রভাব উভয় ক্ষেত্রে আমার অনিশ্চয়তা বিবেচনায় নেবে।
ধন্যবাদ!
পিএস predict.merMod
ডকুমেন্টেশনটি দেখে, এটি প্রস্তাব দেয় "ভবিষ্যদ্বাণীগুলির স্ট্যান্ডার্ড ত্রুটিগুলি গণনা করার কোনও বিকল্প নেই কারণ বৈকল্পিক পরামিতিগুলিতে অনিশ্চয়তা অন্তর্ভুক্ত করে এমন একটি কার্যকর পদ্ধতি নির্ধারণ করা কঠিন; আমরা bootMer
এই কাজের জন্য সুপারিশ করি ," তবে গলির দ্বারা আমি দেখতে পাচ্ছি না এটি করতে কিভাবে ব্যবহার bootMer
করবেন। bootMer
প্যারামিটার অনুমানের জন্য বুটস্ট্র্যাপযুক্ত আত্মবিশ্বাসের ব্যবধানগুলি পেতে এটি ব্যবহার করা হবে বলে মনে হয় তবে আমি ভুল হতে পারি।
আপডেট করা প্রশ্ন:
ঠিক আছে, আমি মনে করি আমি ভুল প্রশ্ন করছি। আমি বলতে সক্ষম হতে চাই, "ফিশ এ, ওজনের ওজনের মাছের রেসের সময় হবে (এলসিএল, ইউসিএল) 90% সময়।"
উদাহরণটি আমি রেখেছি যে, 1.0 এ ওজনের ওজনের ফিশ এ এর 9 + 0.1 + 1 = 10.1 sec
গড় রেস টাইম হবে 0.1 এর মান বিচ্যুতি নিয়ে। সুতরাং, তার পর্যবেক্ষণের রেসের সময়কালের মধ্যে হবে
x <- rnorm(mean = 10.1, sd = 0.1, n=10000)
quantile(x, c(0.05,0.50,0.95))
5% 50% 95%
9.938541 10.100032 10.261243
90% সময়। আমি একটি পূর্বাভাস ফাংশন চাই যা আমাকে সেই উত্তর দেওয়ার চেষ্টা করে। সমস্ত কিছু সেট fishWt = 1.0
করা newDat
, সিমটি আবার চালানো এবং ব্যবহার করা (নীচে বেন বলকারের পরামর্শ অনুসারে)
predFun <- function(fit) {
predict(fit,newDat)
}
bb <- bootMer(lme1,nsim=1000,FUN=predFun, use.u = FALSE)
predMat <- bb$t
দেয়
> quantile(predMat[,1], c(0.05,0.50,0.95))
5% 50% 95%
10.01362 10.55646 11.05462
এটি কি আসলে জনসংখ্যার গড়কে কেন্দ্র করে কেন্দ্র করে বলে মনে হচ্ছে? যেন এটি ফিশআইডিএফেক্টটিকে বিবেচনায় নিচ্ছে না? আমি ভেবেছিলাম এটি সম্ভবত একটি নমুনা আকারের সমস্যা, তবে আমি যখন পর্যবেক্ষণ করা দৌড়গুলির সংখ্যা 100 থেকে 10000 এড়িয়েছি, তখনও আমি অনুরূপ ফলাফল পেয়েছি।
আমি ডিফল্টরূপে bootMer
ব্যবহারগুলি নোট করব use.u=FALSE
। ফ্লিপ দিকে, ব্যবহার করে
bb <- bootMer(lme1,nsim=1000,FUN=predFun, use.u = TRUE)
দেয়
> quantile(predMat[,1], c(0.05,0.50,0.95))
5% 50% 95%
10.09970 10.10128 10.10270
এই ব্যবধানটি খুব সংকীর্ণ এবং এটি ফিশ এ এর গড় সময়ের জন্য একটি আত্মবিশ্বাসের ব্যবধান বলে মনে হচ্ছে। আমি ফিশ এ এর পর্যবেক্ষণের রেস টাইমের জন্য একটি আস্থার ব্যবধান চাই, তার গড় রেসের সময় নয়। আমি কীভাবে এটি পেতে পারি?
আপডেট 2, প্রায়:
আমি ভেবেছিলাম আমি জেলম্যান অ্যান্ড হিল (2007) পৃষ্ঠা 273 তে যা খুঁজছি তা পেয়েছি the arm
প্যাকেজটি ব্যবহারের প্রয়োজন Need
library("arm")
মাছ এ:
x.tilde <- 1 #observed fishWt for new race
sigma.y.hat <- sigma.hat(lme1)$sigma$data #get uncertainty estimate of our model
coef.hat <- as.matrix(coef(lme1)$fishID)[1,] #get intercept (random) and fishWt (fixed) parameter estimates
y.tilde <- rnorm(1000, coef.hat %*% c(1, x.tilde), sigma.y.hat) #simulate
quantile (y.tilde, c(.05, .5, .95))
5% 50% 95%
9.930695 10.100209 10.263551
সমস্ত মাছের জন্য:
x.tilde <- rep(1,10) #assume all fish weight 1 oz
#x.tilde <- 1 + rnorm(10)/10 #alternatively, draw random weights as in original example
sigma.y.hat <- sigma.hat(lme1)$sigma$data
coef.hat <- as.matrix(coef(lme1)$fishID)
y.tilde <- matrix(rnorm(1000, coef.hat %*% matrix(c(rep(1,10), x.tilde), nrow = 2 , byrow = TRUE), sigma.y.hat), ncol = 10, byrow = TRUE)
quantile (y.tilde[,1], c(.05, .5, .95))
5% 50% 95%
9.937138 10.102627 10.234616
আসলে, এটি সম্ভবত আমি যা চাই ঠিক তা নয়। আমি কেবল সামগ্রিক মডেল অনিশ্চয়তা বিবেচনা করছি। আমার যে পরিস্থিতিতে আছে, বলুন, ফিশ কে এর জন্য 5 টি রেস রেস এবং ফিশ এল এর 1000 টি পর্যবেক্ষণ করা রেস, আমি মনে করি ফিশ কে সম্পর্কে আমার ভবিষ্যদ্বাণীটির সাথে সম্পর্কিত অনিশ্চয়তা ফিশ এল এর জন্য আমার পূর্বাভাসের সাথে যুক্ত অনিশ্চয়তার চেয়ে অনেক বেশি বড় হওয়া উচিত।
গেলম্যান এবং হিল ২০০ into-তে আরও সন্ধান করবে I আমি মনে করি আমার শেষ পর্যন্ত বিইজিএস (বা স্ট্যান) এ যেতে হবে।
3 য় আপডেট করুন:
সম্ভবত আমি জিনিসগুলি খারাপভাবে ধারণ করছি। predictInterval()
নীচে একটি উত্তরে জ্যারেড নোলস দ্বারা প্রদত্ত ফাংশনটি ব্যবহার করা অন্তরগুলি দেয় যা আমি প্রত্যাশা করি না ...
library("lattice")
library("lme4")
library("ggplot2")
fish <- c(rep(letters[1:10], each = 100), rep("k", 995), rep("l", 5))
oz <- round(1 + rnorm(2000)/10, 3)
sec <- 9 + c(rep(1:10, each = 100)/10,rep(1.1, 995), rep(1.2, 5)) + oz + rnorm(2000)
fishDat <- data.frame(fishID = fish, fishWt = oz, time = sec)
dim(fishDat)
head(fishDat)
plot(fishDat$fishID, fishDat$time)
lme1 <- lmer(time ~ fishWt + (1 | fishID), data=fishDat)
summary(lme1)
dotplot(ranef(lme1, condVar = TRUE))
আমি দুটি নতুন মাছ যুক্ত করেছি। ফিশ কে, যার জন্য আমরা 995 ঘোড়দৌড় লক্ষ্য করেছি এবং ফিশ এল, যার জন্য আমরা 5 দৌড় লক্ষ্য করেছি। আমরা ফিশ এজে এর জন্য 100 টি রেস পর্যবেক্ষণ করেছি। আমি lmer()
আগের মত ফিট । এ খুঁজছি dotplot()
থেকে lattice
প্যাকেজ:
ডিফল্টরূপে, dotplot()
তাদের বিন্দু অনুমানের দ্বারা এলোমেলো প্রভাবগুলিকে পুনরায় সাজায়। ফিশ এল এর অনুমানটি শীর্ষ লাইনে রয়েছে এবং এটির একটি বিস্তৃত আস্থা অন্তর রয়েছে। ফিশ কে তৃতীয় লাইনে রয়েছে এবং এর আত্মবিশ্বাসের খুব সংকীর্ণতা রয়েছে। এটি আমার কাছে বোধগম্য হয়। ফিশ কে তে আমাদের প্রচুর ডেটা রয়েছে তবে ফিশ এল এ প্রচুর ডেটা নেই, তাই ফিশ কে এর আসল সাঁতারের গতি সম্পর্কে আমাদের অনুমানের প্রতি আমরা আরও আত্মবিশ্বাসী। এখন, আমি মনে করি এটি ফিশ কে এর সংকীর্ণ পূর্বাভাস ব্যবধান এবং ব্যবহারের সময় ফিশ এল এর বিস্তৃত পূর্বাভাস ব্যবধানের দিকে নিয়ে যায় predictInterval()
। Howeva:
newDat <- data.frame(fishID = letters[1:12],
fishWt = 1)
preds <- predictInterval(lme1, newdata = newDat, n.sims = 999)
preds
ggplot(aes(x=letters[1:12], y=fit, ymin=lwr, ymax=upr), data=preds) +
geom_point() +
geom_linerange() +
labs(x="Index", y="Prediction w/ 95% PI") + theme_bw()
এই সমস্ত পূর্বাভাস অন্তরগুলি প্রস্থে অভিন্ন বলে মনে হচ্ছে। কেন ফিশ কে সম্পর্কে আমাদের ভবিষ্যদ্বাণী অন্যদের সংকীর্ণ হয় না? ফিশ এল এর জন্য আমাদের ভবিষ্যদ্বাণীটি অন্যদের চেয়ে কেন বিস্তৃত নয়?
predictInterval
উভয় স্থির এবং এলোমেলো প্রভাব শর্তাবলী জন্য ত্রুটি / অনিশ্চয়তা অন্তর্ভুক্ত। ইনdotplot
আপনি শুধুমাত্র ভবিষ্যদ্বাণী র্যান্ডম অংশ, মূলত মাছ নির্দিষ্ট বিবৃতি হিসেব প্রায় অনিশ্চয়তা কারণে অনিশ্চয়তা দেখা যাচ্ছে। যদি আপনার মডেলটির নির্দিষ্ট প্যারামিটারে অনেকগুলি অনিশ্চয়তা থাকেfishWt
এবং এই পরামিতিটি বেশিরভাগ পূর্বাভাসিত মানকে চালিত করে, তবে নির্দিষ্ট মাছের বিরতি সম্পর্কে কোনও অনিশ্চয়তা নগণ্য এবং আপনি অন্তরগুলির প্রস্থে কোনও বড় পার্থক্য দেখতে পাবেন না। আমাদেরpredictInterval
ফলাফলগুলিতে আরও স্পষ্ট করা উচিত ।