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

如何用R的qr.solve求解线性回归拟合线?原理与参数疑问

用qr.solve实现线性回归拟合:详解与实操

一、qr.solve求解斜率与截距的正确姿势

线性回归的核心是求解方程 (X\beta = y) 的最小二乘解,其中 (X) 是带截距项的设计矩阵,(y) 是响应变量向量,(\beta) 就是我们要的截距和斜率。

你提到的两列数据集应该是自变量(比如单变量回归的x值),直接传这个矩阵会缺少截距项,而且b参数必须传入响应变量y。正确步骤:

  1. 给自变量矩阵添加一列全1的向量,作为截距项的占位符;
  2. 将构造好的设计矩阵传给qr.solve的a参数,响应变量y传给b参数。

示例代码:

# 生成模拟数据
set.seed(42)
x <- runif(30, 0, 10)
y <- 1.5 + 2.3*x + rnorm(30, 0, 1.2)

# 构造带截距的设计矩阵
design_matrix <- cbind(intercept = 1, x = x)

# 用qr.solve求解
beta <- qr.solve(a = design_matrix, b = y)
beta
# 输出结果:截距≈1.5,斜率≈2.3,和真实值一致

二、为什么QR分解和lm结果一致?

lm()函数的底层实现本质上也是用QR分解来求解最小二乘问题:

  • 最小二乘的解满足正规方程 (\hat{\beta} = (X^T X){-1}XT y);
  • QR分解将设计矩阵分解为 (X = QR)(Q是正交矩阵,R是上三角矩阵),代入正规方程后可推导出 (\hat{\beta} = R{-1}QT y);
  • 两种方法的数学推导等价,因此求解结果完全一致。

你可以直接对比验证:

# lm求解结果
lm_fit <- lm(y ~ x)
coef(lm_fit)

# qr.solve求解结果
beta_qr <- qr.solve(design_matrix, y)
beta_qr

三、qr.solve相比lm的优势

  1. 数值稳定性更强:当设计矩阵存在严重多重共线性((X^T X) 接近奇异)时,直接求逆会放大数值误差,而QR分解的正交性可以避免这个问题,计算结果更可靠;
  2. 计算效率更高:当样本量远大于特征数(n >> p)时,QR分解的运算速度比直接求解正规方程更快;
  3. 灵活性更高:qr.solve可以直接处理任意线性方程组 (Ax = b),不仅限于标准线性回归场景,适合自定义模型或复杂矩阵求解需求;
  4. 轻量化:不需要像lm()那样输出大量模型诊断信息,仅返回系数解,适合只需要拟合结果的场景。

四、关于qr.solve的输入:无需手动计算QR分解

qr.solve会自动对输入的矩阵a进行QR分解并求解,你完全不需要手动计算Q和R矩阵,只需要传入正确的设计矩阵和响应变量即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 23:25:20