Lme4'te bulunan sleepstudy verilerini göz önünde bulundurun. Bates bunu çevrimiçi kitabında lme4 hakkında tartışıyor. 3. bölümde, veriler için iki model ele alınmıştır.
M0 : Reaksiyon ∼ 1 + Gün + ( 1 | Konu ) + ( 0 + Gün | Konu )
ve
MA : Reaksiyon ∼ 1 + Gün + ( Gün | Konu )
Çalışmada, 10 uykudan mahrum kalan gün boyunca incelenen 18 kişi yer aldı. Reaksiyon süreleri başlangıçta ve sonraki günlerde hesaplandı. Tepki süresi ile uyku yoksunluğu süresi arasında açık bir etkisi vardır. Konular arasında da önemli farklılıklar vardır. Model A, rastgele engelleme ve şev efektleri arasında bir etkileşim olasılığını mümkün kılar: düşünün, yani, kötü tepki süreleri olan kişilerin, uyku yoksunluğu etkilerinden daha fazla acı çektiğini düşünün. Bu, rastgele etkilerde pozitif bir korelasyon anlamına gelir.
Bates örneğinde, Kafes grafiğinden belirgin bir korelasyon yoktu ve modeller arasında anlamlı bir fark yoktu. Bununla birlikte, yukarıda sorulan soruyu araştırmak için, uyku dizgesinin uygun değerlerini almaya, korelasyonu arttırmaya ve iki modelin performansına bakmaya karar verdim.
Görüntüden görebileceğiniz gibi, uzun reaksiyon süreleri daha fazla performans kaybıyla ilişkilendirilir. Simülasyon için kullanılan korelasyon 0,58
Yapay verilerimin uygun değerlerine dayanarak lme4'teki benzetme yöntemini kullanarak 1000 örneği simüle ettim. Her birine M0 ve Ma uydurarak sonuçlara baktım. Orijinal veri setinde 180 gözlem (18 denekten her biri için 10) vardı ve simüle edilen veriler aynı yapıya sahipti.
Sonuç olarak, çok az fark var.
- Sabit parametreler her iki modelde de aynı değerlere sahiptir.
- Rastgele etkiler biraz farklıdır. Simüle edilen her örnek için 18 durdurma ve 18 eğim rastgele etkisi vardır. Her örnek için, bu etkiler 0'a eklenmeye zorlanır, bu, iki model arasındaki ortalama farkın (yapay olarak) 0 olduğu anlamına gelir. Ancak, farklılıklar ve kovaryanslar farklıdır. MA altındaki medyan kovaryans 104, M0 altında 84'e karşı (gerçek değer, 112). Eğimlerin ve kesişme noktalarındaki değişmeler M0 altında MA'dan daha büyüktü, muhtemelen serbest bir kovaryans parametresinin yokluğunda ihtiyaç duyulan ekstra kıpırdatma odasını almak için.
- Lmer için ANOVA metodu, Slope modelini sadece rastgele engellemeli bir modelle karşılaştırmak için bir F istatistiği verir (uyku yoksunluğundan dolayı etki yoktur). Açıkçası, bu değer her iki modelde de çok büyüktü, ancak MA altında tipik olarak (ancak her zaman değil) daha büyüktü (ortalama 62'ye karşılık ortalama 55).
- Sabit etkilerin kovaryansı ve varyansı farklıdır.
- Yaklaşık yarısı, MA'nın doğru olduğunu biliyor. M0 ile MA arasındaki karşılaştırma için medyan p değeri 0.0442'dir. Anlamlı bir korelasyonun ve 180 dengeli gözlemin varlığına rağmen, doğru model sadece yarı zamanlı olarak seçilecektir.
- Öngörülen değerler iki modelde farklılık gösterir, ancak çok azdır. Tahminler arasındaki ortalama fark 0, sd 2,7'dir. Öngörülen değerlerin kendileri 60,9
Peki bu neden oluyor? makul olarak, bir korelasyon olasılığını içermedeki başarısızlığın, rastgele etkileri ilişkisiz olmaya zorladığı tahmin edilmektedir. Belki de yapmalı; ancak bu uygulamada, rastgele etkilerin ilişkilendirilmesine izin verilir, bu, modelden bağımsız olarak verilerin parametreleri doğru yönde çekebildiği anlamına gelir. Yanlış modelin yanlışlığı, olasılıkla ortaya çıkar, bu yüzden iki modeli bu seviyede ayırt edebilirsiniz (bazen). Karışık etkiler modeli temel olarak, modelin ne olması gerektiğini düşündüğünden etkilenen her konuya doğrusal gerileme uyguluyor. Yanlış model, doğru modelde olduğundan daha az makul değere uymaya zorlar. Ancak, günün sonunda, parametreler gerçek verilere uygun olarak yönetilir.
İşte benim biraz zorlu kod. Buradaki düşünce uyku çalışması verilerine uymak ve aynı parametrelerle simüle edilmiş bir veri seti oluşturmaktı, ancak rastgele etkiler için daha büyük bir korelasyon vardı. Bu veri seti, her ikisi de uygun olan 1000 örneği simüle etmek için simule.lmer () 'e beslenmiştir. Bir kere takılmış objeleri eşleştirdikten sonra, fit'in farklı özelliklerini çıkarabilir ve bunları, t testleri kullanarak veya her neyse karşılaştırabilirim.
# 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)
}