क्या है lme4 :: तीन तरह से दोहराए गए उपायों के बराबर lmer ANOVA?


11

मेरा सवाल इस प्रतिक्रिया पर आधारित है जिसमें दिखाया गया है कि कौन सा lme4::lmerमॉडल दो-तरफ़ा उपायों से मेल खाता है एनोवा:

require(lme4)
set.seed(1234)
d <- data.frame(
    y = rnorm(96),
    subject = factor(rep(1:12, 4)),
    a = factor(rep(1:2, each=24)),
    b = factor(rep(rep(1:2, each=12))),
    c = factor(rep(rep(1:2, each=48))))

# standard two-way repeated measures ANOVA:
summary(aov(y~a*b+Error(subject/(a*b)), d[d$c == "1",]))

# corresponding lmer call:
anova(lmer(y ~ a*b+(1|subject) + (1|a:subject) + (1|b:subject), d[d$c == "1",]))

मेरा सवाल अब यह है कि इसे तीन-तरफ़ा एनोवा के मामले में कैसे बढ़ाया जाए:

summary(aov(y~a*b*c+Error(subject/(a*b*c)), d))
## [...]
## Error: subject:a:b:c
##           Df Sum Sq Mean Sq F value Pr(>F)
## a:b:c      1  0.101  0.1014   0.115  0.741
## Residuals 11  9.705  0.8822 

प्राकृतिक विस्तार के साथ-साथ संस्करण इसके एनोवा परिणामों से मेल नहीं खाते:

anova(lmer(y ~ a*b*c +(1|subject) + (1|a:subject) + (1|b:subject) + (1|c:subject), d))
## [...]
## a:b:c  1 0.1014  0.1014  0.1500

anova(lmer(y ~ a*b*c +(1|subject) + (1|a:subject) + (1|b:subject) + (1|c:subject) + 
               (1|a:b:subject) + (1|a:c:subject) + (1|b:c:subject), d))
## [...]
## a:b:c  1 0.1014  0.1014  0.1539

ध्यान दें कि इससे पहले एक बहुत ही समान प्रश्न पूछा गया है । हालांकि, यह उदाहरण डेटा (जो यहां प्रदान किया गया है) गायब था।


क्या आप वाकई अपने दो स्तरीय मॉडल नहीं चाहते हैं y ~ a*b + (1 + a*b|subject), d[d$c == "1",]? या शायद मुझे कुछ याद आ रहा है?
रासमस बैथ

@ RasmusBååth गो अहेड और इसे फिट करने की कोशिश करें, lmerशिकायत करेंगे क्योंकि यादृच्छिक प्रभाव की पहचान किसी भी अधिक नहीं की जाती है। शुरू में मैंने भी सोचा कि यह वह मॉडल है जो मैं चाहता हूं, लेकिन यह नहीं है। यदि आप lmer मॉडल की तुलना करते हैं तो मैं मानक ANOVA के साथ 2-वे मामले के लिए प्रस्ताव करता हूं, तो आप देखेंगे कि एफ-मान बिल्कुल मेल खाते हैं। जैसा कि मैंने प्रतिक्रिया में कहा था।
हेनरिक

3
तीन-तरफ़ा समस्या के लिए, पहला lmerमॉडल जो आपने लिखा था (जो यादृच्छिक दो-तरफ़ा इंटरैक्शन को छोड़कर ) 3-तरह के RM-ANOVA के बराबर होने की उम्मीद नहीं है, लेकिन दूसरा जो आपने लिखा था (जिसमें यादृच्छिक शामिल है) दोतरफा बातचीत) होनी चाहिए। जैसे कि उस मॉडल के साथ भी विसंगति क्यों है, मुझे इस बारे में एक संकेत है कि समस्या क्या है, रात के खाने को हथियाने के लिए जा रहा है, तो खिलौना डाटासेट में कुछ और देखेंगे।
जेक वेस्टफॉल

जवाबों:


18

आपके प्रश्न का सीधा उत्तर यह है कि आपने जो अंतिम मॉडल लिखा था,

