为什么在aov模型中更改协变量的顺序时p值的重要性会发生变化?


10

我有482个观测值的数据集。

data=Populationfull

我将对3个SNP进行基因型关联分析。我试图使用aov(y〜x,data = ...)为我的分析建立模型。对于一个特征,我有几个固定的影响和协变量,我将它们包括在模型中,如下所示:

Starts <- aov(Starts~Sex+DMRT3+Birthyear+Country+Earnings+Voltsec+Autosec, data=Populationfull)

summary(Starts)
                Df Sum Sq Mean Sq F value   Pr(>F)    
Sex              3  17.90    5.97  42.844  < 2e-16 ***
DMRT3            2   1.14    0.57   4.110    0.017 *  
Birthyear        9   5.59    0.62   4.461 1.26e-05 ***
Country          1  11.28   11.28  81.005  < 2e-16 ***
Earnings         1 109.01  109.01 782.838  < 2e-16 ***
Voltsec          1  12.27   12.27  88.086  < 2e-16 ***
Autosec          1   8.97    8.97  64.443 8.27e-15 ***
Residuals      463  64.48    0.14                     
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1   1

我发现,如果我更改了模型中变量的顺序,则会得到不同的p值,请参见下文。

Starts2 <- aov(Starts~Voltsec+Autosec+Sex+DMRT3+Birthyear+Country+Earnings, data=Populationfull)

summary(Starts2)

                Df Sum Sq Mean Sq F value   Pr(>F)    
Voltsec   1   2.18    2.18  15.627 8.92e-05 ***
Autosec   1 100.60  100.60 722.443  < 2e-16 ***
Sex              3  10.43    3.48  24.962 5.50e-15 ***
DMRT3            2   0.82    0.41   2.957  0.05294 .  
Birthyear        9   3.25    0.36   2.591  0.00638 ** 
Country          1   2.25    2.25  16.183 6.72e-05 ***
Earnings      1  46.64   46.64 334.903  < 2e-16 ***
Residuals      463  64.48    0.14                     
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1   1

为什么根据变量/因子/协变量/ fixedeffects(?)的编码顺序获得不同的p值?有办法“纠正”它吗?难道我使用错误的模型?我在R处还是很新,所以如果您可以帮助我,请保持简洁,这样我就可以理解答案了……谢谢,希望有人可以帮助我理解这一点!


3
请提供一些示例数据Populationfull以使您的问题可重现aov()帮助页面中的示例不会发生这种情况。summary(aov(yield ~ block + N + P + K, npk)); summary(aov(yield ~ K + P + block + N , npk))
MrFlick '16

p值正在更改,因为值的整个字段都已更改。你的第一次Earnings 1 109.01 109.01 782.838 < 2e-16 ***Earnings 1 46.64 46.64 334.903 < 2e-16 ***。您的结果不一样。首先检查您是否对变量进行了重新排序。

1
另外:在第二个模型中,您使用Earn而不是Earnings ...如果有两个不同名称的变量,则在复制到SO问题空间中不是拼写错误时可能会出现问题。

是的,值会更改,但是为什么呢?我在两个模型中都使用了完全相同的数据框中的完全相同的列(第二个模型中的Earnings vs Earn只是我写错了,现在已经更正了)。
Rbeginner '16

1
发生这种情况是因为您的设计不均衡。如果您搜索此论坛或仅搜索Google“ R中的不平衡ANOVA”,就会发现很多帮助。我建议您研究一下该程序包- car它实现Type II和Type III ANOVA,它们与变量的顺序无关,而aovType I ANOVA 则取决于变量的顺序。
慢懒猴

Answers:


15

问题来自进行aov()默认重要性测试的方式。它使用所谓的“ I型” ANOVA分析,其中按照在模型中指定变量的顺序进行测试。因此,在第一个例子,它决定了有多少差异被解释sex并测试它的意义,那么什么的部分剩余方差通过解释DMRT3和测试在该方面的意义剩余方差,等等。在第二个示例中,DMRT3仅在VoltsecAutosecsex之后按该顺序求值,因此剩下的差值可用于DMRT3解释。

如果两个预测变量相关,则进入模型的第一个变量将获得完整的“信用”,剩下的差异要由第二个变量“解释”,因此,与第一个变量相比,其“统计意义上的”显着性较小。在功能上不是。这个问题及其答案解释了ANOVA分析的不同类型。

解决该问题的一种方法是从经典ANOVA的局限中提取自己,并使用带有lm()R而不是的简单线性模型aov()。这样可以有效地并行分析所有预测变量,一次“校正”所有预测变量。在那种情况下,两个相关的预测变量的估计回归系数最终可能会有较大的标准误差,并且它们的系数在总体样本中的不同样本之间可能会有所不同,但是至少将变量输入模型规格的顺序并不重要。

如果您的响应变量是某种类型的计数变量,Starts顾名思义,那么您可能不应该使用ANOVA,因为残差不可能像p值解释那样呈正态分布。使用广义线性模型(例如,glm()在R中)可以更好地处理计数变量,可以将其视为lm()对其他类型的残差结构的广义化。

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.