Các biện pháp lặp đi lặp lại anova: lm vs lmer


10

Tôi đang cố gắng tái tạo một số thử nghiệm tương tác giữa cả hai lmlmertrên các biện pháp lặp lại (2x2x2). Lý do tôi muốn so sánh cả hai phương pháp là vì GLM của SPSS cho các biện pháp lặp lại mang lại kết quả chính xác như lmcách tiếp cận được trình bày ở đây, vì vậy cuối cùng tôi muốn so sánh SPSS với R-lmer. Cho đến nay, tôi chỉ quản lý để tái tạo (chặt chẽ) một số các tương tác này.

Bạn sẽ tìm thấy bên dưới một kịch bản để minh họa rõ hơn quan điểm của tôi:

library(data.table)
library(tidyr)
library(lmerTest)
library(MASS)

set.seed(1)

N     <- 100 # number of subjects
sigma <- 1   # popuplation sd
rho   <- .6  # correlation between variables

# X1:   a  a  a  a  b  b  b  b
# X2:   a  a  b  b  a  a  b  b
# X3:   a  b  a  b  a  b  a  b
mu <- c(5, 3, 3, 5, 3, 5, 5, 3) # means

# Simulate the data
sigma.mat <- rep(sigma, length(mu))
S <- matrix(sigma.mat, ncol = length(sigma.mat), nrow = length(sigma.mat))
Sigma <- t(S) * S * rho  
diag(Sigma) <- sigma**2
X <- data.table( mvrnorm(N, mu, Sigma) )
setnames(X, names(X), c("aaa", "aab", "aba", "abb", "baa", "bab", "bba", "bbb"))
X[, id := 1:.N]

# Long format
XL <- data.table( gather(X, key, Y, aaa:bbb) )
XL[, X1 := substr(key, 1, 1)]
XL[, X2 := substr(key, 2, 2)]
XL[, X3 := substr(key, 3, 3)]

# Recode long format (a = +1; b = -1)
XL[, X1c := ifelse(X1 == "a", +1, -1)]
XL[, X2c := ifelse(X2 == "a", +1, -1)]
XL[, X3c := ifelse(X3 == "a", +1, -1)]


### Composite scores to be used with lm
# X2:X3 2-way interaction (for half the data; i.e. when X1 == "a")
X[, X1a_X2.X3 := (aaa - aab) - (aba - abb)]

# X2:X3 2-way interaction (for all the data)
X[, aa := (aaa + baa) / 2]
X[, ab := (aab + bab) / 2]
X[, ba := (aba + bba) / 2]
X[, bb := (abb + bbb) / 2]
X[, X2.X3 := (aa - ab) - (ba - bb)]

# X1:X2:X3 3-way interaction (for all the data)
X[, X1.X2.X3 := ( (aaa - aab) - (aba - abb) ) - ( (baa - bab) - (bba - bbb) )]


### Fit models
# X2:X3 2-way interaction (for half the data; i.e. when X1 == "a")
summary( lm(X1a_X2.X3 ~ 1, X) ) # t = 34.13303
summary( lmer(Y ~ X2c*X3c + (X2c+X3c|id), XL[X1 == "a"]) ) # t = 34.132846  close match
summary( lmer(Y ~ X2c*X3c + (X2c+X3c||id), XL[X1 == "a"]) ) # t = 34.134624  close match

# X2:X3 2-way interaction (for all the data) 
summary( lm(X2.X3 ~ 1, X) ) # t = 0.3075025
summary( lmer(Y ~ X2c*X3c + (X2c+X3c|id), XL) ) # t = 0.1641932
summary( lmer(Y ~ X2c*X3c + (X2c+X3c||id), XL) ) # t = 0.1640710
summary( lmer(Y ~ X2c*X3c + (X2c*X3c|id), XL) ) # t = 0.1641765
anova(   lmer(Y ~ X2c*X3c + (X2c*X3c|id), XL), ddf = "Kenward-Roger" ) # t = 0.1643168
summary( lmer(Y ~ X2c*X3c + (X2c*X3c|id), XL, REML = FALSE) ) # t = 0.1645303
summary( lmer(Y ~ X2c*X3c + (X2c*X3c||id), XL) ) # t = 0.1640704

# X1:X2:X3 3-way interaction (for all the data)
summary( lm(X1.X2.X3 ~ 1, X) ) # t = 46.50177
summary( lmer(Y ~ X1c*X2c*X3c + (X1c*X2c*X3c - X1c:X2c:X3c|id), XL) ) # t = 49.0317599
anova(   lmer(Y ~ X1c*X2c*X3c + (X1c*X2c*X3c - X1c:X2c:X3c|id), XL), ddf = "Kenward-Roger" ) # t = 49.03176
summary( lmer(Y ~ X1c*X2c*X3c + (X1c*X2c*X3c - X1c:X2c:X3c|id), XL, REML = FALSE) ) # t = 49.2677606
summary( lmer(Y ~ X1c*X2c*X3c + (X1c*X2c*X3c - X1c:X2c:X3c||id), XL) ) # t = 46.5193774 close match
summary( lmer(Y ~ X1c*X2c*X3c + (X1c*X2c*X3c|id), XL) ) # unidentifiable
summary( lmer(Y ~ X1c*X2c*X3c + (X1c*X2c*X3c|id), XL,
              control = lmerControl(check.nobs.vs.nRE="ignore")) ) # t = 46.5148684 close match