anova(lmer(y ~ a*b*c +(1|subject) + (1|a:subject) + (1|b:subject) + (1|c:subject) + 
           (1|a:b:subject) + (1|a:c:subject) + (1|b:c:subject), d))

मेरा मानना ​​है कि "सिद्धांत रूप में" सही है, हालांकि यह एक अजीब पैरामीटर है जो वास्तविक अभ्यास में हमेशा अच्छा काम नहीं करता है।

क्यों कि इस मॉडल से आपको जो आउटपुट मिलता है वह aov()आउटपुट के साथ असंगत है , मुझे लगता है कि इसके दो कारण हैं।

  1. आपका सरल नकली डेटासेट पैथोलॉजिकल है कि सर्वश्रेष्ठ-फिटिंग मॉडल वह है जो नकारात्मक विचरण घटकों का अर्थ रखता है, जो मिश्रित मॉडल lmer()(और अधिकांश अन्य मिश्रित मॉडल प्रोग्राम) द्वारा फिट होते हैं, जो अनुमति नहीं देगा।
  2. गैर-पैथोलॉजिकल डेटासेट के साथ भी, जिस तरह से आपके पास मॉडल सेट अप है, जैसा कि ऊपर उल्लेख किया गया है, हमेशा अभ्यास में अच्छी तरह से काम नहीं करता है, हालांकि मुझे मानना ​​होगा कि मैं वास्तव में क्यों नहीं समझता। यह भी मेरी राय में आम तौर पर अजीब है, लेकिन यह एक और कहानी है।

मुझे पहले उस पैरामीटर का प्रदर्शन करना चाहिए जिसे मैं आपके शुरुआती दो-तरफ़ा एनोवा उदाहरण पर पसंद करता हूं। मान लें कि आपका डेटासेट dलोड हो गया है। आपका मॉडल (ध्यान दें कि मैंने डमी से कॉन्ट्रास्ट कोड में बदलाव किया था):

options(contrasts=c("contr.sum","contr.poly"))
mod1 <- lmer(y ~ a*b+(1|subject) + (1|a:subject) + (1|b:subject),
         data = d[d$c == "1",])
anova(mod1)
# Analysis of Variance Table
#     Df  Sum Sq Mean Sq F value
# a    1 2.20496 2.20496  3.9592
# b    1 0.13979 0.13979  0.2510
# a:b  1 1.23501 1.23501  2.2176

जो यहाँ ठीक काम किया है कि यह aov()उत्पादन से मेल खाता है । जिस मॉडल को मैं पसंद करता हूं, उसमें दो बदलाव शामिल हैं: मैन्युअल रूप से इसके विपरीत-कारकों को कोड करना, ताकि हम आर कारक वस्तुओं (जो मैं 100% मामलों में करने की सलाह देता हूं) के साथ काम नहीं कर रहा हूं, और यादृच्छिक प्रभावों को अलग तरीके से निर्दिष्ट कर रहा हूं:

d <- within(d, {
  A <- 2*as.numeric(paste(a)) - 3
  B <- 2*as.numeric(paste(b)) - 3
  C <- 2*as.numeric(paste(c)) - 3
})
mod2 <- lmer(y ~ A*B + (1|subject)+(0+A|subject)+(0+B|subject),
             data = d[d$c == "1",])
anova(mod2)
# Analysis of Variance Table
# Df  Sum Sq Mean Sq F value
# A    1 2.20496 2.20496  3.9592
# B    1 0.13979 0.13979  0.2510
# A:B  1 1.23501 1.23501  2.2176

logLik(mod1)
# 'log Lik.' -63.53034 (df=8)
logLik(mod2)
# 'log Lik.' -63.53034 (df=8)

