बार-बार किए गए उपाय aova: lm vs lmer


10

मैं दोनों के बीच lmऔर lmerदोहराया उपायों (2x2x2) के बीच कई इंटरैक्शन टेस्ट को पुन: पेश करने की कोशिश कर रहा हूं । मैं दोनों तरीकों की तुलना करना चाहता हूं, क्योंकि दोहराए गए उपायों के लिए 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 क्योंकि यह दिलचस्प लग रहा है, लेकिन मुझे नहीं पता कि आप यहां क्या कर रहे हैं :) क्या आप शब्दों या गणित में समझा सकते हैं कि इन lm और lmer कॉल्स में समान गुणांक क्यों उत्पन्न होना चाहिए? और इस पूरी कवायद के पीछे क्या तर्क है?
अमीबा

@amoeba मैंने इस पोस्ट के उद्देश्य को स्पष्ट करने के लिए अपनी पोस्ट अपडेट की। मूल रूप से, मैं एसपीएसएस (जो एक lmमॉडल में अनुवादित किया जा सकता है ) से परिणामों को पुन: पेश करना चाहता हूं lmer, और यह भी पता है कि इस तरह के डेटा के लिए सही lmer विश्लेषण क्या है ।
मैट

पूर्ण डेटा के लिए दो-तरफ़ा बातचीत के मामले में बड़ी विसंगति का कारण यह है कि आपके पास प्रति पैरामीटर संयोजन में 2 डेटा बिंदु हैं। अंतर्ज्ञान यह है कि मिश्रित मॉडल के लिए प्रभावी नमूना आकार 2x से छोटा है lm; मुझे संदेह है कि टी-स्टेटिस्टिक लगभग दो गुना छोटा है lmer। आप शायद 2x2x2 और जटिल इंटरैक्शन के साथ परेशान हुए बिना एक सरल 2x2 डिजाइन का उपयोग करके और मुख्य प्रभावों को देखते हुए एक ही घटना का निरीक्षण करने में सक्षम होंगे।
अमीबा

जवाबों:


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, control = 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
मैट

मेरे पास @mat के समान R & lmerTest संस्करण हैं और उनके समान परिणाम प्राप्त करते हैं (यद्यपि कई चेतावनियों के साथ - अभिसरण करने में विफलता, आदि)।
mkt - मोनिका

1
@mat शायद मैं स्पष्ट नहीं था - मुझे आपके जैसे ही परिणाम मिल रहे हैं! मुझे लगता है कि आप शायद सही हैं कि user244839 हम की तुलना में एक अलग संस्करण का उपयोग कर रहे हैं।
mkt - मोनिका
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.