พิจารณาข้อมูล sleepstudy ที่รวมอยู่ใน lme4 เบตส์กล่าวถึงเรื่องนี้ในหนังสือออนไลน์ของเขาเกี่ยวกับ lme4 ในบทที่ 3 เขาจะพิจารณาข้อมูลสองรุ่น
M0:Reaction∼1+Days+(1|Subject)+(0+Days|Subject)
และ
MA:Reaction∼1+Days+(Days|Subject)
การศึกษาที่เกี่ยวข้องกับ 18 วิชา, การศึกษาในช่วงเวลา 10 วันปราศจากการนอนหลับ เวลาปฏิกิริยาถูกคำนวณที่ระดับพื้นฐานและในวันต่อ ๆ มา มีผลชัดเจนระหว่างเวลาตอบสนองและระยะเวลาของการอดนอน นอกจากนี้ยังมีความแตกต่างอย่างมีนัยสำคัญระหว่างวิชา แบบจำลอง A ช่วยให้เกิดความเป็นไปได้ในการทำงานร่วมกันระหว่างการสกัดกั้นแบบสุ่มและเอฟเฟกต์ความลาดชัน: ลองนึกภาพว่าผู้ที่มีปฏิกิริยาตอบสนองไม่ดีต้องทนทุกข์ทรมานจากผลกระทบจากการอดนอน นี่จะหมายถึงความสัมพันธ์เชิงบวกในลักษณะพิเศษแบบสุ่ม
ในตัวอย่างของเบตส์ไม่มีความสัมพันธ์ที่ชัดเจนจากพล็อต Lattice และไม่มีความแตกต่างอย่างมีนัยสำคัญระหว่างตัวแบบ อย่างไรก็ตามในการตรวจสอบคำถามที่ถูกวางไว้ข้างต้นฉันตัดสินใจที่จะใช้ค่าที่เหมาะสมของ sleepstudy, crank up สหสัมพันธ์และดูประสิทธิภาพการทำงานของทั้งสองรุ่น
อย่างที่คุณเห็นจากภาพเวลาตอบสนองที่ยาวนานนั้นสัมพันธ์กับการสูญเสียประสิทธิภาพที่มากขึ้น ความสัมพันธ์ที่ใช้ในการจำลองเท่ากับ 0.58
ฉันจำลอง 1,000 ตัวอย่างโดยใช้วิธีการจำลองใน lme4 ขึ้นอยู่กับค่าติดตั้งของข้อมูลประดิษฐ์ของฉัน ฉันพอดี M0 และ Ma กับแต่ละคนและดูผลลัพธ์ ชุดข้อมูลดั้งเดิมมี 180 การสังเกต (10 สำหรับแต่ละวิชา 18 วิชา) และข้อมูลจำลองมีโครงสร้างเดียวกัน
บรรทัดล่างคือมีความแตกต่างน้อยมาก
- พารามิเตอร์คงที่มีค่าเดียวกันภายใต้ทั้งสองรุ่น
- เอฟเฟกต์แบบสุ่มนั้นแตกต่างกันเล็กน้อย มีเอฟเฟกต์ 18 จุดและสุ่มแบบลาดเอียง 18 จุดสำหรับแต่ละตัวอย่างที่จำลอง สำหรับแต่ละตัวอย่างเอฟเฟกต์เหล่านี้ถูกบังคับให้เพิ่มเป็น 0 ซึ่งหมายความว่าความแตกต่างเฉลี่ยระหว่างสองรุ่นคือ (เทียม) 0 แต่ความแปรปรวนและความแปรปรวนร่วมนั้นแตกต่างกัน ค่าความแปรปรวนเฉลี่ยภายใต้ MA เท่ากับ 104 กับ 84 ภายใต้ M0 (ค่าจริง, 112) ความแปรปรวนของความลาดชันและดักจับนั้นมีขนาดใหญ่กว่า M0 มากกว่า MA ซึ่งสันนิษฐานว่าจะได้ห้องพิเศษที่จำเป็นในกรณีที่ไม่มีพารามิเตอร์ความแปรปรวนอิสระ
- วิธีการ ANOVA สำหรับ lmer ให้สถิติ F สำหรับการเปรียบเทียบแบบจำลองความชันกับแบบจำลองที่มีการสกัดกั้นแบบสุ่มเท่านั้น (ไม่มีผลเนื่องจากการกีดกันการนอนหลับ) เห็นได้ชัดว่าค่านี้มีขนาดใหญ่มากภายใต้ทั้งสองรุ่น แต่โดยทั่วไปจะมีขนาดใหญ่กว่า (แต่ไม่เสมอไป) ภายใต้ MA (เฉลี่ย 62 เทียบกับค่าเฉลี่ย 55)
- ความแปรปรวนร่วมและความแปรปรวนของเอฟเฟกต์คงที่นั้นแตกต่างกัน
- ประมาณครึ่งหนึ่งก็รู้ว่า MA นั้นถูกต้อง ค่า p เฉลี่ยสำหรับการเปรียบเทียบ M0 กับ MA คือ 0.0442 แม้จะมีความสัมพันธ์ที่มีความหมายและการสังเกตการณ์ที่มีความสมดุลถึง 180 แบบ แต่รูปแบบที่ถูกต้องจะถูกเลือกเพียงครึ่งเดียวเท่านั้น
- ค่าที่คาดการณ์แตกต่างกันภายใต้สองรุ่น แต่เล็กน้อยมาก ความแตกต่างเฉลี่ยระหว่างการทำนายคือ 0 โดยมี sd เป็น 2.7 ค่า sd ของค่าทำนายนั้นเองคือ 60.9
แล้วทำไมสิ่งนี้ถึงเกิดขึ้น @ gung เดาว่ามีเหตุผลที่ล้มเหลวในการรวมความเป็นไปได้ของความสัมพันธ์ที่บังคับให้ผลกระทบแบบสุ่มที่จะไม่เกี่ยวข้อง บางทีมันควรจะ; แต่ในการใช้งานนี้เอฟเฟกต์แบบสุ่มได้รับอนุญาตให้มีความสัมพันธ์ซึ่งหมายความว่าข้อมูลสามารถดึงพารามิเตอร์ในทิศทางที่ถูกต้องโดยไม่คำนึงถึงโมเดล ความผิดของแบบจำลองที่ไม่ถูกต้องปรากฏขึ้นในโอกาสซึ่งเป็นสาเหตุที่คุณสามารถ (บางครั้ง) แยกความแตกต่างของแบบจำลองทั้งสองในระดับนั้น โมเดลเอฟเฟกต์ผสมนั้นเหมาะสมกับการถดถอยเชิงเส้นในแต่ละเรื่องโดยได้รับอิทธิพลจากสิ่งที่ตัวแบบคิดว่าควรเป็น แบบจำลองที่ไม่ถูกต้องบังคับให้พอดีกับค่าที่น่าเชื่อถือน้อยกว่าที่คุณได้รับภายใต้แบบจำลองที่ถูกต้อง แต่พารามิเตอร์ ณ สิ้นวันจะถูกควบคุมโดยข้อมูลที่พอดีกับจริง
นี่คือรหัสที่ค่อนข้างน่าเบื่อของฉัน แนวคิดนี้เพื่อให้พอดีกับข้อมูลการศึกษาการนอนหลับจากนั้นสร้างชุดข้อมูลจำลองด้วยพารามิเตอร์เดียวกัน แต่มีความสัมพันธ์มากขึ้นสำหรับเอฟเฟกต์แบบสุ่ม ชุดข้อมูลนั้นถูกป้อนไปจำลอง simmer.lmer () เพื่อจำลอง 1,000 ตัวอย่างแต่ละชุดมีทั้งสองวิธี เมื่อฉันจับคู่กับวัตถุที่มีการจับคู่ฉันสามารถดึงคุณสมบัติที่แตกต่างของความพอดีและเปรียบเทียบพวกเขาโดยใช้การทดสอบ t หรืออะไรก็ตาม
# 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)
}