सरल 2-वे समस्या में दो दृष्टिकोण पूरी तरह से बराबर हैं। अब हम 3-तरफ़ा समस्या पर जाएँगे। मैंने पहले उल्लेख किया है कि आपके द्वारा दिया गया उदाहरण डेटासेट पैथोलॉजिकल था। इसलिए आपके उदाहरण के डेटासेट को संबोधित करने से पहले मैं जो करना चाहता हूं, वह यह है कि वास्तविक वेरिएंट कंपोनेंट्स मॉडल (यानी, जहां नॉन-जीरो वर्जन कंपोनेंट को सच्चे मॉडल में बनाया गया है) से डेटासेट जनरेट किया जाए। पहले मैं दिखाऊंगा कि मेरा पसंदीदा पैरामीटर आपके प्रस्तावित प्रस्ताव से बेहतर कैसे काम करता है। तब मैं विचरण घटकों के आकलन का एक और तरीका प्रदर्शित करूँगा जो यह नहीं लगाता है कि उन्हें गैर-नकारात्मक होना चाहिए। तब हम मूल उदाहरण डेटासेट के साथ समस्या को देखने की स्थिति में होंगे।

नए डेटासेट संरचना में समान होंगे सिवाय इसके कि हमारे पास 50 विषय होंगे:

set.seed(9852903)
d2 <- expand.grid(A=c(-1,1), B=c(-1,1), C=c(-1,1), sub=seq(50))
d2 <- merge(d2, data.frame(sub=seq(50), int=rnorm(50), Ab=rnorm(50),
  Bb=rnorm(50), Cb=rnorm(50), ABb=rnorm(50), ACb=rnorm(50), BCb=rnorm(50)))
d2 <- within(d2, {
  y <- int + (1+Ab)*A + (1+Bb)*B + (1+Cb)*C + (1+ABb)*A*B +
    (1+ACb)*A*C + (1+BCb)*B*C + A*B*C + rnorm(50*2^3)
  a <- factor(A)
  b <- factor(B)
  c <- factor(C)
})

हम जिस एफ-अनुपात का मिलान करना चाहते हैं वह हैं:

aovMod1 <- aov(y ~ a*b*c + Error(factor(sub)/(a*b*c)), data = d2)
tab <- lapply(summary(aovMod1), function(x) x[[1]][1,2:4])
do.call(rbind, tab)
#                          Sum Sq Mean Sq F value
# Error: factor(sub)       439.48    8.97        
# Error: factor(sub):a     429.64  429.64  32.975
# Error: factor(sub):b     329.48  329.48  27.653
# Error: factor(sub):c     165.44  165.44  17.924
# Error: factor(sub):a:b   491.33  491.33  49.694
# Error: factor(sub):a:c   305.46  305.46  41.703
# Error: factor(sub):b:c   466.09  466.09  40.655
# Error: factor(sub):a:b:c 392.76  392.76 448.101

यहाँ हमारे दो मॉडल हैं:

mod3 <- lmer(y ~ a*b*c + (1|sub)+(1|a:sub)+(1|b:sub)+(1|c:sub)+
  (1|a:b:sub)+(1|a:c:sub)+(1|b:c:sub), data = d2)
anova(mod3)
# Analysis of Variance Table
#       Df Sum Sq Mean Sq F value
# a      1  32.73   32.73  34.278
# b      1  21.68   21.68  22.704
# c      1  12.53   12.53  13.128
# a:b    1  60.93   60.93  63.814
# a:c    1  50.38   50.38  52.762
# b:c    1  57.30   57.30  60.009
# a:b:c  1 392.76  392.76 411.365

mod4 <- lmer(y ~ A*B*C + (1|sub)+(0+A|sub)+(0+B|sub)+(0+C|sub)+
  (0+A:B|sub)+(0+A:C|sub)+(0+B:C|sub), data = d2)
anova(mod4)
# Analysis of Variance Table
#       Df Sum Sq Mean Sq F value
# A      1  28.90   28.90  32.975
# B      1  24.24   24.24  27.653
# C      1  15.71   15.71  17.924
# A:B    1  43.56   43.56  49.694
# A:C    1  36.55   36.55  41.703
# B:C    1  35.63   35.63  40.655
# A:B:C  1 392.76  392.76 448.101

logLik(mod3)
# 'log Lik.' -984.4531 (df=16)
logLik(mod4)
# 'log Lik.' -973.4428 (df=16)

