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

R语言中lm$coefficients含义及多项式拟合系数应用问题

关于多项式拟合中lm$coefficients的含义及预测方法

你给出的拟合数据和代码如下:

mysubx [1] 0.05 0.10 0.20 0.50 1.00 2.00 5.00 [8] 9.00 12.30 18.30
mysuby [1] 1.008 1.019 1.039 1.091 1.165 1.258 1.402 [8] 1.447 1.421 1.278

拟合与绘图代码:

mymodel <- lm(mysuby ~ poly(mysubx,5))
plot(mysubx, mysuby)
lines(mysubx, mymodel$fitted.values, col = "red")

针对你提出的两个问题,我来详细解答:

一、lm$coefficients的具体含义

当你使用poly(mysubx,5)进行拟合时,poly()默认生成的是正交多项式(而非我们日常认知的原始多项式项x, x², x³...),所以mymodel$coefficients中的数值对应这些正交多项式项的权重系数:

  • 第一个数值是截距项系数,对应拟合公式里的常数项
  • 后续5个数值依次对应1次、2次……5次正交多项式项的系数

为什么用正交多项式?它能有效避免高次多项式常见的多重共线性问题,同时也更方便做统计显著性检验(比如判断哪一项对拟合结果的影响更显著)。如果你想得到原始多项式项的系数,可以在poly()中添加raw=TRUE参数,比如lm(mysuby ~ poly(mysubx,5, raw=TRUE)),此时coefficients就对应x, x², ..., x⁵的系数了。

二、用模型系数计算给定x对应的y值

这里有两种实用方法,推荐优先用第一种:

方法1:使用predict()函数(最便捷)

R的lm对象自带的predict()函数会自动处理多项式转换的细节,完全不需要手动计算系数。比如你要计算x=3对应的y值:

# 构造包含新x值的数据框
new_x <- data.frame(mysubx = 3)
# 生成预测值
predicted_y <- predict(mymodel, newdata = new_x)

你之前绘图用的mymodel$fitted.values,本质就是predict()对原有x值计算出的拟合结果,和这个方法逻辑一致。

方法2:手动计算(适合理解原理)

如果你想手动实现计算,需要先把输入的x转换成和拟合时一致的多项式形式,再与系数相乘求和:

  1. 把新x转换为正交多项式矩阵(注意次数要和拟合时保持一致):
new_x_poly <- poly(3, 5)
  1. 将截距项与多项式项和对应系数相乘后求和:
predicted_y <- mymodel$coefficients[1] + sum(mymodel$coefficients[-1] * new_x_poly)

如果你用的是原始多项式(添加了raw=TRUE),则直接按公式计算:y = b0 + b1*x + b2*x² + ... + b5*x⁵,其中b0到b5就是mymodel$coefficients中的各个数值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:17:41