15

我一直在使用var.testbartlett.test检查基本的方差分析假设,其中包括同质性(同质性,方差相等)。单向方差分析的过程非常简单:

bartlett.test(x ~ g)  # where x is numeric, and g is a factor
var.test(x ~ g)

但是,对于 2x2 表,即双向 ANOVA,我想做这样的事情:

bartlett.test(x ~ c(g1, g2))  # or with list; see latter:
var.test(x ~ list(g1, g2))

当然,ANOVA 假设可以用图形程序检查,但是“算术选项”呢?这完全可以管理吗?您如何在双向 ANOVA 中测试同方差性?

4

3 回答 3

18

假设检验是用于评估模型假设有效性的错误工具。如果样本量很小,即使方差差异很大,您也没有能力检测到任何方差差异。如果你有一个大样本量,你甚至可以检测到来自等方差的最微不足道的偏差,所以你几乎总是会拒绝零。模拟研究表明,模型假设的初步测试会导致不可靠的 I 类错误。

查看所有单元格的残差是一个很好的指标,或者如果您的数据正常,您可以使用具有/不具有等方差的 AIC 或 BIC 作为选择程序。

如果您认为存在不相等的方差,请放弃假设,例如:

library(car)
model.lm <- lm(formula=x ~ g1 + g2 + g1*g2,data=dat,na.action=na.omit)
Anova(model.lm,type='II',white.adjust='hc3')

使用稳健方法(异方差一致协方差矩阵)不会失去太多权力,因此如果有疑问,请使用稳健。

于 2010-05-29T06:03:08.183 回答
7

您可以使用Fligner–Killeen方差齐性检验来检验异方差性。假设您的模型类似于

model<-aov(gain~diet*supplement)

fligner.test(gain~diet*supplement)

        Fligner-Killeen test of homogeneity of variances

data:  gain by diet by supplement 
Fligner-Killeen:med chi-squared = 2.0236, df = 2, p-value = 0.3636

您可以使用bartlett.test(但这更像是对非正态性的测试,而不是对方差相等性的测试)

bartlett.test(gain~diet*supplement)
        Bartlett test of homogeneity of variances

data:  gain by diet by supplement 
Bartlett's K-squared = 2.2513, df = 2, p-value = 0.3244

此外,您可以Levene test在单向和双向 ANOVA 中执行相等的组方差。Levene 测试的实现可以在包car(链接已修复)、s20xlawstat 中找到

levene.test(gain~diet*supplement)  # car package version

Levene's Test for Homogeneity of Variance
      Df F value Pr(>F)
group 11  1.1034 0.3866
      36 
于 2010-05-29T09:10:39.777 回答
5

为了bartlett.test

bartlett.test(split(x,list(g1,g2)))

var.test不适用,因为它仅在有两个组时才有效。

于 2010-05-29T05:28:35.180 回答