Üç yollu tekrarlanan ölçümler ANOVA'nın lme4 :: lmer eşdeğeri nedir?


11

Sorum, hangi modelin iki yönlü tekrarlanan ANOVA ölçümlerine karşılık geldiğini gösteren bu yanıta dayanmaktadır 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",]))

Şimdi sorum, bunu üç yönlü bir ANOVA örneğine nasıl genişleteceğimizle ilgili:

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 

Doğal uzatma ve bunların versiyonları ANOVA sonuçlarıyla eşleşmiyor:

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

Daha önce benzer bir sorunun sorulduğunu unutmayın . Ancak, (burada sağlanan) örnek veriler eksikti.


İki seviyeli modelinizin olmasını istemediğinizden emin misiniz y ~ a*b + (1 + a*b|subject), d[d$c == "1",]? Ya da belki bir şey eksik?
Rasmus Bååth

@ RasmusBååth İlerleyin ve uymaya çalışın lmer, rastgele etkiler artık tanımlanmadığından şikayet edecek. Başlangıçta bunun istediğim model olduğunu düşündüm, ama değil. 2 yönlü durum için önerdiğim lmer modelini standart ANOVA ile karşılaştırırsanız, F değerlerinin tam olarak eşleştiğini göreceksiniz . Yanıtta söylediğim gibi bağladım.
Henrik

3
Üç yönlü sorun için, ilk lmermodeli olan (ki dışlayan rastgele iki yönlü etkileşimler) yazdığı değil rastgele içeren (3 yolla RM-ANOVA eşdeğer olması bekleniyor, ama ikincisi yazdığın iki yönlü etkileşimler) olmalıdır. Neden bu modelde bile bir tutarsızlık olduğuna gelince, sorunun ne olduğu hakkında bir önsezim var, akşam yemeği almak için oyuncak veri kümesine biraz daha bakacağım.
Jake Westfall

Yanıtlar:


18

Sorunuzun doğrudan yanıtı, en son yazdığınız modelin,

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))

"Prensipte" doğru olduğuna inanıyorum, ancak gerçek uygulamada her zaman işe yaramayan garip bir parametrelendirme olmasına rağmen.

Bu modelden elde ettiğiniz çıktının çıktıyla neden tutarsız olduğuna gelince aov(), bence iki neden var.

  1. Basit simüle edilmiş veri kümeniz, en uygun modelin, lmer()(ve diğer birçok karışık model programına) uyan karışık modellerin izin vermediği negatif varyans bileşenlerini ima ettiği için patolojiktir .
  2. Patolojik olmayan bir veri kümesinde bile, yukarıda belirtildiği gibi modeli kurma şekliniz her zaman pratikte iyi görünmüyor, ancak itiraf etmeliyim ki nedenini gerçekten anlamıyorum. Bence de genelde garip, ama bu başka bir hikaye.

Öncelikle ilk iki yönlü ANOVA örneğinizde tercih ettiğim parametrelendirmeyi göstereyim. Veri kümenizin dyüklü olduğunu varsayın . Modeliniz (kukladan kontrast kodlarına geçtim):

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

Bu da çıktıyla eşleştiği için iyi çalıştı aov(). Tercih ettiğim model iki değişiklik içeriyor: R faktörü nesneleriyle (vakaların% 100'ünde yapılmasını öneririm) çalışmadığımız ve rastgele efektleri farklı bir şekilde belirlediğimiz için faktörleri manuel olarak kontrast kodlayan:

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)

İki yaklaşım, basit 2 yönlü problemde tamamen eşdeğerdir. Şimdi 3 yönlü bir soruna geçeceğiz. Daha önce vermiş olduğunuz örnek veri kümesinin patolojik olduğunu söylemiştim. Örnek veri kümenizi ele almadan önce yapmak istediğim, önce gerçek bir varyans bileşenleri modelinden (yani sıfır olmayan varyans bileşenlerinin gerçek modele yerleştirildiği) bir veri kümesi oluşturmaktır. İlk olarak, tercih edilen parametreleştirmenin önerdiğinden daha iyi işlediğini göstereceğim. Sonra yok varyans bileşenlerini tahmin başka bir yol gösterecektir değil onlar negatif olmayan olması gerektiğini empoze. Ardından, orijinal örnek veri kümesindeki sorunu görebilecek bir konumda olacağız.

