实际上,当数据与假设不完全一致时,人们如何处理方差分析?


19

这不是一个严格的统计问题-我可以阅读所有有关ANOVA假设的教科书-我试图弄清楚实际工作的分析师如何处理不完全符合假设的数据。我在该网站上遇到了很多问题,寻找答案,并且不断寻找有关何时不使用ANOVA(在抽象的,理想化的数学上下文中)或如何完成我在R中描述的某些事情的文章。我实际上是在试图弄清人们实际做出的决定以及原因。

我正在对来自四组树(实际树,而非统计树)中的分组数据进行分析。我已经为每棵树获取了大约35个属性的数据,并且正在研究每个属性以确定这些属性上的组是否存在显着差异。但是,在某些情况下,由于方差不相等,因此违反了ANOVA假设(根据Levene检验,使用alpha = .05)。

正如我所看到的,我的选择是:1.对数据进行功率变换,看看它是否会改变Levene p值。2.使用非参数测试,例如Wilcoxon(如果是,是哪个?)。3.对方差分析结果进行某种校正,例如Bonferroni(我实际上不确定是否存在这样的东西吗?)。我尝试了前两个选项,但结果略有不同-在某些情况下,一种方法很重要,而另一种则没有。我担心会掉入p值钓鱼陷阱,并且正在寻找可以帮助我确定使用哪种方法的建议。

我还读过一些东西,表明除非方差和方差相互关联(即,两者都一起增加),否则异方差对ANOVA来说并不是真正的大问题,因此,除非我看到Levene的结果,否则我可以忽略它这样的模式?如果是这样,是否有测试方法?

最后,我应该补充一点,我正在做此分析,以便在同行评审的期刊上发表,因此,无论我采用哪种方法,都必须通过评审员的评审。因此,如果任何人都可以提供指向相似的已发布示例的链接,那就太好了。


3
不管您是否使用R,在这里阅读我的回答都可以使您受益:异方差数据的单向方差分析的替代方法,该方法讨论了其中的一些问题。
gung-恢复莫妮卡

Answers:


18

我试图弄清楚实际工作的分析师如何处理不完全符合假设的数据。

这取决于我的需求,违反了哪些假设,以何种方式,有多严重,对推理有多大影响,有时还取决于样本量。

我正在对来自四组的树中的分组数据进行分析。我已经为每棵树获取了大约35个属性的数据,并且正在研究每个属性以确定这些属性上的组是否存在显着差异。但是,在某些情况下,由于方差不相等,因此违反了ANOVA假设(根据Levene检验,使用alpha = .05)。

1)如果样本大小相等,则不会有太大问题。如果n相等,则方差分析对于不同的方差非常(级别)稳健。

2)在确定是否假设方差相等之前,先进行方差均等测试,这是多项研究所建议的。如果您真的怀疑它们将接近相等,最好只是假设它们是不相等的。

一些参考:

Zimmerman,DW(2004),
“关于方差相等性的初步检验的说明”。
br。J.数学 统计 Psychol。五月 ; 57(Pt 1):173-81。
http://www.ncbi.nlm.nih.gov/pubmed/15171807

Henrik 在此提供了三个参考

3)重要的是影响大小,而不是样本是否足够大以至于告诉您它们明显不同。因此,在较大的样本中,方差的小差异在Levene的检验中将显示为非常显着,但对其影响基本上没有影响。如果样本很大,且影响大小(方差之比或方差之差)与应有的值非常接近,则p值无意义。(另一方面,在小样本中,较大的p值不太舒适。这两种方法都无法回答正确的问题。)

请注意,对ANOVA中的残留标准误差和df的估计值进行了Welch-Satterthwaite类型调整,就像在两个样本的t检验中一样。

  1. 使用像Wilcoxon这样的非参数测试(如果是,是哪个?)。

如果您对位置偏移的替代方法感兴趣,那么您仍将假设恒定的价差。如果您对更通用的替代方法感兴趣,则可以考虑使用它。相当于Wilcoxon检验的k样本是Kruskal-Wallis检验。

对方差分析结果进行某种校正

请参阅我上面关于考虑韦尔奇-萨特斯韦特的建议,这是一种“矫正”。

(或者,您可以将ANOVA转换为成对的Welch型t检验,在这种情况下,您可能希望查看Bonferroni或类似方法)

我还读过一些东西,表明异方差对方差分析来说并不是真正的大问题,除非均值和方差相互关联(即它们都一起增加)

