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

机器算法验证 r 方差分析
2022-03-30 11:00:02

我有一个包含 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

为什么我会根据变量/因子/协变量/固定效应(?)的编码顺序得到不同的 p 值?有没有办法“纠正”它?难道是我使用了错误的模型?我还是 R 的新手,所以如果你能帮我解决这个问题,请保持简单,这样我就能理解答案,呵呵......谢谢,希望有人能帮助我理解这一点!

1个回答

问题来自于进行aov()默认显着性测试的方式。它使用所谓的“I 型”ANOVA 分析,其中测试按照模型中指定变量的顺序进行。因此,在第一个示例中,它确定解释了多少方差并测试其重要性,然后解释了剩余方差的sex哪一部分并根据剩余方差来测试其重要性,依此类推。在第二个示例中,仅在 , 和 , 之后按该顺序进行评估因此剩余的方差较少需要解释。DMRT3DMRT3VoltsecAutosecsexDMRT3

如果两个预测变量相关,则输入模型的第一个变量将获得完整的“信用”,留下较少的方差可以由第二个变量“解释”,因此即使它是不是,在功能上。这个问题及其答案解释了不同类型的 ANOVA 分析。

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

如果您的响应变量是某种类型的计数变量,Starts顾名思义,那么您可能不应该使用方差分析,因为残差不太可能是正态分布的,正如p值解释所要求的那样。使用广义线性模型(例如,在 R 中)可以更好地处理计数变量glm(),这可以被认为是lm()对其他类型的残差结构的概括。