Anova

lmerTest::anova 中的自由度是否正確?它們與 RM-ANOVA 非常不同

  • February 3, 2014

我正在分析 R 中的反應時間實驗的結果。

我運行了重複測量方差分析(1 個具有 2 個水平的受試者內因素和 1 個具有 2 個水平的受試者間因素)。我運行了一個類似的線性混合模型,我想用 ANOVA 表的形式總結 lmer 結果lmerTest::anova

不要誤會我的意思:我沒想到會得到相同的結果,但是我不確定lmerTest::anova結果的自由度。在我看來,它更像是反映了一個在主題級別上沒有聚合的方差分析。

我知道在混合效應模型中計算自由度很棘手,但在更新的主題(包)lmerTest::anova中被提及為一種可能的解決方案。?pvalues``lme4

這個計算正確嗎?結果lmerTest::anova是否正確反映了指定的模型?

**更新:**我使個體差異更大。的自由度lmerTest::anova與簡單的方差分析有很大不同,但我仍然不確定,為什麼它們對於主體內因素/交互作用如此之大。

# mini example with ANT dataset from ez package
library(ez); library(lme4); library(lmerTest)

# repeated measures ANOVA with ez package
data(ANT)
ANT.2 <- subset(ANT, !error)
# update: make individual differences larger
baseline.shift <- rnorm(length(unique(ANT.2$subnum)), 0, 50)
ANT.2$rt <- ANT.2$rt + baseline.shift[as.numeric(ANT.2$subnum)]

anova.ez <- ezANOVA(data = ANT.2, dv = .(rt), wid = .(subnum), 
 within = .(direction), between = .(group))
anova.ez

# similarly with lmer and lmerTest::anova
model <- lmer(rt ~ group * direction + (1 | subnum), data = ANT.2)
lmerTest::anova(model)

# simple ANOVA on all available data
m <- lm(rt ~ group * direction, data = ANT.2)
anova(m)

上面代碼的結果[更新]:

方差分析

$方差分析

          Effect DFn DFd         F          p p<.05          ges
2           group   1  18 2.6854464 0.11862957       0.1294475137
3       direction   1  18 0.9160571 0.35119193       0.0001690471
4 group:direction   1  18 4.9169156 0.03970473     * 0.0009066868

lmerTest::anova(模型)

Analysis of Variance Table of type 3  with  Satterthwaite 
approximation for degrees of freedom
               Df Sum Sq Mean Sq F value Denom Pr(>F)
group            1  13293   13293  2.6830    18 0.1188
direction        1   1946    1946  0.3935  5169 0.5305
group:direction  1  11563   11563  2.3321  5169 0.1268

方差分析(米)

Analysis of Variance Table

Response: rt
                 Df   Sum Sq Mean Sq  F value Pr(>F)    
group              1  1791568 1791568 242.3094 <2e-16 ***
direction          1      728     728   0.0985 0.7537    
group:direction    1    12024   12024   1.6262 0.2023    
Residuals       5187 38351225    7394                    
---
Signif. codes:  0***0.001**0.01*0.05 ‘.’ 0.1 ‘ ’ 1

認為lmerTest是正確的,ezanova在這種情況下是錯誤的。

  • 結果lmerTest符合我的直覺/理解
  • lmerTest(Satterthwaite 和 Kenward-Roger)中的兩種不同的計算同意
  • 他們也同意nlme::lme
  • 當我運行它時,ezanova會給出一個警告,我不完全理解,但不應忽視它……

重新運行示例:

library(ez); library(lmerTest); library(nlme)
data(ANT)
ANT.2 <- subset(ANT, !error)
set.seed(101)  ## for reproducibility
baseline.shift <- rnorm(length(unique(ANT.2$subnum)), 0, 50)
ANT.2$rt <- ANT.2$rt + baseline.shift[as.numeric(ANT.2$subnum)]

弄清楚實驗設計

with(ANT.2,table(subnum,group,direction))

所以看起來個體subnum(個人

(anova.ez <- ezANOVA(data = ANT.2, dv = .(rt), wid = .(subnum), 
   within = .(direction), between = .(group)))
## $ANOVA
## Effect DFn DFd F p p<.05 ges
## 2 group 1 18 2.4290721 0.13651174 0.1183150147
## 3 direction 1 18 0.9160571 0.35119193 0.0002852171
## 4 group:direction 1 18 4.9169156 0.03970473 * 0.0015289914

在這裡,我得到Warning: collapsing data to cell means. *IF* the requested effects are a subset of the full design, you must use the "within_full" argument, else results may be inaccurate. 分母 DF 看起來有點古怪(都等於 18):我認為方向和 group:direction 應該更大,可以獨立測試(但如果添加(direction|subnum)到模型中會更小)?

# similarly with lmer and lmerTest::anova
model <- lmer(rt ~ group * direction + (1 | subnum), data = ANT.2)
lmerTest::anova(model)
## Df Sum Sq Mean Sq F value Denom Pr(>F)
## group 1 12065.7 12065.7 2.4310 18 0.1364
## direction 1 1952.2 1952.2 0.3948 5169 0.5298
## group:direction 1 11552.2 11552.2 2.3299 5169 0.1270

這裡的Df列指的是分子df,Denom(倒數第二個)給出了估計的分母df;他們同意古典直覺。更重要的是,對於 F 值,我們也得到了不同的答案……

我們還可以用 Kenward-Roger 仔細檢查(非常慢,因為它涉及多次重新擬合模型)

lmerTest::anova(model,ddf="Kenward-Roger")

結果是相同的。

對於這個例子lme(來自nlme包)實際上很好地猜測了適當的分母 df(F 值和 p 值略有不同):

model3 <- lme(rt ~ group * direction, random=~1|subnum, data = ANT.2)
anova(model3)[-1,]
## numDF denDF F-value p-value
## group 1 18 2.4334314 0.1362
## direction 1 5169 0.3937316 0.5304
## group:direction 1 5169 2.3298847 0.1270


direction如果我適合和subnumdf之間的交互direction並且group:direction更小(我原以為他們會是 18 歲,但也許我弄錯了):

model2 <- lmer(rt ~ group * direction + (direction | subnum), data = ANT.2)
lmerTest::anova(model2)
## Df Sum Sq Mean Sq F value Denom Pr(>F)
## group 1 20334.7 20334.7 2.4302 17.995 0.1364
## direction 1 1804.3 1804.3 0.3649 124.784 0.5469
## group:direction 1 10616.6 10616.6 2.1418 124.784 0.1459

引用自:https://stats.stackexchange.com/questions/84268

comments powered by Disqus