Như bạn có thể thấy ở trên, không có lmước tính nào được khớp chính xác với các ước tính lmer. Mặc dù một số kết quả rất giống nhau và có thể chỉ khác nhau do lý do số / tính toán. Khoảng cách giữa cả hai phương pháp ước tính là đặc biệt lớn đối với X2:X3 2-way interaction (for all the data).

Câu hỏi của tôi là liệu có cách nào để có được kết quả chính xác như nhau với cả hai phương pháp hay không và liệu có cách nào chính xác để thực hiện các phân tích với lmer(mặc dù nó có thể không khớp với lmkết quả).


Tặng kem:

Tôi đã nhận thấy rằng t valueliên kết với tương tác 3 chiều bị ảnh hưởng bởi cách các yếu tố được mã hóa, điều này có vẻ rất lạ đối với tôi:

summary( lmer(Y ~ X1*X2*X3 + (X1*X2*X3 - X1:X2:X3||id), XL) ) # t = 48.36
summary( lmer(Y ~ X1c*X2c*X3c + (X1c*X2c*X3c - X1c:X2c:X3c||id), XL) ) # t = 56.52

1
+1 bởi vì nó có vẻ thú vị nhưng tôi không biết bạn đang làm gì ở đây :) Bạn có thể giải thích bằng từ ngữ hoặc toán học tại sao các cuộc gọi lm và lmer này sẽ mang lại cùng một hệ số không? Và logic đằng sau toàn bộ bài tập này là gì?
amip nói rằng Phục hồi lại

@amoeba Tôi đã cập nhật bài viết của mình để làm rõ mục đích của bài đăng này. Về cơ bản, tôi muốn sao chép các kết quả từ SPSS (có thể được dịch thành lmmô hình) lmervà cũng biết phân tích chính xác lmer cho loại dữ liệu này là gì.
chiếu

Lý do cho sự khác biệt lớn trong trường hợp tương tác hai chiều cho dữ liệu đầy đủ là bạn có 2 điểm dữ liệu cho mỗi kết hợp tham số. Trực giác là cỡ mẫu hiệu quả cho mô hình hỗn hợp nhỏ hơn 2 lần so với lm; Tôi nghi ngờ đó là lý do tại sao thống kê t nhỏ hơn khoảng hai lần lmer. Bạn có thể có thể quan sát hiện tượng tương tự bằng cách sử dụng thiết kế 2x2 đơn giản hơn và xem xét các hiệu ứng chính, mà không cần bận tâm với 2x2x2 và các tương tác phức tạp.
amip nói rằng Phục hồi lại

Câu trả lời:


3

Thật kỳ lạ, khi tôi sử dụng mô hình cuối cùng của bạn, tôi tìm thấy một kết hợp hoàn hảo, không phải là một kết hợp gần đúng:

Fixed effects:
            Estimate Std. Error       df t value Pr(>|t|)    
(Intercept)  3.91221    0.07242 99.00001  54.025   <2e-16 ***
X1c          0.03277    0.05006 99.00000   0.655    0.514    
X2c         -0.04836    0.04644 99.00000  -1.042    0.300    
X3c          0.04248    0.05009 99.00001   0.848    0.398    
X1c:X2c      0.08370    0.08747 98.99998   0.957    0.341    
X1c:X3c     -0.07025    0.08895 98.99994  -0.790    0.432    
X2c:X3c     -0.02957    0.09616 99.00000  -0.308    0.759    
X1c:X2c:X3c -8.14099    0.17507 99.00003 -46.502   <2e-16 ***

1
Chỉ cần rõ ràng, bạn đang đề cập đến mô hình nào?
chiếu

tóm tắt (lmer (Y ~ X1c X2c X3c + (X1c X2c X3c | id), XL, control = lmerControl (check.nobs.vs.nRE = "bỏ qua")))
user244839

Điều này thực sự rất kỳ lạ! summary( lmer(Y ~ X1c*X2c*X3c + (X1c*X2c*X3c|id), XL, control=lmerControl(check.nobs.vs.nRE="ignore")) )$coefficientstrả lại t = 46.5148684cho tôi Có thể là một vấn đề phiên bản? Tôi đang sử dụng R version 3.5.3 (2019-03-11)lmerTest 3.1-0.
chiếu

Tôi có các phiên bản R & lmerTest giống như @mat và nhận được kết quả giống như chúng (mặc dù có nhiều cảnh báo - không hội tụ, v.v.).
mkt - Phục hồi Monica

1
@mat Có lẽ tôi đã không rõ ràng - Tôi đang nhận được kết quả giống như bạn! Tôi nghĩ có lẽ bạn đúng rằng user244839 đang sử dụng một phiên bản khác với chúng tôi.
mkt - Phục hồi Monica
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.