双因素方差分析的同方差性检验

15

我一直在使用var.testbartlett.test来检查基本的ANOVA假设,其中包括同方差性(方差齐性)。对于单因素方差分析,该过程非常简单:

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

但是,对于2x2表格,即双因素方差分析,我想要做类似这样的事情:

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

当然,ANOVA的假设可以通过图形程序进行检查,但是对于"算术选项"呢?这个有什么办法吗?在双因素方差分析中如何测试同方差性?


我从标题上以为这个问题完全是虚构的。 - sblom
“made up”是什么意思?=)Homoscedascity(球形性,方差的同质性)是基本ANOVA假设之一,要求每个子样本都服从正态分布。Two-Way表示具有两个独立/因子变量的ANOVA。我不小心发布了两次这个主题,所以第一篇帖子被关闭了...也许因为这个你认为这是虚构的/某种垃圾邮件之类的... =) - aL3xa
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')

使用鲁棒方法(异方差一致协方差矩阵)可以避免损失太多的功率,因此如果不确定就使用鲁棒方法。


非常全面、简洁、技巧娴熟的回答!!!无论如何,我都会检查残差...但是这个答案在我对统计学的教条理解中带来了一股清新的空气!非常感谢Ian! - aL3xa

7
你可以使用Fligner-Killeen test来测试异方差性,这是一种等方差性检验方法。假设你的模型大致如下:
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检验以测试组内变量的平等性。 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 

4
当存在两个因素时,我认为使用bartlett.test的方式不正确。我相信它只使用第一个变量。例如,如果你运行bartlett.test(total_bill ~ sex*time, data=tips)bartlett.test(total_bill ~ sex, data=tips),你会得到相同的p值和df=1。我认为你需要使用类似于bartlett.test(total_bill ~ interaction(time,sex), data=tips)这样的东西。在这种情况下,df=3。 - wch

6
对于bartlett.test
bartlett.test(split(x,list(g1,g2)))

var.test 不适用于仅有两个组的情况。


我简直不敢相信它是如此简单!O_o - aL3xa

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接