ANOVA:拒绝原假设后的生活

机器算法验证 机器学习 方差分析 聚类 异常值 tukey-hsd-测试
2022-04-07 10:04:17

我有多组数据(20 多组)并测试它们具有相同均值的零假设。拒绝原假设后如何进行?选择具有相同均值的组标准方法是什么?

常识说,在这种情况下,必须进行成对的 t 检验。很难相信没有更有效的发明。此外,成对测试还有很多不足之处,例如

  • 没有明确的算法/协议可以将可能具有相同平均值的组与关闭的组分开。(目视检查可能对一个实验有用,但如果你必须用不同的数据重复这种分析数百次怎么办?)
  • 即使使用这样的协议,在成对 t 检验的基础上选择可能具有相同均值的组也会导致错误累积。

另一方面,成对检验的优点是我们可以有效地检验两组的原假设:TOST 等价检验。

我们在找什么?

以下是对这个问题有意义的答案(在我看来):

  1. 一种将可能具有共同均值的组与其他组分开的方法。如果该方法基于成对比较(而不是批量测试),它可能包括一些聚类过程。
  2. 具有共同均值的组的等价检验,即确认原假设而不是不拒绝它的检验。
  3. 上述任务的等效贝叶斯程序。
  4. 关于在拒绝零假设后可以在 ANOVA 设置中完成的事情的其他建议(也许寻找具有共同均值的组的子集并不是唯一有趣的目标。)

重要的

  • 鼓励参考教科书和研究论文。
  • 数学和算法比代码更好
  • 偏好可扩展的方法——可以用于大量组和多次(例如目视检查不会)。

相关问题

在 ANOVA 的事后测试中,“单步”和“多步”是什么意思?

两样本检验与 Tukey 方法t

为什么 Tukey 的方法没有明显的改进?

关于成对比较的备注

由于多个用户(正确地)注意到对 20 组进行成对比较在计算上并不那么困难(它涉及比较),我想再次解释为什么这不能解决问题(的明显的求知欲)。k(k1)k=20k=200,2000,etc.

假设您已完成所有成对比较(t 检验和等价检验),现在您正盯着一个 20×20 的 p 值表。下一步你要怎么做?在某些情况下,边缘群体是显而易见的——但在这些情况下,我们并不真正需要统计数据。

在一般情况下,您需要一种算法来选择具有共同均值的组。此外,您不太可能仅基于成对比较来做到这一点:A 组可能与 B 和 C 没有统计学差异,但 B 和 C 之间可能不同。

蛮力方法将对组的所有可能组合进行 ANOVA F 检验,其中 m 从 2 运行到 k-1。这给我们留下了 测试,这看起来比测试。这当然是夸大其词,但它设定了上限并希望澄清,为什么我会怀疑存在一种标准方法来找到具有共同平均值的组子集。 m

m=2k1(km)2k
(k2)

多重比较

@SalMangiafico 让我注意到紧凑型字母显示方法。它似乎更像是一种可视化而不是推理技术,但它让我看到了这篇文章,其中包含一些相关的参考资料:

  • Hochberg, Y., Tamhane, AC, 1987。多重比较程序。威利。
  • Hsu, JC, 1996。多重比较:理论和方法。Chap-man&Hall。
  • Shaffer, JP, 1995。多重假设检验。心理学年度回顾 46, 561–584。谢弗

我还不确定这些书是否包含我的问题的答案:似乎该领域处理的不仅仅是多重比较引入的错误,而不是我上面提出的问题。如果有知识的人可以在这里写信或推荐一个关于这个主题的简短评论,我们将不胜感激。

2个回答

我将尝试回答一个问题。存在用于区分相似组和不同组的既定协议,这导致紧凑的字母显示可以手动将一系列成对测试简化为紧凑的字母显示,或者例如使用R中的函数。cldmultcomp package

下面的示例使用rcompanion包中的一个函数,因为我觉得它更容易一些。(需要注意的是我是这个包的作者)。

在这里,共享一个字母的组没有显着差异(alpha = 0.05)。

if(!require(rcompanion)){install.packages("rcompanion")}

Data = read.table(header=T, text="
Comparison   p.value  cohen.d
'A - B = 0'  0.20     0.5
'A - C = 0'  0.01     0.9
'A - D = 0'  0.001    1.5
'B - C = 0'  0.20     0.5
'B - D = 0'  0.01     1.1
'C - D = 0'  0.20     0.5
")

library(rcompanion)

cldList(p.value ~ Comparison, data=Data, threshold=0.05)

   ###   Group Letter MonoLetter
   ### 1     A      a        a  
   ### 2     B     ab        ab 
   ### 3     C     bc         bc
   ### 4     D      c          c
   ###
   ### Groups sharing a letter are not significantly different (alpha = 0.05).

这可以是一种简洁的方式来呈现许多比较的结果,并且这些字母对于添加到绘图中很有用。然而,以这种方式呈现结果有一个变化,因为它将 alpha 水平视为一个魔法截止值,而呈现p值本身可以为读者提供更多信息。例如,基本的 R 包emmeans不再支持紧凑型字母显示。

当然,在这个讨论中,不应过分强调p值。也许可以使用效应量统计(如 Cohen 的d)来执行类似的过程。

在这里,假设如果 Cohen 的d不是至少 1.0,我们正在考虑两个组相对相似。我们可以为此创建一个标志,并运行类似的过程。

Data$Flag = as.numeric(Data$cohen.d < 1.0)

cldList(Flag ~ Comparison, data=Data, threshold=0)

   ###   Group Letter MonoLetter
   ### 1     A      a         a 
   ### 2     B      a         a 
   ### 3     C     ab         ab
   ### 4     D      b          b
   ### 
   ### Groups sharing a letter have Cohen's *d* < 1.0

我用来处理这个问题的方法:

  1. 成对比较有很多文献专门讨论事后成对测试中涉及的统计问题。实际上,成对测试本身并没有给出任何答案:您仍然需要某种聚类算法和事后分析才能获得合理的结果。
  2. 稳健回归 使用 M 估计器(例如 Huber 或 Tukey)的稳健回归效果很好。例如,为了确定共同平均值。但是,很难判断估计的错误和质量。
  3. 期望最大化EM 是对稳健回归的补充:它很容易解释,但它需要为数据和异常值定义一个参数模型。