Повторні заходи anova: lm vs lmer


10

Я намагаюся відтворити кілька тестів на взаємодію між обома lmі lmerповторними заходами (2x2x2). Причиною я хочу порівняти обидва методи в тому, що GLM SPSS для повторних заходів дає такі самі результати, як і 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, тому що це виглядає цікаво, але я поняття не маю, що ви тут робите :) Чи можете ви пояснити словами чи математикою, чому ці дзвінки lm та lmer повинні давати однакові коефіцієнти? І яка логіка в цій цілій вправі?
амеба

@amoeba Я оновив свій пост, щоб уточнити мету цієї публікації. В основному, я хочу відтворити результати SPSS (які можна перекласти у lmмодель) з lmer, а також знати, що є правильним lmer аналізом для такого роду даних.
мат

Причиною великої розбіжності у випадку двосторонньої взаємодії повних даних є те, що у вас є 2 точки даних на комбінацію параметрів. Інтуїція полягає в тому, що ефективний розмір вибірки для змішаної моделі в 2 рази менший, ніж для lm; Я підозрюю, що тому t-статистика приблизно в два рази менша lmer. Можливо, ви могли б спостерігати те саме явище, використовуючи простіший дизайн 2x2 і дивлячись на основні ефекти, не турбуючись із 2x2x2 та складними взаємодіями.
амеба

Відповіді:


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
Просто, щоб було зрозуміло, про яку модель ви звертаєтесь?
мат

резюме (lmer (Y ~ X1c X2c X3c + (X1c X2c X3c | id), XL, контроль = lmerControl (check.nobs.vs.nRE = "ігнорувати"))
користувач244839

Це справді дуже дивно! 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.
мат.

У мене такі ж версії R & lmerTest, як @mat, і вони отримують ті ж результати, що й у них (хоч і з багатьма попередженнями - невдача конвергенції тощо).
mkt -

1
@mat Можливо, мені не було зрозуміло - я отримую такі самі результати, як і ти! Я думаю, ви, мабуть, праві, що user244839 використовує іншу версію, ніж ми.
mkt -
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.