Wiederholte Maßnahmen anova: lm vs lmer

10

Ich versuche, mehrere Interaktionstests zwischen beiden lmund lmerwiederholten Messungen (2x2x2) zu reproduzieren. Der Grund, warum ich beide Methoden vergleichen möchte, ist, dass das GLM von SPSS für wiederholte Messungen genau die gleichen Ergebnisse liefert wie der lmhier vorgestellte Ansatz. Am Ende möchte ich SPSS mit R-lmer vergleichen. Bisher habe ich nur einige dieser Interaktionen (genau) reproduziert.

Unten finden Sie ein Skript, um meinen Standpunkt besser zu veranschaulichen:

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

Wie Sie von oben sehen können, lmstimmt keine der Schätzungen genau mit denen überein lmer. Obwohl einige der Ergebnisse sehr ähnlich sind und sich nur aus numerischen / rechnerischen Gründen unterscheiden können. Die Lücke zwischen beiden Schätzmethoden ist besonders groß für die X2:X3 2-way interaction (for all the data).

Meine Frage ist, ob es eine Möglichkeit gibt, mit beiden Methoden genau die gleichen Ergebnisse zu erzielen, und ob es eine korrekte Methode gibt, mit der die Analysen durchgeführt werden können lmer(obwohl sie möglicherweise nicht mit den lmErgebnissen übereinstimmen ).


Bonus:

Ich habe festgestellt, dass die t valuemit der 3-Wege-Interaktion verbundene Funktion von der Art und Weise beeinflusst wird, wie Faktoren codiert werden, was mir sehr seltsam erscheint:

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
Matte
quelle
1
+1, weil es interessant aussieht, aber ich habe keine Ahnung, was Sie hier tun :) Können Sie in Worten oder Mathematik erklären, warum diese lm- und lmer-Aufrufe die gleichen Koeffizienten ergeben sollten? Und was ist die Logik hinter dieser ganzen Übung?
Amöbe sagt Reinstate Monica
@amoeba Ich habe meinen Beitrag aktualisiert, um den Zweck dieses Beitrags zu klären. Grundsätzlich möchte ich die Ergebnisse von SPSS (die in ein lmModell übersetzt werden können ) mit reproduzieren lmerund auch wissen, was die richtigen lmer Analysen für diese Art von Daten sind.
Matte
Der Grund für die große Diskrepanz bei der bidirektionalen Interaktion für die vollständigen Daten ist, dass Sie 2 Datenpunkte pro Parameterkombination haben. Die Intuition ist, dass die effektive Stichprobengröße für ein gemischtes Modell 2x kleiner ist als für lm; Ich vermute, deshalb ist die T-Statistik in ungefähr zweimal kleiner lmer. Sie könnten wahrscheinlich dasselbe Phänomen mit einem einfacheren 2x2-Design beobachten und die Haupteffekte betrachten, ohne sich um 2x2x2 und komplizierte Interaktionen zu kümmern.
Amöbe sagt Reinstate Monica

Antworten:

3

Seltsam, wenn ich Ihr letztes Modell verwende, finde ich eine perfekte Übereinstimmung, keine enge Übereinstimmung:

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 ***
user244839
quelle
1
Um ganz klar zu sein, auf welches Modell beziehen Sie sich?
Matte
Zusammenfassung (lmer (Y ~ X1c X2c X3c + (X1c X2c X3c | id), XL, control = lmerControl (check.nobs.vs.nRE = "ignorieren"))
user244839
Das ist in der Tat sehr seltsam! summary( lmer(Y ~ X1c*X2c*X3c + (X1c*X2c*X3c|id), XL, control=lmerControl(check.nobs.vs.nRE="ignore")) )$coefficientskehrt t = 46.5148684für mich zurück. Könnte ein Versionsproblem sein? Ich benutze R version 3.5.3 (2019-03-11)und lmerTest 3.1-0.
Matte
Ich habe die gleichen R & lmerTest-Versionen wie @mat und erhalte die gleichen Ergebnisse wie diese (wenn auch mit vielen Warnungen - Konvergenzfehler usw.).
mkt - Monica am
1
@mat Vielleicht war mir nicht klar - ich bekomme die gleichen Ergebnisse wie Sie! Ich denke, Sie haben wahrscheinlich Recht, dass user244839 eine andere Version verwendet als wir.
mkt - Reinstate Monica