如何对 R 中既没有正态性也没有方差相等的数据运行双向 ANOVA?

机器算法验证 r 方差分析 非参数 异方差
2022-01-28 16:39:23

我目前正在写我的硕士论文,并计划使用 SigmaPlot 运行统计数据。然而,在花了一些时间处理我的数据后,我得出结论,SigmaPlot 可能不适合我的问题(我可能弄错了),所以我开始了我在 R 中的第一次尝试,但这并没有让它变得更容易。

计划是对我的数据运行一个简单的双向方差分析,该数据由 3 种不同的蛋白质和 8 种不同的处理产生,所以我的两个因素是蛋白质和处理。我使用两者测试了正常性

> shapiro.test(time)

> ks.test(time, "norm", mean=mean(time), sd=sqrt(var(time)))

在这两种情况下(也许并不奇怪),我都得到了一个非正态分布。

这给我留下了第一个问题,即哪个测试用于方差相等。我想出了

> chisq.test(time)

结果是,我的数据也没有方差相等。

我尝试了不同的数据转换(对数、中心、标准化),所有这些都没有解决我的方差问题。

现在我很茫然,如何进行方差分析来测试哪些蛋白质和哪些治疗方法之间存在显着差异。我发现了有关 Kruskal-Walis-Test 的一些信息,但仅针对一个因素(?)。我还发现了有关排名或随机化的东西,但还没有发现如何在 R 中实现这些技术。

有人建议我应该怎么做吗?

编辑:谢谢你的回答,我对阅读有点不知所措(它似乎越来越多而不是越来越少),但我当然会继续前进。

这里是我的数据示例,正如建议的那样(我对格式感到非常抱歉,我无法找到另一个解决方案或放置文件的位置。我对这一切还是新手。):

protein treatment   time  
A   con 2329.0  
A   HY  1072.0  
A   CL1 4435.0  
A   CL2 2971.0  
A   CL1-HY sim  823.5  
A   CL2-HY sim  491.5  
A   CL1+HY mix  2510.5  
A   CL2+HY mix  2484.5  
A   con 2454.0  
A   HY  1180.5  
A   CL1 3249.7  
A   CL2 2106.7  
A   CL1-HY sim  993.0  
A   CL2-HY sim  817.5  
A   CL1+HY mix  1981.0  
A   CL2+HY mix  2687.5  
B   con 1482.0  
B   HY  2084.7  
B   CL1 1498.0  
B   CL2 1258.5  
B   CL1-HY sim  1795.7  
B   CL2-HY sim  1804.5  
B   CL1+HY mix  1633.0  
B   CL2+HY mix  1416.3  
B   con 1339.0  
B   HY  2119.0  
B   CL1 1093.3  
B   CL2 1026.5  
B   CL1-HY sim  2315.5  
B   CL2-HY sim  2048.5  
B   CL1+HY mix  1465.0  
B   CL2+HY mix  2334.5  
C   con 1614.8  
C   HY  1525.5  
C   CL1 426.3  
C   CL2 1192.0  
C   CL1-HY sim  1546.0  
C   CL2-HY sim  874.5  
C   CL1+HY mix  1386.0  
C   CL2+HY mix  364.5  
C   con 1907.5  
C   HY  1152.5  
C   CL1 639.7  
C   CL2 1306.5  
C   CL1-HY sim  1515.0  
C   CL2-HY sim  1251.0  
C   CL1+HY mix  1350.5  
C   CL2+HY mix  1230.5
2个回答

这可能更像是评论而不是答案,但它不适合作为评论。我们或许可以在这里为您提供帮助,但这可能需要多次迭代;我们需要更多信息。

首先,您的响应变量是什么?

其次,请注意,您的响应的边际分布不一定正态分布,而是模型条件下的分布(即残差)应该是——不清楚您是否检查了残差。此外,正态性是线性模型(例如,ANOVA)中最不重要的假设;残差可能不需要完全正常。正态性检验通常不值得(见这里关于 CV 的讨论),情节要好得多。我会尝试你的残差的qq 图R此完成qqnorm(),或尝试qqPlot()car包裹。还值得考虑残差非正态的方式:偏度比过度峰度更具破坏性,特别是如果偏度在组之间交替方向。

如果真的有值得担心的问题,转型是一个很好的策略。记录原始数据是一种选择,但不是唯一的选择。请注意,从这个意义上说,居中和标准化并不是真正的转换。您想了解Box & Cox 系列的电源转换请记住,结果不必完全正常,只要足够好即可。

接下来,我不遵循您对方差同质性的卡方检验的使用,尽管它可能非常好。我建议您使用Levene 的测试leveneTest()在 中使用car)。异质性比非正态性更具​​破坏性,但如果异质性较小,则方差分析非常稳健。一个标准的经验法则是,最大的组方差最多可以是最小组的四倍,而不会造成严重的问题。一个好的转型还应该解决异质性问题。

如果这些策略不够,我可能会在尝试非参数方法之前 探索稳健回归。

如果您可以编辑您的问题并详细说明您的数据,我可能会更新此内容以提供更具体的信息。

注意:此答案是在问题从 SO 迁移和合并之前发布的,因此已在此处未解决的问题中添加了详细信息。@gung 在评论和答案中解决了许多问题)。

有许多不同的方法,这个问题已在本网站的其他地方讨论过。以下是一些方法的列表,以及网站上其他问题的链接和一些参考资料:

  1. Box-Cox 幂变换可以对非线性尺度上的残差进行归一化
  2. 排名数据的方差分析非常容易,但功效降低且难以解释。参见Conover 和 Iman,(1981)
  3. 比例赔率序数逻辑模型
  4. 置换测试(Anderson 和 ter Braak 2003 ),由Anderson实现和描述,并作为R Vegan 包adonis中的函数
  5. 自举
  6. 分层贝叶斯建模(Gelman 2005