Yeni veri setinin yapısı 50 ile aynı olacak, ancak 50 denek olacak:

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)
})

Eşleştirmek istediğimiz F oranları:

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

İşte iki modelimiz:

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)

Gördüğümüz gibi aov(), ilk yöntem en azından basketbol sahasında olmasına rağmen , sadece ikinci yöntem çıktıyla eşleşir . İkinci yöntem aynı zamanda daha yüksek bir log-olasılık olabilir. Bu iki yöntemin neden farklı sonuçlar verdiğinden emin değilim, çünkü yine "prensipte" eşdeğer olduklarını düşünüyorum, ama belki de bazı sayısal / hesaplama nedenlerinden kaynaklanıyor. Ya da belki yanılıyorum ve prensipte bile eşdeğer değiller.

Şimdi geleneksel ANOVA fikirlerine dayanan varyans bileşenlerini tahmin etmenin başka bir yolunu göstereceğim. Temel olarak tasarımınız için beklenen ortalama kare denklemlerini alacağız, ortalama karelerin gözlenen değerlerinin yerine geçeceğiz ve varyans bileşenleri için çözeceğiz. Beklenen ortalama kareleri elde etmek için birkaç yıl önce yazdığım ve BURADAEMS() belgelenen bir R fonksiyonu kullanacağız . Aşağıda işlevin zaten yüklü olduğunu varsayıyorum.

# 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

Tamam, şimdi orijinal örneğe döneceğiz. Eşleştirmeye çalıştığımız F oranları:

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

İşte iki modelimiz:

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)

Bu durumda iki model temel olarak aynı sonuçları verir, ancak ikinci yöntemin çok daha yüksek bir log-olasılık olasılığı vardır. Her iki yöntem de eşleşmez aov(). Ancak, varyans bileşenlerini negatif olmayacak şekilde sınırlamayan ANOVA prosedürünü kullanarak, yukarıda yaptığımız gibi varyans bileşenleri için çözdüğümüzde ne elde ettiğimize bakalım (ancak sadece sürekli tahmincisi olmayan ve eksik veriler; klasik ANOVA varsayımları).

# 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

Şimdi orijinal örnek hakkında patolojik olanı görebiliriz. En uygun model, rastgele varyans bileşenlerinin çoğunun negatif olduğunu ima eden modeldir. Ancak lmer()(ve diğer birçok karma model program) varyans bileşenlerinin tahminlerinin negatif olmamasını kısıtlar. Bu genellikle mantıklı bir kısıt olarak kabul edilir, çünkü varyanslar hiç bir zaman gerçekten olumsuz olamaz. Bununla birlikte, bu kısıtlamanın bir sonucu, karışık modellerin negatif sınıf içi korelasyonları olan veri kümelerini, yani aynı kümeden gözlemlerin daha az olduğu veri kümelerini doğru bir şekilde temsil edememesidir.veri kümesinden rastgele çizilen gözlemlerden ortalama olarak (daha fazla değil) ve sonuç olarak küme içi varyansın küme arası varyansı büyük ölçüde aştığı yerlerde. Bu tür veri kümeleri, bazen gerçek dünyada karşılaşacakları (veya yanlışlıkla simüle eden!) Mükemmel makul veri kümeleridir, ancak negatif varyans bileşenleri ima ettikleri için bir varyans bileşenleri modeli tarafından makul bir şekilde tanımlanamazlar. Bununla birlikte, eğer yazılım izin verirse , bu modeller tarafından "mantıksız" olarak tarif edilebilirler . aov()izin verir. lmer()değil.


+1. Yeniden 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- belki (iki yıl sonra) şimdi daha iyi bu anlıyorsunuz? Aradaki farkın ne olduğunu anlamaya çalıştım, ama ikisini de alma ...
amoeba

@amoeba Şu anki düşüncem o zamankiyle hemen hemen aynı: AFAIK, iki model istatistiksel olarak eşdeğerdir (veriler hakkında aynı tahminleri yapmaları ve aynı standart hataları ima etmeleri anlamında), rastgele etkiler parametreleştirilmiş olsa bile farklı. Bence gözlemlenen farklılıklar - sadece bazen gerçekleşiyor gibi - sadece hesaplama sorunlarından kaynaklanıyor. Özellikle, iki model tamamen aynı cevabı döndürene kadar optimize edici ayarlarıyla (çeşitli başlangıç ​​noktaları veya daha katı yakınsama kriterleri kullanmak gibi) uğraşabileceğinizden şüpheleniyorum.
Jake Westfall

