नींद के आंकड़ों पर विचार करें, lme4 में शामिल। बेट्स ने lme4 के बारे में अपनी ऑनलाइन पुस्तक में इस पर चर्चा की । अध्याय 3 में, वह डेटा के लिए दो मॉडल मानता है।
M0:Reaction∼1+Days+(1|Subject)+(0+Days|Subject)
तथा
MA:Reaction∼1+Days+(Days|Subject)
अध्ययन में 18 विषयों को शामिल किया गया, 10 नींद से वंचित दिनों की अवधि में अध्ययन किया गया। आधार रेखा पर और बाद के दिनों में प्रतिक्रिया समय की गणना की गई। प्रतिक्रिया समय और नींद की कमी की अवधि के बीच एक स्पष्ट प्रभाव है। विषयों के बीच भी महत्वपूर्ण अंतर हैं। मॉडल ए यादृच्छिक अवरोधन और ढलान प्रभाव के बीच बातचीत की संभावना के लिए अनुमति देता है: कल्पना कीजिए, कहते हैं, खराब प्रतिक्रिया समय वाले लोग नींद की कमी के प्रभाव से अधिक तीव्रता से पीड़ित होते हैं। यह यादृच्छिक प्रभावों में एक सकारात्मक सहसंबंध होगा।
बेट्स के उदाहरण में, जाली प्लाट से कोई स्पष्ट संबंध नहीं था और मॉडलों के बीच कोई महत्वपूर्ण अंतर नहीं था। हालांकि, ऊपर दिए गए प्रश्न की जांच करने के लिए, मैंने निश्चिंतता के सज्जित मूल्यों को लेने का फैसला किया, सहसंबंध को क्रैंक किया और दो मॉडलों के प्रदर्शन को देखा।
जैसा कि आप छवि से देख सकते हैं, लंबी प्रतिक्रिया समय प्रदर्शन के अधिक नुकसान के साथ जुड़ा हुआ है। अनुकृति के लिए प्रयुक्त सहसंबंध 0.58 था
मैंने अपने कृत्रिम डेटा के सज्जित मूल्यों के आधार पर, lme4 में अनुकरण पद्धति का उपयोग करते हुए 1000 नमूनों का अनुकरण किया। मैंने M0 और Ma को प्रत्येक में फिट किया और परिणामों को देखा। मूल डेटा सेट में 180 अवलोकन थे (प्रत्येक 18 विषयों के लिए 10), और नकली डेटा में समान संरचना है।
लब्बोलुआब यह है कि बहुत कम अंतर है।
- दोनों मॉडलों के अंतर्गत निश्चित मानदंड बिल्कुल समान हैं।
- यादृच्छिक प्रभाव थोड़ा अलग हैं। प्रत्येक नकली नमूने के लिए 18 अवरोधन और 18 ढलान यादृच्छिक प्रभाव हैं। प्रत्येक नमूने के लिए, इन प्रभावों को 0 में जोड़ने के लिए मजबूर किया जाता है, जिसका अर्थ है कि दो मॉडल के बीच का अंतर है (कृत्रिम रूप से) 0. लेकिन भिन्नता और सह-भिन्नताएं हैं। मा के तहत औसत दर्जे का कोविरियन 104 था, जो M0 (वास्तविक मूल्य, 112) के तहत 84 था। ढलानों और अंतःक्षेपों के भिन्न रूप एमए से एमए से बड़े थे, संभवतः एक मुक्त सहसंयोजक पैरामीटर की अनुपस्थिति में आवश्यक अतिरिक्त wiggle कमरा प्राप्त करने के लिए।
- लैमर के लिए एनोवा विधि केवल एक यादृच्छिक अवरोधन (नींद की कमी के कारण कोई प्रभाव नहीं) के साथ ढलान मॉडल की तुलना करने के लिए एक एफ आंकड़े देता है। स्पष्ट रूप से, यह मूल्य दोनों मॉडलों के तहत बहुत बड़ा था, लेकिन यह एमए के तहत आम तौर पर (लेकिन हमेशा नहीं) बड़ा था (मतलब 62 बनाम 55 का मतलब)।
- निश्चित प्रभावों के सहसंयोजक और विचरण भिन्न हैं।
- लगभग आधा समय, यह जानता है कि एमए सही है। M0 से MA की तुलना करने के लिए माध्यिका p- मान 0.0442 है। एक सार्थक सहसंबंध और 180 संतुलित टिप्पणियों की उपस्थिति के बावजूद, सही मॉडल केवल आधे समय के लिए चुना जाएगा।
- अनुमानित मूल्य दो मॉडल के तहत भिन्न होते हैं, लेकिन बहुत कम। 2.7 की एसडी के साथ, भविष्यवाणियों के बीच अंतर अंतर 0 है। अनुमानित मूल्यों की sd स्वयं 60.9 है
तो ऐसा क्यों होता है? @gung ने अनुमान लगाया, यथोचित रूप से, सहसंबंध की संभावना को शामिल करने में विफलता यादृच्छिक प्रभावों को असंबद्ध होने के लिए मजबूर करती है। शायद यह होना चाहिए; लेकिन इस कार्यान्वयन में, यादृच्छिक प्रभावों को सहसंबद्ध करने की अनुमति है, जिसका अर्थ है कि डेटा मॉडल की परवाह किए बिना सही दिशा में मापदंडों को खींचने में सक्षम है। गलत मॉडल की गलती संभावना में दिखाई देती है, यही कारण है कि आप (कभी-कभी) दो मॉडल को उस स्तर पर अलग कर सकते हैं। मिश्रित प्रभाव मॉडल मूल रूप से प्रत्येक विषय के लिए रेखीय प्रतिगमन फिटिंग है, जो प्रभावित करता है कि मॉडल को लगता है कि उन्हें होना चाहिए। गलत मॉडल आपको सही मॉडल के तहत प्राप्त होने वाले कम प्रशंसनीय मूल्यों के अनुकूल बनाता है। लेकिन पैरामीटर, दिन के अंत में, वास्तविक डेटा के लिए फिट द्वारा शासित होते हैं।
यहाँ मेरा कुछ हद तक क्लूनी कोड है। नींद अध्ययन डेटा को फिट करने और फिर समान मापदंडों के साथ एक नकली डेटा सेट बनाने का विचार था, लेकिन यादृच्छिक प्रभावों के लिए एक बड़ा सहसंबंध। वह डेटा सेट 1000 नमूनों का अनुकरण करने के लिए simulate.lmer () को खिलाया गया था, जिनमें से प्रत्येक दोनों तरीकों से फिट था। एक बार जब मैंने फिट की गई चीजों को जोड़ा था, तो मैं फिट की विभिन्न विशेषताओं को खींच सकता था और उनकी तुलना कर सकता था, टी-टेस्ट या जो भी हो।
# Fit a model to the sleep study data, allowing non-zero correlation
fm01 <- lmer(Reaction ~ 1 + Days +(1+Days|Subject), data=sleepstudy, REML=FALSE)
# Now use this to build a similar data set with a correlation = 0.9
# Here is the covariance function for the random effects
# The variances come from the sleep study. The covariance is chosen to give a larger correlation
sigma.Subjects <- matrix(c(565.5,122,122,32.68),2,2)
# Simulate 18 pairs of random effects
ranef.sim <- mvrnorm(18,mu=c(0,0),Sigma=sigma.Subjects)
# Pull out the pattern of days and subjects.
XXM <- model.frame(fm01)
n <- nrow(XXM) # Sample size
# Add an intercept to the model matrix.
XX.f <- cbind(rep(1,n),XXM[,2])
# Calculate the fixed effects, using the parameters from the sleep study.
yhat <- XX.f %*% fixef(fm01 )
# Simulate a random intercept for each subject
intercept.r <- rep(ranef.sim[,1], each=10)
# Now build the random slopes
slope.r <- XXM[,2]*rep(ranef.sim[,2],each=10)
# Add the slopes to the random intercepts and fixed effects
yhat2 <- yhat+intercept.r+slope.r
# And finally, add some noise, using the variance from the sleep study
y <- yhat2 + rnorm(n,mean=0,sd=sigma(fm01))
# Here is new "sleep study" data, with a stronger correlation.
new.data <- data.frame(Reaction=y,Days=XXM$Days,Subject=XXM$Subject)
# Fit the new data with its correct model
fm.sim <- lmer(Reaction ~ 1 + Days +(1+Days|Subject), data=new.data, REML=FALSE)
# Have a look at it
xyplot(Reaction ~ Days | Subject, data=new.data, layout=c(6,3), type=c("p","r"))
# Now simulate 1000 new data sets like new.data and fit each one
# using the right model and zero correlation model.
# For each simulation, output a list containing the fit from each and
# the ANOVA comparing them.
n.sim <- 1000
sim.data <- vector(mode="list",)
tempReaction <- simulate(fm.sim, nsim=n.sim)
tempdata <- model.frame(fm.sim)
for (i in 1:n.sim){
tempdata$Reaction <- tempReaction[,i]
output0 <- lmer(Reaction ~ 1 + Days +(1|Subject)+(0+Days|Subject), data = tempdata, REML=FALSE)
output1 <- lmer(Reaction ~ 1 + Days +(Days|Subject), data=tempdata, REML=FALSE)
temp <- anova(output0,output1)
pval <- temp$`Pr(>Chisq)`[2]
sim.data[[i]] <- list(model0=output0,modelA=output1, pvalue=pval)
}