반복 측정 (2x2x2) lm
과 lmer
반복 측정 사이에 여러 상호 작용 테스트를 재현하려고합니다 . 두 방법을 비교하고 싶은 이유는 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 value
3 방향 상호 작용과 관련된 요소가 요인을 코딩하는 방식에 영향을받는 것으로 나타났습니다 .
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 (
—
mat
lm
모델 로 변환 할 수 있음)의 결과를로 재현하고 이러한 종류의 데이터에 대한 올바른 분석이 lmer
무엇인지 알고 싶습니다 . lmer
전체 데이터에 대한 양방향 상호 작용의 경우 불일치가 큰 이유는 매개 변수 조합마다 2 개의 데이터 포인트가 있기 때문입니다. 직감은 혼합 모델의 유효 샘플 크기가 2 배 더 작다는 것입니다
—
amoeba
lm
. 나는 이것이 t- 통계량이 대략 2 배 더 작은 이유라고 생각합니다 lmer
. 2x2x2와 복잡한 상호 작용을 신경 쓰지 않고 간단한 2x2 디자인을 사용하고 주요 효과를 살펴보면 동일한 현상을 관찰 할 수있을 것입니다.