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

在R中使用ANOVA对多项式不同阶次项进行单独F检验的方法

用ANOVA分别检验poly()多项式各阶项的显著性

可行方法

当然可以实现,不用放弃poly()的优势,两种常用方法:

方法1:嵌套模型比较

通过逐步添加多项式项,用anova()比较嵌套模型的差异,直接得到各阶项的边际贡献显著性:

data(iris)
# 基础模型:仅包含Species
mod_base <- lm(Petal.Length ~ Species, data = iris)
# 加入Petal.Width的线性项(一阶多项式)
mod_linear <- update(mod_base, . ~ . + poly(Petal.Width, 1))
# 加入二次项,完成二阶多项式模型
mod_quad <- update(mod_base, . ~ . + poly(Petal.Width, 2))

# 嵌套模型ANOVA对比
anova(mod_base, mod_linear, mod_quad)

输出中:

  • mod_linear vs mod_base的F检验结果对应线性项的显著性
  • mod_quad vs mod_linear的F检验结果对应二次项的显著性

方法2:拆分poly()生成的正交项

把poly()生成的各阶正交项单独提取为变量,作为独立术语加入模型,再用car::Anova()检验:

data(iris)
# 提取poly生成的一阶、二阶正交项
iris$pw_lin <- poly(iris$Petal.Width, 2)[, 1]
iris$pw_quad <- poly(iris$Petal.Width, 2)[, 2]

# 构建包含单独项的模型
mod_split <- lm(Petal.Length ~ Species + pw_lin + pw_quad, data = iris)

# 用Type III ANOVA检验每个术语的显著性
car::Anova(mod_split, type = 3)

这个方法的输出会直接显示pw_lin和pw_quad各自的ANOVA检验结果,和summary(mod)中的系数t检验结果一致(正交多项式下,t²=F)。

为什么默认ANOVA不分开poly项?

默认的stats::anova()或car::Anova()会把poly(x, 2)视为单一术语,检验的是整个多项式效应(线性+二次项)的联合显著性,这是ANOVA的设计逻辑:它关注的是"术语"的边际贡献,而非单个系数。

而poly()生成的正交多项式本身具有正交性,各阶项之间无相关性,此时summary()输出的单个系数t检验,已经等价于单自由度的ANOVA F检验,两种检验的结论完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 13:51:08