lme () এবং lmer () বিরোধী ফলাফল দেয়


20

আমি এমন কিছু ডেটা নিয়ে কাজ করছি যা বারবার পরিমাপে কিছু সমস্যা। এটি করার সময় আমি আমার পরীক্ষার ডেটাগুলির মধ্যে lme()এবং ব্যবহারের মধ্যে খুব আলাদা আচরণ লক্ষ্য করেছি এবং lmer()কেন তা জানতে চাই।

আমি যে নকল তথ্য সেট তৈরি করেছি তাতে 10 টি বিষয়ের জন্য উচ্চতা এবং ওজন পরিমাপ রয়েছে, প্রতিবার দুবার নেওয়া হয়। আমি ডেটা সেট আপ করেছি যাতে বিষয়গুলির মধ্যে উচ্চতা এবং ওজনের মধ্যে একটি ইতিবাচক সম্পর্ক হতে পারে তবে প্রতিটি ব্যক্তির মধ্যে পুনরাবৃত্তি ব্যবস্থাগুলির মধ্যে নেতিবাচক সম্পর্ক রয়েছে।

set.seed(21)
Height=1:10; Height=Height+runif(10,min=0,max=3) #First height measurement
Weight=1:10; Weight=Weight+runif(10,min=0,max=3) #First weight measurement

Height2=Height+runif(10,min=0,max=1) #second height measurement
Weight2=Weight-runif(10,min=0,max=1) #second weight measurement

Height=c(Height,Height2) #combine height and wight measurements
Weight=c(Weight,Weight2)

DF=data.frame(Height,Weight) #generate data frame
DF$ID=as.factor(rep(1:10,2)) #add subject ID
DF$Number=as.factor(c(rep(1,10),rep(2,10))) #differentiate between first and second measurement

এখানে প্রতিটি ব্যক্তির কাছ থেকে দুটি পরিমাপ সংযোগকারী লাইনগুলির সাথে ডেটার একটি প্লট রয়েছে। এখানে চিত্র বর্ণনা লিখুন

সুতরাং আমি দুটি মডেল দৌড়েছি, একটি প্যাকেজ lme()থেকে nlmeএবং একটি lmer()থেকে lme4। উভয় ক্ষেত্রেই প্রতিটি ব্যক্তির পুনরাবৃত্তি পরিমাপের জন্য আইডির এলোমেলো প্রভাব সহ আমি উচ্চতার বিরুদ্ধে ওজনকে বাড়িয়ে তুলি।

library(nlme)
Mlme=lme(Height~Weight,random=~1|ID,data=DF)
library(lme4)
Mlmer=lmer(Height~Weight+(1|ID),data=DF)

এই দুটি মডেল প্রায়শই (যদিও সবসময় বীজের উপর নির্ভর করে না) সম্পূর্ণ ভিন্ন ফলাফল উত্পন্ন করে। আমি দেখেছি যেখানে তারা কিছুটা পৃথক বৈকল্পিক অনুমান উত্পন্ন করে, স্বাধীনতার বিভিন্ন ডিগ্রি ইত্যাদি গণনা করে তবে এখানে সহগগুলি বিপরীত দিকে রয়েছে in

coef(Mlme)
#   (Intercept)    Weight
#1   1.57102183 0.7477639
#2  -0.08765784 0.7477639
#3   3.33128509 0.7477639
#4   1.09639883 0.7477639
#5   4.08969282 0.7477639
#6   4.48649982 0.7477639
#7   1.37824171 0.7477639
#8   2.54690995 0.7477639
#9   4.43051687 0.7477639
#10  4.04812243 0.7477639

coef(Mlmer)
#   (Intercept)    Weight
#1     4.689264 -0.516824
#2     5.427231 -0.516824
#3     6.943274 -0.516824
#4     7.832617 -0.516824
#5    10.656164 -0.516824
#6    12.256954 -0.516824
#7    11.963619 -0.516824
#8    13.304242 -0.516824
#9    17.637284 -0.516824
#10   18.883624 -0.516824

চাক্ষুষভাবে চিত্রিত করার জন্য, এর সাথে মডেল করুন lme()

এখানে চিত্র বর্ণনা লিখুন

এবং সঙ্গে মডেল lmer()

এখানে চিত্র বর্ণনা লিখুন

কেন এই মডেলগুলি এত বেশি ডাইভারিং করছে?


2
কি দুর্দান্ত উদাহরণ। এটি পৃথক পৃথক র্যান্ডম এফেক্টের তুলনায় ফিটিং ফিক্সিং ওজনের মেয়াদের জন্য সম্পূর্ণ পৃথক সহগের প্রাক্কলন দেয় এমন ক্ষেত্রে এর একটি কার্যকর উদাহরণ ।
জ্যাকব সোলার