जैसा कि हम देख सकते हैं, केवल दूसरी विधि आउटपुट से मेल खाती है aov(), हालांकि पहली विधि कम से कम बॉलपार्क में है। दूसरी विधि भी एक उच्च लॉग-संभावना प्राप्त करती है। मुझे यकीन नहीं है कि ये दो विधियां अलग-अलग परिणाम क्यों देती हैं, जैसा कि फिर से मुझे लगता है कि वे "सिद्धांत रूप में" समकक्ष हैं, लेकिन शायद यह कुछ संख्यात्मक / कम्प्यूटेशनल कारणों से है। या हो सकता है कि मुझसे गलती हुई हो और वे सिद्धांत रूप में भी समान नहीं हैं।

अब मैं पारंपरिक एनोवा विचारों के आधार पर विचरण घटकों के आकलन का एक और तरीका दिखाऊंगा। मूल रूप से हम आपके डिजाइन के लिए अपेक्षित औसत वर्ग समीकरण लेंगे, मतलब वर्गों के अवलोकन किए गए मूल्यों में स्थानापन्न करेंगे, और विचरण घटकों के लिए हल करेंगे। अपेक्षित माध्य वर्गों को प्राप्त करने के लिए हम एक आर फ़ंक्शन का उपयोग करेंगे जो मैंने कुछ साल पहले लिखा था, जिसे कहा जाता है EMS(), जो यहां पर प्रलेखित है । नीचे मुझे लगता है कि फ़ंक्शन पहले से लोड है।

# prepare coefficient matrix
r <- 1 # number of replicates
s <- 50 # number of subjects
a <- 2 # number of levels of A
b <- 2 # number of levels of B
c <- 2 # number of levels of C
CT <- EMS(r ~ a*b*c*s, random="s")
expr <- strsplit(CT[CT != ""], split="")
expr <- unlist(lapply(expr, paste, collapse="*"))
expr <- sapply(expr, function(x) eval(parse(text=x)))
CT[CT != ""] <- expr
CT[CT == ""] <- 0
mode(CT) <- "numeric"
# residual variance and A*B*C*S variance are confounded in
# this design, so remove the A*B*C*S variance component
CT <- CT[-15,-2]
CT
#        VarianceComponent
# Effect  e b:c:s a:c:s a:b:s a:b:c c:s b:s a:s b:c a:c a:b s   c   b   a
#   a     1     0     0     0     0   0   0   4   0   0   0 0   0   0 200
#   b     1     0     0     0     0   0   4   0   0   0   0 0   0 200   0
#   c     1     0     0     0     0   4   0   0   0   0   0 0 200   0   0
#   s     1     0     0     0     0   0   0   0   0   0   0 8   0   0   0
#   a:b   1     0     0     2     0   0   0   0   0   0 100 0   0   0   0
#   a:c   1     0     2     0     0   0   0   0   0 100   0 0   0   0   0
#   b:c   1     2     0     0     0   0   0   0 100   0   0 0   0   0   0
#   a:s   1     0     0     0     0   0   0   4   0   0   0 0   0   0   0
#   b:s   1     0     0     0     0   0   4   0   0   0   0 0   0   0   0
#   c:s   1     0     0     0     0   4   0   0   0   0   0 0   0   0   0
#   a:b:c 1     0     0     0    50   0   0   0   0   0   0 0   0   0   0
#   a:b:s 1     0     0     2     0   0   0   0   0   0   0 0   0   0   0
#   a:c:s 1     0     2     0     0   0   0   0   0   0   0 0   0   0   0
#   b:c:s 1     2     0     0     0   0   0   0   0   0   0 0   0   0   0
#   e     1     0     0     0     0   0   0   0   0   0   0 0   0   0   0

# get mean squares
(MSmod <- summary(aov(y ~ a*b*c*factor(sub), data=d2)))
#                   Df Sum Sq Mean Sq
# a                  1  429.6   429.6
# b                  1  329.5   329.5
# c                  1  165.4   165.4
# factor(sub)       49  439.5     9.0
# a:b                1  491.3   491.3
# a:c                1  305.5   305.5
# b:c                1  466.1   466.1
# a:factor(sub)     49  638.4    13.0
# b:factor(sub)     49  583.8    11.9
# c:factor(sub)     49  452.2     9.2
# a:b:c              1  392.8   392.8
# a:b:factor(sub)   49  484.5     9.9
# a:c:factor(sub)   49  358.9     7.3
# b:c:factor(sub)   49  561.8    11.5
# a:b:c:factor(sub) 49   42.9     0.9
MS <- MSmod[[1]][,"Mean Sq"]