Cevabın için teşekkürler. İkna olmadım: Optimize edici ayarlarıyla uğraşmaya çalıştım ve sonuçlarda hiçbir şeyi değiştiremedim; benim izlenimim, her iki modelin de yakınsak olduğu. Bir an için bunun ayrı bir soru olduğunu sorabilirim.
amip

Bu konuyu araştırmaya devam ediyorum ve aşağıdakileri anladım: tekrarlanan ölçüm faktörleri ikiden fazla seviyeye ulaştığında, bu iki yöntem tamamen farklılaşır! Eğer seviyeleri varsa A, sadece bir varyans parametresini tahmin ederken, varyans parametrelerini ve aralarındaki korelasyonlarını tahmin eder. Anladığım kadarıyla klasik ANOVA sadece bir varyans parametresi tahmin ediyor ve bu nedenle ikinci yönteme değil, birinci yönteme eşdeğer olması gerekiyor. Sağ? Ancak her iki yöntem de bir parametreyi tahmin eder ve neden katılmadıklarından hala emin değilim. k - 1 k ( k - 1 ) / 2 k = 2k(1|A:sub)(0+A|sub)k1k(k1)/2k=2
amip

Bu konuya geri dönersek ... İki lmerçağrının aynı anova()çıktı ürettiği iki faktörlü durum için rastgele etki varyanslarının yine de oldukça farklı olduğunu fark ettim : bkz. VarCorr(mod1)Ve VarCorr(mod2). Bunun neden olduğunu tam olarak anlamıyorum; yapıyor musun? İçin mod3ve mod4bir için yedi dört takım sapmalar olduğunu görebilirsiniz mod3aslında sıfıra eşit (için mod4tüm yedi olan sıfır olmayan); bu "tekillik" mod3muhtemelen anova tablolarının farklı olmasının nedenidir. Bunun dışında, ikiden fazla seviyesi varsa ave "tercih ettiğiniz yolu" nasıl kullanırsınız b?
amip

1

Are a, b, csabit veya rasgele etkiler? Düzeltildiyse, sözdiziminiz

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  

Bunlar sabit etkilerdir. Ancak, uygun ANOVA modeli klasik tekrarlanan ölçümler ANOVA modeli gibi görünüyor model değildir, örneğin bkz burada . Sizin ve benim durumumdaki Hata katmanlarına bakın.
Henrik

1
Aslında bunu nasıl yapıyorlar? Tamamen çapraz faktöriyel tekrarlanan ölçüm tasarımınız (veya rastgele blok faktöriyel tasarımınız) varsa subject, tüm efektler (örneğin, Within) dışında sadece 1 hata terimi almalısınız . Deneysel Tasarım: Davranış Bilimleri için Prosedürler (2013), Kirk, bölüm 10 (s.458) veya buradaki
Masato Nakazawa

Şimdilik bu soruyu gözden kaçalım ve taktığım modelin doğru model olacağını varsayalım. Bunu kullanarak nasıl sığarsınız lmer? Yine de Kirk'ün kopyasını alacağım (sadece 2. baskı) ve ne dediğini göreceğim.
Henrik

Kirk'ün bölümü hakkında ne düşündüğünüzü merak ediyorum. Sanırım 2. baskıdaki bölüm numarası. farklı. Bu arada farklı lmermodellere uymaya çalışacağım . lmerTestKR exactuyumunun size dfs ve dolayısıyla p-değerleri vermesi gerektiğinden , model uyumunu kontrol etmenin en iyi yolu dfs'lerini kullanarak kontrol etmektir .
Masato Nakazawa

1
Kirk'ün 2. baskısına sahibim, burada ilgili tartışmanın iki yönlü (üç yönlü değil) bir örneği tartışan sayfa 443-449'da olduğuna inanıyorum. A ve B'nin katkısı olduğu varsayılarak varsayılamaz, beklenen ortalama kareler p. 447. A ve B'nin sabit olduğunu ve deneklerin / blokların rastgele olduğunu varsayarsak, Kirk tarafından listelenen beklenen ortalama karelerden, A, B ve AB testlerinin her birinin farklı hata terimleri içerdiğini, yani, blok / konu ile ilgili etkileşimler. Aynı ilke, mevcut üç yollu örnek için de geçerlidir.
Jake Westfall
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.