您必须引用类似的内容。用t检验看了很多情况后,我认为事实并非如此,所以我想看看他们为什么这么认为;也许情况在某种程度上受到限制。如果是这样的话,那将是很好的,因为通常情况下,广义线性模型可以帮助解决这种情况。

最后,我应该补充一点,我正在做此分析,以便在同行评审的期刊上发表,因此,无论我采用哪种方法,都必须通过评审员的评审。

很难预测会满足您的评论者的需求。我们大多数人都不与树木打交道。


12

在简单的线性模型(例如,单向或双向方差分析模型)中处理异方差实际上并不是很困难。

方差分析的稳健性

首先,正如其他人所指出的那样,方差分析对于偏离均等假设的偏差具有惊人的鲁棒性,尤其是当您具有近似平衡的数据(每组中的观察数相等)时。另一方面,对等方差的初步检验不是(尽管Levene的检验比教科书中通常讲授的F检验要好得多)。正如George Box所说:

对差异进行初步测试就像在划船中出海,以查明条件是否足够平静,以使远洋客轮离开港口!

尽管方差分析非常强大,但考虑到异方差性非常容易,没有理由不这样做。

非参数测试

如果您真的对均值差异感兴趣,那么非参数检验(例如Kruskal–Wallis检验)实际上没有任何用处。他们确实测试了组之间的差异,但通常测试均值的差异。

示例数据

让我们生成一个简单的数据示例,在该示例中,我们希望使用ANOVA,但是假设均方差不成立。

set.seed(1232)
pop = data.frame(group=c("A","B","C"),
                 mean=c(1,2,5),
                 sd=c(1,3,4))
d = do.call(rbind, rep(list(pop),13))
d$x = rnorm(nrow(d), d$mean, d$sd)

我们分为三组,均值和方差都有(明显)差异:

stripchart(x ~ group, data=d)

带状图显示示例数据。

方差分析

毫不奇怪,普通的方差分析可以很好地处理此问题:

> mod.aov = aov(x ~ group, data=d)
> summary(mod.aov)
            Df Sum Sq Mean Sq F value  Pr(>F)    
group        2  199.4   99.69   13.01 5.6e-05 ***
Residuals   36  275.9    7.66                    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

那么,哪些群体不同?让我们使用Tukey的HSD方法:

> TukeyHSD(mod.aov)
  Tukey multiple comparisons of means
    95% family-wise confidence level

Fit: aov(formula = x ~ group, data = d)

$group
        diff        lwr      upr     p adj
B-A 1.736692 -0.9173128 4.390698 0.2589215
C-A 5.422838  2.7688327 8.076843 0.0000447
C-B 3.686146  1.0321403 6.340151 0.0046867

随着P的0.26 -值,我们不能要求A组和B即使我们之间的任何差别(在方法)并没有考虑到我们做了三个比较,我们就不会得到一个较低的P -值(P  = 0.12):

> summary.lm(mod.aov)
[…]
Coefficients:
            Estimate Std. Error t value  Pr(>|t|)    
(Intercept)   0.5098     0.7678   0.664     0.511    
groupB        1.7367     1.0858   1.599     0.118    
groupC        5.4228     1.0858   4.994 0.0000153 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 2.768 on 36 degrees of freedom

这是为什么?根据剧情,还有就是一个很明显的区别。原因是,ANOVA在每个组中均假设为均方差,并且估计的通用标准偏差为2.77(在summary.lm表中显示为“残差标准误差” ,也可以通过采用残差均方根的平方根(7.66)来得出)在ANOVA表中)。

但是A组的(人口)标准偏差为1,而2.77的高估使其(不必要)难以获得具有统计意义的结果,即,我们进行了(过)低功效的测试。

方差不等的“方差分析”

那么,如何拟合一个适当的模型,其中要考虑方差的差异?在R中很简单:

> oneway.test(x ~ group, data=d, var.equal=FALSE)
    One-way analysis of means (not assuming equal variances)

data:  x and group
F = 12.7127, num df = 2.000, denom df = 19.055, p-value = 0.0003107

因此,如果您想在R中运行简单的单向“ ANOVA”而不假设均等方差,请使用此函数。它基本上是(Welch)t.test()对两个方差不相等的样本的扩展。

不幸的是,它不工作TukeyHSD()(或大多数其他功能使用的aov对象),所以即使我们可以肯定存在群体差异,我们不知道在那里他们。

建模异方差

最好的解决方案是显式建模方差。在R中非常简单:

> library(nlme)
> mod.gls = gls(x ~ group, data=d,
                weights=varIdent(form= ~ 1 | group))
