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

在R中实现正交线性回归后,如何绘图、计算RMSE与R平方?

正交线性回归(全最小二乘)后续操作:绘制拟合线、计算RMSE与R²

先回顾你的现有代码与拟合结果:

# 加载pracma包
library(pracma)

# 示例数据
x <- c(1.0, 0.6, 1.2, 1.4, 0.2, 0.7, 1.0, 1.1, 0.8, 0.5, 0.6, 0.8, 1.1, 1.3, 0.9)
y <- c(0.5, 0.3, 0.7, 1.0, 0.2, 0.7, 0.7, 0.9, 1.2, 1.1, 0.8, 0.7, 0.6, 0.5, 0.8)

# 拟合正交线性回归
odr <- odregress(y, x)
c <- odr$coeff

拟合得到的模型为:Y = 0.65145762*X - 0.03328271


1. 绘制拟合直线

在你已绘制的散点图基础上,直接用abline()函数添加拟合直线,注意参数对应模型的截距和斜率:

# 绘制散点图
plot(x, y, pch = 16, col = "steelblue", main = "正交线性回归拟合结果", xlab = "X", ylab = "Y")
# 添加拟合直线:a是截距(c[2]),b是斜率(c[1])
abline(a = c[2], b = c[1], col = "red", lwd = 2)

2. 计算RMSE

正交回归的RMSE通常有两种计算方式,根据需求选择:

  • 垂直距离RMSE:每个数据点到拟合直线的垂直距离的均方根(这是正交回归的核心误差指标)
  • 预测值RMSE:模型预测的Y值与实际Y值的差的均方根(和普通最小二乘的RMSE计算逻辑一致)

代码实现:

# 1. 垂直距离RMSE(直接用odregress返回的残差)
rmse_vertical <- sqrt(mean(odr$residuals^2))
cat("垂直距离RMSE:", rmse_vertical, "\n")

# 2. 预测值RMSE
y_hat <- c[1] * x + c[2]  # 根据模型计算预测值
rmse_pred <- sqrt(mean((y - y_hat)^2))
cat("预测值RMSE:", rmse_pred, "\n")

3. 计算R-squared

正交回归的R²没有统一标准定义,推荐两种常用计算方式:

方式一:基于PCA方差贡献率(最贴合正交回归的逻辑)

正交回归本质是通过PCA找到数据的主成分方向,R²可以用第一主成分的方差占总方差的比例:

# 计算X和Y的标准化总方差
total_var <- var(x) + var(y)
# 第一主成分的方差(来自odregress的返回值)
pc_var <- odr$values[1]
r_squared_pca <- pc_var / total_var
cat("基于PCA的R²:", r_squared_pca, "\n")

方式二:模仿普通最小二乘的R²计算

用预测值与实际值的相关系数的平方,和普通线性回归的R²逻辑一致:

r_squared_like_lm <- cor(y, y_hat)^2
cat("模仿普通线性回归的R²:", r_squared_like_lm, "\n")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 11:20:54