You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言中anova与summary分析线性模型的结果差异原因探究

为什么线性模型中anova()和summary()的结果在模型复杂时会不一致?

我用R构建了线性模型,发现当模型只有单个自变量时,anova()和summary()的显著性检验结果一致;但当模型包含多个自变量时,两者给出的结果存在明显差异,想知道背后的原因。

差异示例(多变量模型)

> lm_all <- lm(mtci_ac~sd_height+density+ORA+dry_weight+northess,data=at_growth)
> summary(lm_all)

Coefficients:
              Estimate Std. Error t value Pr(>|t|)    
(Intercept)  2.480e-01  3.984e-02   6.225 1.33e-07 ***
sd_height    1.106e-02  1.045e-02   1.058    0.295    
density      1.006e-01  1.481e-01   0.679    0.501    
ORA         -3.397e-04  1.361e-03  -0.250    0.804    
dry_weight   5.045e-06  1.636e-05   0.308    0.759    
northess     5.077e-03  3.203e-02   0.159    0.875    
---
Signif. codes:  
0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

> anova(lm_all)
Analysis of Variance Table

Response: mtci_ac
           Df  Sum Sq   Mean Sq F value  Pr(>F)  
sd_height   1 0.02525 0.0252488  3.3059 0.07555 .
density     1 0.00469 0.0046852  0.6135 0.43750  
ORA         1 0.00006 0.0000560  0.0073 0.93214  
dry_weight  1 0.00074 0.0007426  0.0972 0.75659  
northess    1 0.00019 0.0001919  0.0251 0.87475  
Residuals  46 0.35132 0.0076374                  
---

一致示例(单变量模型)

> lm_all <- lm(mtci_ac~sd_height,data=at_growth)
> anova(lm_all)
Analysis of Variance Table

Response: mtci_ac
          Df  Sum Sq   Mean Sq F value  Pr(>F)  
sd_height  1 0.02525 0.0252488  3.5363 0.06587 .
Residuals 50 0.35700 0.0071399                  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
> summary(lm_all)

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept) 0.261539   0.019209   13.62   <2e-16 ***
sd_height   0.013703   0.007287    1.88   0.0659 .  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

原因解释

核心在于两个函数的检验逻辑完全不同:

  • summary()中的t检验(对应Pr(>|t|)):检验的是在模型包含所有其他自变量的前提下,当前自变量的回归系数是否显著不为0。也就是控制了其他变量的影响后,单独看这个变量的边际效应。
  • anova()默认的顺序方差分析(Type I平方和):检验的是按照自变量在公式中出现的顺序,每加入一个新变量后,模型额外解释的方差是否显著。即先看第一个变量单独能解释多少方差,再看加入第二个变量后新增的解释力,以此类推,后面的变量检验是基于前面变量已被纳入模型的基础上,但和summary()的控制所有变量不同,它是按顺序逐步控制。

在单变量模型中,两者检验的是同一个问题——这个唯一的自变量是否能显著解释因变量的方差,所以结果一致(t值的平方等于F值,对应的p值也几乎相同,因为自由度匹配)。

而在多变量模型中:

  • summary()的p值是每个变量的偏效应显著性,考虑了所有其他变量的存在。
  • anova()的p值是每个变量的增量方差显著性,依赖于变量进入模型的顺序,不同顺序会得到不同结果。

比如你提供的多变量例子里,sd_height在anova()里p值是0.07555,而在summary()里是0.295,这是因为anova()里的检验是只考虑sd_height单独加入模型时的方差贡献,而summary()里是控制了density、ORA等所有其他变量后,sd_height的边际效应是否显著。

内容的提问来源于stack exchange,提问作者ChuDingjin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 15:57:15