# solve
ans <- solve(CT, MS)
cbind(rev(ans[c(grep("e",names(ans)),grep("s",names(ans)))])/
        c(1,2,2,2,4,4,4,1))
# s     1.0115549
# a:s   1.5191114
# b:s   1.3797937
# c:s   1.0441351
# a:b:s 1.1263331
# a:c:s 0.8060402
# b:c:s 1.3235126
# e     0.8765093
summary(mod4)
# Random effects:
#  Groups   Name        Variance Std.Dev.
#  sub      (Intercept) 1.0116   1.0058  
#  sub.1    A           1.5191   1.2325  
#  sub.2    B           1.3798   1.1746  
#  sub.3    C           1.0441   1.0218  
#  sub.4    A:B         1.1263   1.0613  
#  sub.5    A:C         0.8060   0.8978  
#  sub.6    B:C         1.3235   1.1504  
#  Residual             0.8765   0.9362  
# Number of obs: 400, groups:  sub, 50

ठीक है, अब हम मूल उदाहरण पर लौटेंगे। हम जिस एफ-अनुपात का मिलान करने की कोशिश कर रहे हैं वह हैं:

aovMod2 <- aov(y~a*b*c+Error(subject/(a*b*c)), data = d)
tab <- lapply(summary(aovMod2), function(x) x[[1]][1,2:4])
do.call(rbind, tab)
#                       Sum Sq Mean Sq F value
# Error: subject       13.4747  1.2250        
# Error: subject:a      1.4085  1.4085  1.2218
# Error: subject:b      3.1180  3.1180  5.5487
# Error: subject:c      6.3809  6.3809  5.2430
# Error: subject:a:b    1.5706  1.5706  2.6638
# Error: subject:a:c    1.0907  1.0907  1.5687
# Error: subject:b:c    1.4128  1.4128  2.3504
# Error: subject:a:b:c  0.1014  0.1014  0.1149

यहाँ हमारे दो मॉडल हैं:

mod5 <- lmer(y ~ a*b*c + (1|subject)+(1|a:subject)+(1|b:subject)+
  (1|c:subject)+(1|a:b:subject)+(1|a:c:subject)+(1|b:c:subject),
  data = d)
anova(mod5)
# Analysis of Variance Table
#       Df Sum Sq Mean Sq F value
# a      1 0.8830  0.8830  1.3405
# b      1 3.1180  3.1180  4.7334
# c      1 3.8062  3.8062  5.7781
# a:b    1 1.5706  1.5706  2.3844
# a:c    1 0.9620  0.9620  1.4604
# b:c    1 1.4128  1.4128  2.1447
# a:b:c  1 0.1014  0.1014  0.1539

mod6 <- lmer(y ~ A*B*C + (1|subject)+(0+A|subject)+(0+B|subject)+
  (0+C|subject)+(0+A:B|subject)+(0+A:C|subject)+
  (0+B:C|subject), data = d)
anova(mod6)
# Analysis of Variance Table
#       Df Sum Sq Mean Sq F value
# a      1 0.8830  0.8830  1.3405
# b      1 3.1180  3.1180  4.7334
# c      1 3.8062  3.8062  5.7781
# a:b    1 1.5706  1.5706  2.3844
# a:c    1 0.9620  0.9620  1.4604
# b:c    1 1.4128  1.4128  2.1447
# a:b:c  1 0.1014  0.1014  0.1539

logLik(mod5)
# 'log Lik.' -135.0351 (df=16)
logLik(mod6)
# 'log Lik.' -134.9191 (df=16)

