R 中 lm 和 aov 之间报告的 p 值差异

机器算法验证 r 回归 方差分析 线性模型 平方和
2022-03-01 03:40:35

什么解释了以下aovlm调用中 p 值的差异?差异仅仅是由于不同类型的平方和计算吗?

set.seed(10)
data=rnorm(12)
f1=rep(c(1,2),6)
f2=c(rep(1,6),rep(2,6))
summary(aov(data~f1*f2))
summary(lm(data~f1*f2))$coeff
2个回答

summary(aov)使用所谓的类型 I(顺序)平方和。summary(lm)使用所谓的 III 型平方和,它不是连续的。有关详细信息,请参阅gung 的答案


请注意,您需要调用lm(data ~ factor(f1) * factor(2))(aov()自动将公式的 RHS 转换为因子)。然后注意线性回归统计量的分母(有关进一步解释,请参见此答案):t

t=ψ^ψ0σ^c(XX)1c

c(XX)1c对于每个测试系数都不同,因为向量发生了变化。相反,ANOVA检验中的分母始终是 MSE。βcF

set.seed(10)
data=rnorm(12)
f1=rep(c(1,2),6)
f2=c(rep(1,6),rep(2,6))
summary(aov(data~f1*f2))
            Df Sum Sq Mean Sq F value Pr(>F)
f1           1  0.535  0.5347   0.597  0.462
f2           1  0.002  0.0018   0.002  0.966
f1:f2        1  0.121  0.1208   0.135  0.723
Residuals    8  7.169  0.8962               
summary(lm(data~f1*f2))$coeff
               Estimate Std. Error    t value  Pr(>|t|)
(Intercept)  0.05222024   2.732756  0.0191090 0.9852221
f1          -0.17992329   1.728346 -0.1041014 0.9196514
f2          -0.62637109   1.728346 -0.3624106 0.7264325
f1:f2        0.40139439   1.093102  0.3672066 0.7229887

这是两个不同的代码。从 Lm 模型中,您需要系数。而从 aov 模型中,您只是将变异来源制成表格。试试代码

anova(lm(data~f1*f2))
Analysis of Variance Table

Response: data
          Df Sum Sq Mean Sq F value Pr(>F)
f1         1 0.5347 0.53468  0.5966 0.4621
f2         1 0.0018 0.00177  0.0020 0.9657
f1:f2      1 0.1208 0.12084  0.1348 0.7230
Residuals  8 7.1692 0.89615   

这给出了导致相同结果的变异来源的列表。