আরে লিমার () মিশ্র প্রভাবগুলির মডেলের জন্য অনুমানের ব্যবধান


37

আমি একটি লিমার () মডেল থেকে ভবিষ্যদ্বাণীটির কাছাকাছি পূর্বাভাস ব্যবধান পেতে চাই। আমি এ সম্পর্কে কিছু আলোচনা পেয়েছি:

http://rstudio-pubs-static.s3.amazonaws.com/24365_2803ab8299934e888a60e7b16113f619.html

http://glmm.wikidot.com/faq

তবে তারা এলোমেলো প্রভাবগুলির অনিশ্চয়তাটিকে বিবেচনায় নেবে না বলে মনে হয়।

এখানে একটি নির্দিষ্ট উদাহরণ। আমি সোনার মাছ দৌড় করছি। আমার কাছে গত 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()

মাছের জন্য ভবিষ্যদ্বাণী ব্যবধান

এই সমস্ত পূর্বাভাস অন্তরগুলি প্রস্থে অভিন্ন বলে মনে হচ্ছে। কেন ফিশ কে সম্পর্কে আমাদের ভবিষ্যদ্বাণী অন্যদের সংকীর্ণ হয় না? ফিশ এল এর জন্য আমাদের ভবিষ্যদ্বাণীটি অন্যদের চেয়ে কেন বিস্তৃত নয়?


1
predictIntervalউভয় স্থির এবং এলোমেলো প্রভাব শর্তাবলী জন্য ত্রুটি / অনিশ্চয়তা অন্তর্ভুক্ত। ইন dotplotআপনি শুধুমাত্র ভবিষ্যদ্বাণী র্যান্ডম অংশ, মূলত মাছ নির্দিষ্ট বিবৃতি হিসেব প্রায় অনিশ্চয়তা কারণে অনিশ্চয়তা দেখা যাচ্ছে। যদি আপনার মডেলটির নির্দিষ্ট প্যারামিটারে অনেকগুলি অনিশ্চয়তা থাকে fishWtএবং এই পরামিতিটি বেশিরভাগ পূর্বাভাসিত মানকে চালিত করে, তবে নির্দিষ্ট মাছের বিরতি সম্পর্কে কোনও অনিশ্চয়তা নগণ্য এবং আপনি অন্তরগুলির প্রস্থে কোনও বড় পার্থক্য দেখতে পাবেন না। আমাদের predictIntervalফলাফলগুলিতে আরও স্পষ্ট করা উচিত ।
জাকলেস

উত্তর:


18