इस मामले में दो मॉडल मूल रूप से एक ही परिणाम प्राप्त करते हैं, हालांकि दूसरी विधि में बहुत अधिक लॉग-लाइबिलिटी है। न ही विधि मैच aov()। लेकिन हम देखते हैं कि जब हम ऊपर दिए गए वेरिएशन घटकों के लिए हल करते हैं, तो जैसा कि हमने किया था, एनोवा प्रक्रिया का उपयोग करते हुए, जो वैरिएंट घटकों को गैर-नकारात्मक बनाने के लिए विवश नहीं करती है (लेकिन जिसका उपयोग केवल संतुलित डिजाइन में किया जा सकता है, जिसमें कोई निरंतर भविष्यवाणियां नहीं हैं और नहीं लापता डेटा; शास्त्रीय एनोवा धारणाएं)।

# prepare coefficient matrix
r <- 1 # number of replicates
s <- 12 # number of subjects
a <- 2 # number of levels of A
b <- 2 # number of levels of B
c <- 2 # number of levels of C
CT <- EMS(r ~ a*b*c*s, random="s")
expr <- strsplit(CT[CT != ""], split="")
expr <- unlist(lapply(expr, paste, collapse="*"))
expr <- sapply(expr, function(x) eval(parse(text=x)))
CT[CT != ""] <- expr
CT[CT == ""] <- 0
mode(CT) <- "numeric"
# residual variance and A*B*C*S variance are confounded in
# this design, so remove the A*B*C*S variance component
CT <- CT[-15,-2]

# get mean squares
MSmod <- summary(aov(y ~ a*b*c*subject, data=d))
MS <- MSmod[[1]][,"Mean Sq"]

# solve
ans <- solve(CT, MS)
cbind(rev(ans[c(grep("e",names(ans)),grep("s",names(ans)))])/
        c(1,2,2,2,4,4,4,1))
# s      0.04284033
# a:s    0.03381648
# b:s   -0.04004005
# c:s    0.04184887
# a:b:s -0.03657940
# a:c:s -0.02337501
# b:c:s -0.03514457
# e      0.88224787
summary(mod6)
# Random effects:
#  Groups    Name        Variance  Std.Dev. 
#  subject   (Intercept) 7.078e-02 2.660e-01
#  subject.1 A           6.176e-02 2.485e-01
#  subject.2 B           0.000e+00 0.000e+00
#  subject.3 C           6.979e-02 2.642e-01
#  subject.4 A:B         1.549e-16 1.245e-08
#  subject.5 A:C         4.566e-03 6.757e-02
#  subject.6 B:C         0.000e+00 0.000e+00
#  Residual              6.587e-01 8.116e-01
# Number of obs: 96, groups:  subject, 12

अब हम देख सकते हैं कि मूल उदाहरण के बारे में क्या विकृति है। सर्वश्रेष्ठ-फिटिंग मॉडल वह है जिसका अर्थ है कि यादृच्छिक यादृच्छिक घटकों में से कई नकारात्मक हैं। लेकिन lmer()(और अधिकांश अन्य मिश्रित मॉडल कार्यक्रम) विचरण घटकों के अनुमानों को गैर-नकारात्मक मानते हैं। यह आमतौर पर एक समझदार बाधा माना जाता है, क्योंकि वेरिएंस निश्चित रूप से कभी भी नकारात्मक नहीं हो सकते हैं। हालांकि, इस बाधा का एक परिणाम यह है कि मिश्रित मॉडल उन सटीक डेटासेट्स का प्रतिनिधित्व करने में असमर्थ हैं जो नकारात्मक इंट्राक्लास सहसंबंधों को दर्शाते हैं, अर्थात्, डेटासेट जहां एक ही क्लस्टर से अवलोकन कम हैं(बजाय अधिक से अधिक) औसत रूप से डेटासेट से औसतन निकाली गई टिप्पणियों की तरह, और फलस्वरूप जहां क्लस्टर क्लस्टर के भीतर क्लस्टर क्लस्टर के बीच पर्याप्त रूप से अधिक है। इस तरह के डेटासेट पूरी तरह से उचित डेटासेट होते हैं कि कोई कभी-कभार वास्तविक दुनिया (या गलती से अनुकरण!) में आ जाएगा, लेकिन उन्हें समझदारी से एक विचरण-घटक मॉडल द्वारा वर्णित नहीं किया जा सकता है, क्योंकि वे नकारात्मक विचरण घटकों को दर्शाते हैं। वे हालांकि ऐसे मॉडल द्वारा वर्णित "गैर-समझदार" हो सकते हैं, अगर सॉफ्टवेयर इसे अनुमति देगा। aov()अनुमति देता है। lmer()नहीं करता।


