Hãy xem xét dữ liệu về cơn buồn ngủ, có trong lme4. Bates thảo luận về điều này trong cuốn sách trực tuyến của mình về lme4. Trong chương 3, ông xem xét hai mô hình cho dữ liệu.
M0:Reaction∼1+Days+(1|Subject)+(0+Days|Subject)
và
MA:Reaction∼1+Days+(Days|Subject)
Nghiên cứu bao gồm 18 đối tượng, nghiên cứu trong khoảng thời gian 10 ngày thiếu ngủ. Thời gian phản ứng được tính toán tại đường cơ sở và vào những ngày tiếp theo. Có một ảnh hưởng rõ ràng giữa thời gian phản ứng và thời gian thiếu ngủ. Cũng có sự khác biệt đáng kể giữa các môn học. Mô hình A cho phép khả năng tương tác giữa các hiệu ứng đánh chặn ngẫu nhiên và độ dốc: hãy tưởng tượng rằng những người có thời gian phản ứng kém phải chịu ảnh hưởng sâu sắc hơn từ các tác động của việc thiếu ngủ. Điều này sẽ ngụ ý một mối tương quan tích cực trong các hiệu ứng ngẫu nhiên.
Trong ví dụ của Bates, không có mối tương quan rõ ràng từ biểu đồ Lưới và không có sự khác biệt đáng kể giữa các mô hình. Tuy nhiên, để điều tra câu hỏi được đặt ra ở trên, tôi quyết định lấy các giá trị phù hợp của cơn buồn ngủ, tăng cường sự tương quan và xem xét hiệu suất của hai mô hình.
Như bạn có thể thấy từ hình ảnh, thời gian phản ứng dài có liên quan đến việc mất hiệu suất cao hơn. Tương quan được sử dụng cho mô phỏng là 0,58
Tôi đã mô phỏng 1000 mẫu, sử dụng phương pháp mô phỏng trong lme4, dựa trên các giá trị được trang bị của dữ liệu nhân tạo của tôi. Tôi phù hợp với M0 và Ma cho từng kết quả và xem kết quả. Tập dữ liệu gốc có 180 quan sát (10 cho mỗi 18 đối tượng) và dữ liệu mô phỏng có cùng cấu trúc.
Điểm mấu chốt là có rất ít sự khác biệt.
- Các tham số cố định có chính xác các giá trị giống nhau trong cả hai mô hình.
- Các hiệu ứng ngẫu nhiên là hơi khác nhau. Có 18 hiệu ứng đánh chặn và 18 độ dốc ngẫu nhiên cho mỗi mẫu mô phỏng. Đối với mỗi mẫu, các hiệu ứng này buộc phải thêm vào 0, có nghĩa là sự khác biệt trung bình giữa hai mô hình là (giả tạo) 0. Nhưng phương sai và hiệp phương sai khác nhau. Hiệp phương sai trung bình theo MA là 104, so với 84 theo M0 (giá trị thực tế, 112). Phương sai của độ dốc và giao thoa lớn hơn M0 so với MA, có lẽ là để có thêm phòng ngọ nguậy cần thiết trong trường hợp không có tham số hiệp phương sai miễn phí.
- Phương pháp ANOVA cho lmer đưa ra một thống kê F để so sánh mô hình Độ dốc với một mô hình chỉ có một đánh chặn ngẫu nhiên (không có tác dụng do thiếu ngủ). Rõ ràng, giá trị này rất lớn trong cả hai mô hình, nhưng nó thường lớn hơn (nhưng không phải luôn luôn) lớn hơn theo MA (trung bình 62 so với trung bình 55).
- Hiệp phương sai và phương sai của các hiệu ứng cố định là khác nhau.
- Khoảng một nửa thời gian, nó biết rằng MA là chính xác. Giá trị p trung vị để so sánh M0 với MA là 0,0442. Mặc dù có sự tương quan có ý nghĩa và 180 quan sát cân bằng, mô hình chính xác sẽ chỉ được chọn khoảng một nửa thời gian.
- Các giá trị dự đoán khác nhau theo hai mô hình, nhưng rất nhẹ. Sự khác biệt trung bình giữa các dự đoán là 0, với sd là 2,7. Bản thân các giá trị dự đoán là 60,9
Vậy tại sao điều này xảy ra? @gung đoán, một cách hợp lý, việc không bao gồm khả năng của một mối tương quan buộc các hiệu ứng ngẫu nhiên không được thông minh. Có lẽ nó nên; nhưng trong quá trình thực hiện này, các hiệu ứng ngẫu nhiên được phép tương quan, có nghĩa là dữ liệu có thể kéo các tham số theo đúng hướng, bất kể mô hình. Sự sai lầm của mô hình sai thể hiện ở khả năng, đó là lý do tại sao bạn có thể (đôi khi) phân biệt hai mô hình ở cấp độ đó. Mô hình hiệu ứng hỗn hợp về cơ bản phù hợp với hồi quy tuyến tính cho từng đối tượng, bị ảnh hưởng bởi những gì mô hình nghĩ rằng chúng nên có. Mô hình sai buộc phải phù hợp với các giá trị ít hợp lý hơn so với mô hình phù hợp. Nhưng các thông số, vào cuối ngày, bị chi phối bởi sự phù hợp với dữ liệu thực tế.
Đây là mã hơi khó hiểu của tôi. Ý tưởng là để phù hợp với dữ liệu nghiên cứu giấc ngủ và sau đó xây dựng một bộ dữ liệu mô phỏng với cùng các tham số, nhưng tương quan lớn hơn cho các hiệu ứng ngẫu nhiên. Tập dữ liệu đó được cung cấp để mô phỏng.lmer () để mô phỏng 1000 mẫu, mỗi mẫu phù hợp với cả hai cách. Khi tôi đã ghép các đối tượng được trang bị, tôi có thể lấy ra các tính năng khác nhau của sự phù hợp và so sánh chúng, sử dụng các bài kiểm tra t, hoặc bất cứ điều gì.
# 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)
}