线性模型中非因子变量的 R ANOVA 函数如何计算平方和

机器算法验证 r 方差分析 流明
2022-04-02 05:10:19
> d = data.table(a = rnorm(40), b = rnorm(40), c = rnorm(40))
> summary(aov(a ~ b + c, d))
            Df Sum Sq Mean Sq F value Pr(>F)
b            1   1.17  1.1707   0.836  0.367
c            1   0.07  0.0677   0.048  0.827
Residuals   37  51.84  1.4011 

我了解因子变量是如何完成的,因为它们将整个数据集分成组。但是如何计算数值变量 b 和 c 呢?

1个回答

一种方法(一句话中最容易掌握)是在添加协变量时查看由于回归导致的平方和增量。这是 R 的 ANOVA(或 AOV)策略,这意味着添加变量的顺序很重要:

> anova( lm(mpg ~ cyl, mtcars))
Analysis of Variance Table

Response: mpg
          Df Sum Sq Mean Sq F value    Pr(>F)    
cyl        1 817.71  817.71  79.561 6.113e-10 
Residuals 30 308.33   10.28                      
---

当我们添加另一个变量时,该变量的回归平方和保持不变cyl

> anova( lm(mpg ~ cyl+disp, mtcars))
Analysis of Variance Table

Response: mpg
          Df Sum Sq Mean Sq F value    Pr(>F)    
cyl        1 817.71  817.71 87.5883 2.903e-10 
disp       1  37.59   37.59  4.0268   0.05419  
Residuals 29 270.74    9.34                  

如果disp首先添加,则保持其 SS 回归,并将增量 SS 回归归因于下一个协变量,这次是cyl.

> anova( lm(mpg ~ disp+cyl, mtcars))
Analysis of Variance Table

Response: mpg
          Df Sum Sq Mean Sq F value    Pr(>F)    
disp       1 808.89  808.89  86.643 3.271e-10 ***
cyl        1  46.42   46.42   4.972   0.03366 *  
Residuals 29 270.74    9.34                   

默认情况下这种方法的支持者与想要使用一种以不同方式分配平方和的方法的 SAS 作者之间正在进行圣战(我认为我不能用一句话说明他们做了什么,除了也就是说,在任何给定的复杂程度下,对每个变量使用所谓的“III 型”ANOVA 进行平方和回归不受变量添加或删除顺序的影响。)

R 方法的支持者认为,与理论无关的逐步方法的应用是糟糕的统计数据。他们认为你应该根据现有科学已知或建立的模型建立你的模型,然后添加代表任何新假设的变量。我不确定是谁发明了平方和策略的“打字”系统,但 R 使用 II 型,而 SAS 在各自的默认回归方法中使用 III 型平方和。如果您需要尝试复制 SAS 结果,则有 R 包可以提供 III 类计算。我的记忆是该car包具有Anova允许指定所需类型的功能。