+1। पुन I am not sure why these two methods give different results, as again I think they are "in principle" equivalent, but maybe it is for some numerical/computational reasons: क्या आप शायद इसे अब (दो साल बाद) बेहतर समझ रहे हैं? मैंने यह पता लगाने की कोशिश की कि अंतर क्या है, लेकिन यह भी नहीं मिलता है ...
अमीबा

@amoeba मेरी वर्तमान सोच तब भी बहुत समान है: AFAIK, दो मॉडल सांख्यिकीय रूप से समतुल्य हैं (इस अर्थ में कि वे डेटा के बारे में समान भविष्यवाणियां करते हैं और समान मानक त्रुटियां हैं), भले ही यादृच्छिक प्रभाव पैरामीटर किए गए हों अलग ढंग से। मुझे लगता है कि मनाया मतभेद - जो केवल कभी-कभी होने लगते हैं - बस कम्प्यूटेशनल मुद्दों के कारण हैं। विशेष रूप से, मुझे संदेह है कि आप दो मॉडलों के एक ही उत्तर में लौटने तक ऑप्टिमाइज़र सेटिंग्स (जैसे अलग-अलग शुरुआती बिंदुओं या अधिक सख्त अभिसरण मानदंड का उपयोग करके) के साथ फील कर सकते हैं।
जेक वेस्टफॉल

आपके जवाब के लिए धन्यवाद। मैं असंबद्ध हूं: मैंने ऑप्टिमाइज़र सेटिंग्स के साथ फ़ील करने की कोशिश की और परिणामों में कुछ भी नहीं बदल सका; मेरी धारणा है कि दोनों मॉडल अच्छी तरह से रूपांतरित हैं। मैं पूछ सकता हूं कि यह कुछ पल में एक अलग सवाल है।
अमीबा

A(1|A:sub)(0+A|sub)-1(-1)/2=2दोनों विधियां एक पैरामीटर का अनुमान लगाती हैं, और मुझे अभी भी यकीन नहीं है कि वे असहमत क्यों हैं।
अमीबा

इस मुद्दे पर वापस जाना ... मैंने देखा कि दो-कारक मामले के लिए जहां दो lmerकॉल समान anova()आउटपुट उत्पन्न करते हैं , यादृच्छिक प्रभाव संस्करण अभी भी काफी भिन्न हैं: देखें VarCorr(mod1)और VarCorr(mod2)। मुझे समझ में नहीं आता कि ऐसा क्यों होता है; क्या आप? के लिए mod3और mod4, एक देख सकते हैं कि सात में से चार बाहर प्रसरण के लिए mod3वास्तव में कर रहे शून्य के बराबर (के लिए mod4सभी सात हैं गैर शून्य); यह "विलक्षणता" mod3शायद इसीलिए है कि एनोवा टेबल अलग हैं। इसके अलावा, आप अपने "पसंदीदा तरीके" का उपयोग कैसे करेंगे अगर aऔर bदो से अधिक स्तर थे?
अमीबा

1

कर रहे हैं a, b, cनिश्चित या यादृच्छिक प्रभाव? यदि वे तय हो गए हैं, तो आपका सिंटैक्स बस होगा

summary(aov(y~a*b*c+Error(subject), d))
Error: subject
          Df Sum Sq Mean Sq F value Pr(>F)
Residuals 11  13.47   1.225               

Error: Within
          Df Sum Sq Mean Sq F value  Pr(>F)   
a          1   1.41   1.408   1.730 0.19235   
b          1   3.12   3.118   3.829 0.05399 . 
c          1   6.38   6.381   7.836 0.00647 **
a:b        1   1.57   1.571   1.929 0.16889   
a:c        1   1.09   1.091   1.339 0.25072   
b:c        1   1.41   1.413   1.735 0.19168   
a:b:c      1   0.10   0.101   0.124 0.72518   
Residuals 77  62.70   0.814  

