Tekrarlanan önlemler anova: lm vs lmer


10

Her ikisi ile lmve lmertekrarlanan önlemler (2x2x2) arasında birkaç etkileşim testi çoğaltmak çalışıyorum . Her iki yöntemi de karşılaştırmak istememin nedeni, tekrarlanan ölçümler için SPSS'nin GLM'sinin lmburada sunulan yaklaşımla tam olarak aynı sonuçları vermesidir , bu nedenle sonunda SPSS ile R-lmer'i karşılaştırmak istiyorum. Şimdiye kadar, bu etkileşimlerin sadece bir kısmını (yakından) çoğaltmayı başardım.

Demek istediğimi daha iyi göstermek için bir senaryo aşağıda bulacaksınız:

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

Yukarıdan da görebileceğiniz gibi, lmtahminlerin hiçbiri tahminlerle tam olarak eşleşmiyor lmer. Her ne kadar bazı sonuçlar çok benzer olsa da, yalnızca sayısal / hesaplama nedenlerinden dolayı farklılık gösterebilir. Her iki tahmin yöntemi arasındaki boşluk özellikle X2:X3 2-way interaction (for all the data).

Orada elde etmek için bir yol olmadığını Benim sorum tam iki yöntemde ile aynı sonuçları ve varsa doğru olan analizleri yapmak için bir yol lmer(o aynı olmayabilir rağmen lmsonuçlar).


Bonus:

t value3 yönlü etkileşimle ilişkili olanın, faktörlerin kodlanma biçiminden etkilendiğini fark ettim , bu bana çok garip geliyor:

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 çünkü ilginç görünüyor ama burada ne yaptığınızı bilmiyorum :) Bu lm ve lmer çağrılarının neden aynı katsayıları vermesi gerektiğini kelimeler veya matematikle açıklayabilir misiniz? Ve tüm bu egzersizin arkasındaki mantık nedir?
amip

@amoeba Bu yazının amacını açıklamak için yazımı güncelledim. Temel olarak, SPSS'den (bir lmmodele çevrilebilecek ) sonuçları çoğaltmak ve bu tür veriler için doğru analizlerin lmerne olduğunu bilmek istiyorum . lmer
mat

Tam veri için iki yönlü etkileşim durumunda büyük tutarsızlığın nedeni, parametre kombinasyonu başına 2 veri noktanızın olmasıdır. Sezgi, karışık bir model için etkili numune boyutunun, olduğundan daha 2 kat daha küçük olmasıdır lm; Sanırım t-istatistiği kabaca iki kat daha küçük lmer. Muhtemelen 2x2x2 ve karmaşık etkileşimlerle uğraşmadan, daha basit bir 2x2 tasarımı kullanarak ve ana etkilere bakarak aynı fenomeni gözlemleyebilirsiniz.
amip

Yanıtlar:


3

Garip, son modelinizi kullandığımda, yakın bir eşleşme değil, mükemmel bir eşleşme buluyorum:

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
Açık olmak gerekirse, hangi modele atıfta bulunuyorsunuz?
mat

özet (lmer (Y ~ X1c X2c X3c + (X1c X2c X3c | id), XL, kontrol = lmerControl (check.nobs.vs.nRE = "yoksay")))
user244839 16:58

Bu gerçekten çok garip! benim için summary( lmer(Y ~ X1c*X2c*X3c + (X1c*X2c*X3c|id), XL, control=lmerControl(check.nobs.vs.nRE="ignore")) )$coefficientsgeri döner t = 46.5148684. Bir sürüm sorunu olabilir mi? Ben kullanıyorum R version 3.5.3 (2019-03-11)ve lmerTest 3.1-0.
mat

@Mat ile aynı R & lmerTest sürümlerine sahibim ve onlarla aynı sonuçları elde ediyorum (birçok uyarıyla da olsa - yakınsama hatası vb.).
mkt - Monica

1
@mat Belki de net değildim - seninle aynı sonuçları alıyorum! Sanırım user244839'un bizden farklı bir sürüm kullandığı konusunda haklısın.
mkt - Monica
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.