반복 측정 값 anova : lm vs lmer


10

반복 측정 (2x2x2) lmlmer반복 측정 사이에 여러 상호 작용 테스트를 재현하려고합니다 . 두 방법을 비교하고 싶은 이유는 SPSS의 반복 측정에 대한 GLM이 lm여기에 제시된 방법 과 정확히 동일한 결과를 산출하기 때문에 결국 SPSS와 R-lmer를 비교하고 싶기 때문입니다. 지금까지 이러한 상호 작용 중 일부만 (근접 적으로) 재현했습니다.

내 요점을 더 잘 설명하는 스크립트가 아래에 있습니다.

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

위에서 볼 수 있듯이 lm추정치와 정확히 일치하는 것은 lmer없습니다. 일부 결과는 매우 유사하지만 수치 / 계산상의 이유로 인해 다를 수 있습니다. 두 추정 방법 사이의 간격은 특히 X2:X3 2-way interaction (for all the data).

거기에 얻을 수있는 방법이 있다면 내 질문은 정확히 두 가지 방법과 같은 결과를하고있는 경우 올바른 으로 분석을 수행하는 방법을 lmer(그것은 일치하지 않을 수 있지만, lm결과).


보너스:

t value3 방향 상호 작용과 관련된 요소가 요인을 코딩하는 방식에 영향을받는 것으로 나타났습니다 .

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 그것은 흥미로워 보이지만 당신이 여기서 무엇을하고 있는지 전혀 모르겠습니다. 그리고이 전체 운동의 논리는 무엇입니까?
amoeba

@amoeba이 게시물의 목적을 명확히하기 위해 게시물을 업데이트했습니다. 기본적으로 SPSS ( lm모델 로 변환 할 수 있음)의 결과를로 재현하고 이러한 종류의 데이터에 대한 올바른 분석이 lmer무엇인지 알고 싶습니다 . lmer
mat

전체 데이터에 대한 양방향 상호 작용의 경우 불일치가 큰 이유는 매개 변수 조합마다 2 개의 데이터 포인트가 있기 때문입니다. 직감은 혼합 모델의 유효 샘플 크기가 2 배 더 작다는 것입니다 lm. 나는 이것이 t- 통계량이 대략 2 배 더 작은 이유라고 생각합니다 lmer. 2x2x2와 복잡한 상호 작용을 신경 쓰지 않고 간단한 2x2 디자인을 사용하고 주요 효과를 살펴보면 동일한 현상을 관찰 할 수있을 것입니다.
amoeba

답변:


3

이상한, 마지막 모델을 사용할 때 가장 가까운 것이 아니라 완벽한 일치를 찾습니다.

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
분명히 말하면, 어떤 모델을 언급하고 있습니까?
mat

요약 (lmer (Y ~ X1c X2c X3c + (X1c X2c X3c | id), XL, 제어 = lmerControl (check.nobs.vs.nRE = "ignore")))
user244839

이것은 실제로 매우 이상합니다! 나를 위해 summary( lmer(Y ~ X1c*X2c*X3c + (X1c*X2c*X3c|id), XL, control=lmerControl(check.nobs.vs.nRE="ignore")) )$coefficients돌아옵니다 t = 46.5148684. 버전 문제 일 수 있습니까? 그리고를 사용 R version 3.5.3 (2019-03-11)하고 lmerTest 3.1-0있습니다.
mat

@mat와 동일한 R & lmerTest 버전이 있으며 동일한 경고를 표시하지만 수렴에 실패하는 등 많은 경고가 표시됩니다.
mkt-복원 모니카

1
@mat 아마도 확실하지 않았을 것입니다-당신과 같은 결과를 얻고 있습니다! user244839가 우리와 다른 버전을 사용하고 있다고 생각합니다.
mkt-Reinstate Monica
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.