library(lmerTest)
anova(lmer(y ~ a*b*c+(1|subject), data=d))
Analysis of Variance Table of type 3  with  Satterthwaite 
approximation for degrees of freedom
      Sum Sq Mean Sq NumDF  DenDF F.value   Pr(>F)   
a     1.4085  1.4085     1 76.991  1.7297 0.192349   
b     3.1180  3.1180     1 76.991  3.8291 0.053995 . 
c     6.3809  6.3809     1 76.991  7.8363 0.006469 **
a:b   1.5706  1.5706     1 76.991  1.9289 0.168888   
a:c   1.0907  1.0907     1 76.991  1.3394 0.250716   
b:c   1.4128  1.4128     1 76.991  1.7350 0.191680   
a:b:c 0.1014  0.1014     1 76.991  0.1245 0.725183  

वे निश्चित प्रभाव हैं। हालाँकि, आप जिस ANOVA मॉडल को फिट करते हैं, वह मॉडल नहीं है जो कि शास्त्रीय दोहराया गया उपाय ANOVA मॉडल है, उदाहरण के लिए, यहाँ देखें । अपने और मेरे मामले में त्रुटि देखें।
हेनरिक

1
दरअसल वे ऐसा कैसे करते हैं यह गलत है। यदि आपके पास एक पूरी तरह से पार की गई फैक्ट्री बार-बार डिज़ाइन किए गए डिज़ाइन (या यादृच्छिक ब्लॉक फैक्टोरियल डिज़ाइन) है, तो आपको subjectसभी प्रभावों (यानी, Within) के लिए , केवल 1 त्रुटि शब्द प्राप्त करना चाहिए । प्रायोगिक डिजाइन देखें: किर्क द्वारा व्यवहार विज्ञान (2013) के लिए प्रक्रियाएं, अध्याय 10 (पृष्ठ 458) या मेरी पोस्ट यहाँ
Masato Nakazawa

आइए इस सवाल को फिलहाल टाल दें और मान लें कि मैंने जो मॉडल फिट किया है वह सही मॉडल होगा। आप इसका उपयोग करके कैसे फिट होंगे lmer? फिर भी मैं अपनी किर्क की प्रतिलिपि (केवल द्वितीय संस्करण) प्राप्त करूंगा और देखूंगा कि यह क्या कहती है।
हेनरिक

मैं यह जानने के लिए उत्सुक हूं कि आप कर्क के अध्याय के बारे में क्या सोचते हैं। मुझे लगता है कि 2 वें संस्करण में अध्याय संख्या। फरक है। इस बीच मैं विभिन्न lmerमॉडलों को फिट करने की कोशिश करता हूं । मॉडल फिट की जांच करने का सबसे अच्छा तरीका यह है lmerTestकि का उपयोग करते हुए उनके dfs की जाँच करें क्योंकि KR सन्निकटन आपको exactdfs देने वाला है और इसलिए p- मान।
मासाटो नकाज़ावा

1
मेरे पास कर्क का दूसरा संस्करण है, जहां मेरा मानना ​​है कि प्रासंगिक चर्चा पीपी 443-449 पर है, जिसमें दो-तरफा (तीन-तरफा नहीं) उदाहरण पर चर्चा की गई है। अपेक्षित औसत वर्ग, या तो ए और बी की संवेदनशीलता मानते हैं या नहीं, पी पर दिए गए हैं। 447. ए और बी को तय करना और विषय / ब्लॉक यादृच्छिक हैं, हम किर्क द्वारा "गैर-योज्य मॉडल" के तहत सूचीबद्ध अपेक्षित माध्य वर्गों से देख सकते हैं कि ए, बी और एबी के परीक्षण प्रत्येक में अलग-अलग त्रुटि शब्द हैं, अर्थात्। ब्लॉक / विषय के साथ प्रासंगिक बातचीत। एक ही सिद्धांत वर्तमान तीन तरह के उदाहरण तक फैला हुआ है।
जेक वेस्टफॉल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.