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

如何在R中实现正确的多元三阶多项式回归?

问题原因

在R的公式语法中,^不是数学意义上的幂运算符,而是用来指定交互项的最高阶数。比如:

  • x^3 仅表示包含x的所有项直到3阶交互,但单个变量的情况下等价于x;
  • x*y 等价于x + y + x:y(线性项+二阶交互)。
    这就是你代码中只得到线性项和交互项,没有高阶幂次项的原因。
解决方法

有三种常用方式实现三阶多元多项式回归:

1. 使用I()包裹算术表达式

I()函数会将内部的表达式当作普通数学运算处理,而非公式语法:

# 避免覆盖内置lm函数,改用lm_model作为变量名
lm_model <- lm(activation_timing_ms ~ I(x^3) + I(y^3) + I(z^3) + 
                 I(x^2*y) + I(x^2*z) + I(y^2*x) + I(y^2*z) + I(z^2*x) + I(z^2*y) + I(x*y*z) + 
                 I(x^2) + I(y^2) + I(z^2) + I(x*y) + I(x*z) + I(y*z) + x + y + z,
               data = dat)

# 查看所有系数
coef(lm_model)

2. 手动创建高阶变量

先在数据框中提前计算所有需要的高阶项,再代入公式:

# 添加高阶项到数据集
dat <- dat %>%
  mutate(
    x2 = x^2, x3 = x^3,
    y2 = y^2, y3 = y^3,
    z2 = z^2, z3 = z^3,
    x2y = x^2*y, x2z = x^2*z,
    y2x = y^2*x, y2z = y^2*z,
    z2x = z^2*x, z2y = z^2*y,
    xyz = x*y*z
  )

# 拟合模型
lm_model <- lm(activation_timing_ms ~ x3 + y3 + z3 + 
                 x2y + x2z + y2x + y2z + z2x + z2y + xyz + 
                 x2 + y2 + z2 + x*y + x*z + y*z + x + y + z,
               data = dat)

3. 使用poly()函数自动生成多项式项

poly()可以一键生成指定阶数的所有多项式项(包括交叉项),raw=TRUE表示使用原始多项式而非正交多项式:

lm_model <- lm(activation_timing_ms ~ poly(x, y, z, degree=3, raw=TRUE), data = dat)

# 查看系数
coef(lm_model)

这种方式最简洁,无需手动列举所有项。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 20:10:29