উত্তর:


25

tl; dr আপনি যদি "nloptwrap" এ অপ্টিমাইজারটি পরিবর্তন করেন তবে আমি মনে করি এটি এই সমস্যাগুলি এড়াতে পারে (সম্ভবত)।

অভিনন্দন, আপনি একটি পরিসংখ্যান অনুমানের সমস্যায় একাধিক অনুকূলের সবচেয়ে সাধারণ উদাহরণ খুঁজে পেয়েছেন! lme4অভ্যন্তরীণভাবে ব্যবহৃত প্যারামিটার (উদাহরণস্বরূপ সুবিধার্থে) এলোমেলো প্রভাবগুলির মাপদণ্ডের মানক বিচ্যুতি , অর্থাত্-গ্রুপ স্টাড ডেভ অবশেষে স্টাড দেব দ্বারা বিভক্ত।

আসলটির জন্য এই মানগুলি বের করুন lmeএবং lmerফিট করুন:

(sd1 <- sqrt(getVarCov(Mlme)[[1]])/sigma(Mlme))
## 2.332469
(sd2 <- getME(Mlmer,"theta")) ## 14.48926

অন্য অপ্টিমাইজারের সাথে রিফিট করুন (এটি পরবর্তী প্রকাশে সম্ভবত ডিফল্ট হবে lme4):

Mlmer2 <- update(Mlmer,
  control=lmerControl(optimizer="nloptwrap"))
sd3 <- getME(Mlmer2,"theta")   ## 2.33247

ম্যাচ lme... চলুন দেখি কী চলছে। বিবর্তন ফাংশন (-2 * লগ হওয়ার সম্ভাবনা), বা এক্ষেত্রে একক এলোমেলো প্রভাব সহ এলএমএমগুলির জন্য অ্যানালগাসিক আরএএমএল-মাপদণ্ডের কার্য কেবল একটি যুক্তি গ্রহণ করে, কারণ স্থির-প্রভাবের পরামিতিগুলি প্রোফাইল করা হয় ; আর স্ট্যান্ডার্ড বিচ্যুতির প্রদত্ত মানের জন্য তাদের স্বয়ংক্রিয়ভাবে গণনা করা যায়।

ff <- as.function(Mlmer)
tvec <- seq(0,20,length=101)
Lvec <- sapply(tvec,ff)
png("CV38425.png")
par(bty="l",las=1)
plot(tvec,Lvec,type="l",
     ylab="REML criterion",
     xlab="scaled random effects standard deviation")
abline(v=1,lty=2)
points(sd1,ff(sd1),pch=16,col=1)
points(sd2,ff(sd2),pch=16,col=2)
points(sd3,ff(sd3),pch=1,col=4)
dev.off()

এখানে চিত্র বর্ণনা লিখুন

আমি এই ওভার আরও obsess অব্যাহত এবং 1 থেকে 1000 র্যান্ডম বীজ জন্য তড়কা দৌড়ে ঝুলানো lme, lmerএবং lmer+ + প্রতিটি ক্ষেত্রে জন্য nloptwrap। এখানে 1000 এর মধ্যে সংখ্যা রয়েছে যেখানে একটি প্রদত্ত পদ্ধতিতে উত্তরগুলি পাওয়া যায় যা কমপক্ষে 0.001 বিবর্তন ইউনিট অন্যের চেয়ে খারাপ ...

          lme.dev lmer.dev lmer2.dev
lme.dev         0       64        61
lmer.dev      369        0       326
lmer2.dev      43        3         0

অন্য কথায়, (1) এমন কোনও পদ্ধতি নেই যা সর্বদা সেরা কাজ করে; (২) lmerডিফল্ট অপ্টিমাইজার সহ সবচেয়ে খারাপ (সময়ের প্রায় 1/3 অংশ ব্যর্থ হয়); (3) lmer"nloptwrap" সহ সেরা (সময়ের lme4% এর চেয়ে খারাপ, এর চেয়ে কম বিরল lmer)।

কিছুটা আশ্বাস দেওয়ার জন্য, আমি মনে করি যে এই পরিস্থিতিটি ছোট, ভুল বানানযুক্ত মামলার (যেমন এখানে অবশিষ্টাংশ ত্রুটি স্বাভাবিকের তুলনায় অভিন্ন) সবচেয়ে খারাপ হওয়ার সম্ভাবনা রয়েছে। এটি আরও নিয়মতান্ত্রিকভাবে অন্বেষণ করা আকর্ষণীয় হবে যদিও ...

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.