> anova(mod.gls)
Denom. DF: 36 
            numDF  F-value p-value
(Intercept)     1 16.57316  0.0002
group           2 13.15743  0.0001

当然,仍然存在重大差异。但是现在,A组和B组之间的差异也变得静态显着(P  = 0.025):

> summary(mod.gls)
Generalized least squares fit by REML
  Model: x ~ group
  […]
Variance function:
 Structure: Different standard
            deviations per stratum
 Formula: ~1 | group 
 Parameter estimates:
       A        B        C 
1.000000 2.444532 3.913382 

Coefficients:
               Value Std.Error  t-value p-value
(Intercept) 0.509768 0.2816667 1.809829  0.0787
groupB      1.736692 0.7439273 2.334492  0.0253
groupC      5.422838 1.1376880 4.766542  0.0000
[…]
Residual standard error: 1.015564 
Degrees of freedom: 39 total; 36 residual

因此,使用适当的模型会有所帮助!还要注意,我们获得了(相对)标准偏差的估计值。A组的估计标准偏差可以在结果的底部1.02处找到。B组的估计标准偏差是此值的2.44倍,即2.48,C组的估计标准偏差类似地为3.97(键入intervals(mod.gls)以获得B和C组的相对标准偏差的置信区间的类型)。

更正多次测试

但是,我们确实应该纠正多次测试。使用“ multcomp”库很容易。不幸的是,它没有对'gls'对象的内置支持,因此我们必须首先添加一些辅助函数:

model.matrix.gls <- function(object, ...)
    model.matrix(terms(object), data = getData(object), ...)
model.frame.gls <- function(object, ...)
  model.frame(formula(object), data = getData(object), ...)
terms.gls <- function(object, ...)
  terms(model.frame(object),...)

现在开始工作:

> library(multcomp)
> mod.gls.mc = glht(mod.gls, linfct = mcp(group = "Tukey"))
> summary(mod.gls.mc)
[…]
Linear Hypotheses:
           Estimate Std. Error z value Pr(>|z|)    
B - A == 0   1.7367     0.7439   2.334   0.0480 *  
C - A == 0   5.4228     1.1377   4.767   <0.001 ***
C - B == 0   3.6861     1.2996   2.836   0.0118 *  

A组与B组之间仍存在统计学上的显着差异!☺我们甚至可以得到(同时)组均值之间差异的置信区间:

> confint(mod.gls.mc)
[…]
Linear Hypotheses:
           Estimate lwr     upr    
B - A == 0 1.73669  0.01014 3.46324
C - A == 0 5.42284  2.78242 8.06325
C - B == 0 3.68615  0.66984 6.70245

使用近似(此处准确)的模型,我们可以相信这些结果!

请注意,对于这个简单的示例,C组的数据实际上并没有添加有关A组和B组之间差异的任何信息,因为我们为每个组建模了均值和标准差。我们可以只使用成对的t检验来校正多个比较:

> pairwise.t.test(d$x, d$group, pool.sd=FALSE)
    Pairwise comparisons using t tests with non-pooled SD 

data:  d$x and d$group 

  A       B      
B 0.03301 -      
C 0.00098 0.02032

P value adjustment method: holm 

但是,对于更复杂的模型(例如双向模型或具有许多预测变量的线性模型),使用GLS(广义最小二乘)并对方差函数进行显式建模是最佳解决方案。

并且方差函数不必在每个组中简单地是一个不同的常数。我们可以对其施加结构。例如,我们可以将方差建模为每组均值的幂(因此仅需要估计一个参数,即指数),或者建模为模型中一个预测变量的对数。使用GLS(和gls()R)非常简单。

广义最小二乘法是恕我直言,是一种未被充分利用的统计建模技术。不必担心与模型假设的偏差,而对那些偏差建模


1
谢谢您的回答!对于不等方差方差分析(Welch ANOVA),我不了解oneway.test()和gls()的结果。oneway.test()的p值为p值= 0.0003107。但是gls(x〜组,data = d,weights = varIdent(form =〜1 | group))的p值为0.0001。为什么这两个结果不同?
WCMC

2
人们越来越关注针对多个测试的校正,我认为报告未校正的p值以及您进行的比较次数更加透明。特别是因为在R中测试它们时,您可能对每个成对比较都不感兴趣,因此将通过考虑无用的比较来进行校正。
Nakx