এই প্রশ্ন এবং দুর্দান্ত বিনিময়টি প্যাকেজে predictIntervalফাংশন তৈরি করার প্রেরণা ছিল merToolsbootMerযাবার উপায়, তবে কিছু সমস্যার জন্য পুরো মডেলের বুটস্ট্র্যাপযুক্ত রিফিট তৈরি করা গণনাগতভাবে সম্ভব হয় না (এমন ক্ষেত্রে যেখানে মডেলটি বড়।

এই ক্ষেত্রে, মডেলটিতে প্যারামিটারগুলির বিতরণ উত্পন্ন করার predictIntervalজন্য arm::simফাংশনগুলি ব্যবহার করার জন্য এবং তারপরে newdataব্যবহারকারীরা প্রদত্ত প্রতিক্রিয়াটির সিমুলেটেড মান উত্পন্ন করতে এই বিতরণগুলি ব্যবহার করতে ডিজাইন করা হয়েছে । এটি ব্যবহার করা সহজ - আপনার যা করতে হবে তা হ'ল:

library(merTools)
preds <- predictInterval(lme1, newdata = newDat, n.sims = 999)

predictIntervalপূর্বাভাস অন্তরগুলির জন্য অন্তর নির্ধারণ, বিতরণের গড় বা মিডিয়ানের প্রতিবেদন করতে হবে কিনা এবং মডেল থেকে অবশিষ্টাংশগুলি অন্তর্ভুক্ত করবেন কিনা তা বেছে নেওয়া বাছাই সহ আপনি অন্যান্য মানগুলির একটি সম্পূর্ণ হোস্ট নির্দিষ্ট করতে পারেন ।

এটি সম্পূর্ণ পূর্বাভাস ব্যবধান নয় কারণ অবজেক্টের thetaপরামিতিগুলির পরিবর্তনশীলতা lmerঅন্তর্ভুক্ত নয়, তবে অন্যান্য সমস্ত প্রকারের এই পদ্ধতিটির মাধ্যমে ক্যাপচার করা হয়েছে, যা একটি সুন্দর শালীন অনুমান দেয়।


3
এই দুর্দান্ত দেখায়! এখন ভিগনেট মাধ্যমে পড়া । ধন্যবাদ!
হ্যাশিলি

পূর্বাভাস অন্তরগুলি আমার প্রত্যাশা মতো নয় n't উপরে 3 আপডেট দেখুন।
হ্যাশিলি

কি predictInterval()নেস্টেড র্যান্ডম প্রভাব মত না? উদাহরণস্বরূপ, প্যাকেজ msleepথেকে ডেটাসেট ব্যবহার করে ggplot2: mod <- lmer(sleep_total ~ bodywt + (1|vore/order), data=msleep); predInt <- predictInterval(merMod=mod, newdata=msleep) একটি ত্রুটি Error in '[.data.frame'(newdata, , j) : undefined columns selected
ফিরিয়ে দেয়

আমি বাজি ধরছি এটি নেস্টেড এফেক্ট পছন্দ করে না। আমি মনে করি না আমাদের টেস্ট স্যুটে এটির কোনও পরীক্ষা ছিল। আমি এটি দেখতে গিটহাবে একটি সমস্যা দায়ের করব। আমি devtools::install_github("jknowles/merTools")প্রথমে গিটহাব থেকে দেব সংস্করণটি চেষ্টা করার পরামর্শ দিই ।
জাগনলস

2
আপডেট হিসাবে, MerTools এর সর্বশেষতম বিকাশ সংস্করণ নেস্টেড এফেক্টসকে অনুমতি দেয়। শীঘ্রই এটি সিআরএএন-তে ধাক্কা দেওয়া হবে
জেনেখেল

15

করে কি একই কাজ করবেন bootMerপ্রতিটি স্থিতিমাপ বুটস্ট্র্যাপ প্রতিলিপি জন্য ভবিষ্যৎবাণী একটি সেট উৎপন্ন:

predFun <- function(fit) {
    predict(fit,newDat)
}
bb <- bootMer(lme1,nsim=200,FUN=predFun,seed=101)

এর আউটপুটটি bootMerঅত্যন্ত ভয়ঙ্কর-স্বচ্ছ "boot"বস্তুতে রয়েছে, তবে আমরা $tউপাদানটির বাইরে কাঁচা পূর্বাভাস পেতে পারি ।

ফিশ ই ই ফিশ ডি কে কতটা পরাজিত করে?

predMat <- bb$t
dim(predMat) ## 200 rows (PB reps) x 10 (predictions)

ফিশ ই এর সময়গুলি কলাম 5 এ থাকে, ফিশ ডি এর সময় 4 কলামে থাকে, সুতরাং আমাদের কেবল অনুপাতটি জানতে হবে যে 5 কলাম 4 কলামের চেয়ে কম:

mean(predMat[,5]<predMat[,4])  ## 0.57

আমি কিছু অপ্রত্যাশিত ফলাফল পাচ্ছি। যদি আমি নিউড্যাট-এ সমস্ত মাছের জন্য ফিশডাব্লুটি = 1 সেট করে থাকি তবে আমি প্রত্যাশা করব যে ফিশ এ এর ​​জন্য গড় / মধ্যমান সময় 10 ~ 10.1, ফিশ বি B 10.2, ..., ফিশ জে ~ 11.0 হবে (যেহেতু প্রশিক্ষণের ডেটাতে তাদের সময় হিসাবে সংজ্ঞায়িত sec <- 9 + rep(1:10, rep(100,10))/10 + oz + rnorm(1000)/10:)। আমি যখন ব্যবহার করি predict(), তখন ফিশ এ, ই এবং জ এর পূর্বাভাসের সময়গুলি প্রত্যাশার হিসাবে 10.09, 10.49 এবং 10.99 হয়। তবে, আপনি যে বুটমার পদ্ধতিটি বর্ণনা করেছেন তার মাঝারি সময়গুলি হ'ল: 10.52, 10.59 এবং 10.50। আমি আরও চুক্তি আশা করতে হবে?
হুসিলি

use.u=TRUEহিসাবে হিসাবে ব্যবহার : bb <- bootMer(lme1,nsim=200,FUN=predFun,seed=101,use.u=TRUE)মনে হয় আমাকে কি দিতে চান। ধন্যবাদ!
হুসিলি

ঠিক আছে, এটি কিছুটা জটিল হয়ে ওঠে। আপনি তাকান প্রয়োজন use.uআর্গুমেন্ট প্রাপ্ত করতে bootMer। প্রশ্নটি হল, আপনি যখন "স্থির প্রভাব এবং এলোমেলো প্রভাবের অনিশ্চয়তা" বলবেন, তখন 'র্যান্ডম এফেক্ট' বলতে কী বোঝ? আপনি কি এলোমেলো-প্রভাবের বৈকল্পিক বা শর্তসাপেক্ষ মোডগুলিতে (অর্থাত্ মাছ-নির্দিষ্ট প্রভাব) অনিশ্চয়তা বোঝাতে চান ? আপনি ব্যবহার করতে পারেন use.u=TRUEতবে আমার মনে হয় না যে এটি আপনি যা চান অগত্যা তা করবে ...
বেন বলকার

যদি আমি ব্যবহার করি use.u=TRUEতবে "u এর মানগুলি [স্থির করা] তাদের আনুমানিক মানগুলিতে স্থির থাকে"। আমি এটিকে অর্থ হিসাবে ব্যাখ্যা করি, মাছ এ এর ​​জন্য আমাদের এলোমেলো প্রভাব পয়েন্টের অনুমান যাই হোক না কেন, এটি God'sশ্বরের সত্যবাদী সত্য হিসাবে গ্রহণ করা হয়, যদি আপনি চান। bootMerধরে নিই আমাদের আরআর পয়েন্টের প্রাক্কলনটিতে কোনও ত্রুটি নেই। আমি যদি ব্যবহার করি use.u=FALSEতবে bootMerআদৌ আরআর পয়েন্টের প্রাক্কলনটি বিবেচনায় নেই ? মনে হচ্ছে bootMerফলাফল যখন ব্যবহার use.u=FALSEব্যবহার করে সমতুল্য (অথবা, এসিম্পটোটিকভাবে Equiv) re.form=NAমধ্যে predict()বিবৃতি। এটা কি সত্যি?
হুসিলি

1
আমি মনে করি এটি এটিএম বাস্তবায়িত হয়নি, তবে আপনি শর্তাধীন মোডগুলি / বিএলইউপিগুলির মাধ্যমে শর্তসাপেক্ষ বৈকল্পগুলি বের করতে পারেন c(attr(ranef(lme1,condVar=TRUE)[[1]],"postVar"))(তারা এই উদাহরণে সকলেই অভিন্ন) এবং তারপরে সেই মানগুলি নমুনা করুন।
বেন বলকার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.