7
  1. 实际上,您的数据可能进行了某些转换,从而产生了可接受的正态分布。当然,现在您的推断是关于转换后的数据,而不是未转换后的数据。

  2. 假设您正在谈论单向方差分析,则Kruskal-Wallis检验是单向方差分析的适当非参数模拟。尽管还有其他测试,例如Conover-Iman检验(严格比拒绝后的Dunn检验更强大),但Dunn检验(不是花园品种等级总和检验)可能是最适合事后成对多重比较的非参数检验。(kruskal-Wallis),以及Dwass-Steele-Crichtlow-Fligner测试。

  3. α

方差分析基于组内差异和组间差异的比率。在这种情况下,我并不完全确定您所说的异方差性是什么意思,但是,如果您表示组之间的不平等方差,在我看来,这从根本上打破了检验零假设的逻辑。

一个简单的Google Scholar查询“ Dunn测验”以及您学科的一般术语应返回大量已发布的示例。


参考文献

Conover,WJ和Iman,RL(1979)。关于多重比较程序。技术报告LA-7677-MS,洛斯阿拉莫斯科学实验室。

Crichtlow,DE和Fligner,MA(1991)。单方差分析中的无分布多重比较统计学中的通信-理论与方法,20(1):127。

OJ邓恩(1964)。使用秩和进行多重比较技术计量学,6(3):241–252。


2
好的,谢谢您的回答,但是我对您的意思尚不完全清楚。至于“异方差性”,我以为我使用的是普通意义上的单词:“如果子群体的变异性与其他变异性不同,则随机变量的集合就是异方差性的。在这里,“变异性”可以通过方差或统计散布的任何其他度量。”-维基百科。在我的数据中,亚组的方差不相等(根据Levene检验),因此我将其描述为异方差的。这样不好吗
Jas Max 2014年

1
我真正要讨论的是教科书统计数据与现实世界之间的差距。每本教科书都说“方差对于方差分析必须相等”,但当然绝不是。那么,我们是否在某个特定点任意中断并切换到其他测试-如果是这样,什么时候?在我的领域(植物生物学)中,大多数人只是使用训练有素的任何测试而没有过多考虑。我对此并不满意。对于那些讨论“实际”使用统计信息的书/网站,我会很喜欢任何建议,例如,何时以及为什么使用哪种测试。感谢Dunn的建议,这很有帮助。
Jas Max

2
嗯,方差相等的假设是总体方差而不是样本方差。您可以通过眼球测试或其他某种统计测试来推断总体方差相等。
亚历克西斯

1
如果不通过评估样本方差,您如何了解总体方差?我将Levene的检验p值解释为“假设总体方差相等,那么样本方差会相差这么大的几率”。如果我得到较低的p值,我将拒绝总体方差相等且不能使用ANOVA的假设。Kruskal-Wallace似乎是一个不错的选择,但是最好是对数据进行转换以满足ANOVA假设,如果可以,为什么?
Jas Max

1
此外,Levene的检验p <.05是否适合该决策?那么O'Brien's,Bartlett's ...这些测试的结果可能会有很大的不同,我真的不知道该使用哪个。所以我选择Levene,因为它似乎是最保守的。但这可能是过大的决定-也许是因为太快而无法放弃ANOVA,我正在切换到一种测试,该测试不必要地降低了我的分析的统计能力。
Jas Max

1

在我看来,您好像在做步伐并正在尽力而为,但担心您的努力将不足以使您的论文通过审稿人。非常现实的问题。我认为所有研究人员都在努力应对似乎时时处于临界点甚至坦率地违反假设的分析。毕竟,有数以百万计的文章评估了3组小老鼠的治疗效果,每组中有6-7只老鼠。如何知道这样的论文是否满足Anova的假设!

我审阅了大量论文,特别是在心血管病理生理学领域,实际上我从未在阅读过的文章中百分百确定我是否可以信任这些数据。但是对于我作为审稿人来说,我实际上倾向于认为问题可能会在科学的许多层面上出现,以至于对统计数据进行深入研究可能毫无意义-毕竟,整个数据集都是可以伪造的,而我永远不会一百万年之内就能说出来。因此,在这个工作领域中总会有信任的成分,研究人员绝不能滥用。

我要提出的最真实的建议是,您在提交之前需要仔细考虑所有内容,并确保您能够如实回答评论者提出的任何问题。只要您尽力而为,您的意图就很诚实,并且您晚上睡得很香,我认为您应该没事。


2
我不确定我是否能够发现装配体,但我不确定:我以前已经发现过这种装配体。
亚历克西斯
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.