如何在R中实现无限斜率的线性回归(附指定数据集)
实现无限斜率的线性回归(垂直直线拟合)
嘿,我明白你要做的是拟合一条斜率无限大的直线——也就是垂直于x轴的直线(形式为 x = k),对应Excel里的同类型拟合。这种拟合的核心是最小化每个数据点到这条垂直直线的水平距离平方和,最优的k其实就是x变量(这里是R1)的均值,我们一步步来实现:
第一步:加载并查看你的数据集
首先把你的数据导入R里,直接创建数据框即可:
# 创建数据集 df <- data.frame( R1 = c(233.7, 411.3, 143.4, 136.7, 249.0, 59.0, 186.0, 185.0), LAI1 = c(1.34, 4.42, 3.57, 3.27, 5.53, 1.79, 4.32, 2.58) ) # 查看数据 print(df)
第二步:计算无限斜率直线的最优k值
我们的目标是最小化所有数据点到垂直直线的水平距离平方和(即$\sum(R1_i - k)^2$),对k求导后可以得到最优解就是R1的平均值:
# 计算k值(R1的均值) k <- mean(df$R1) cat("拟合的垂直直线为:x =", round(k, 2), "\n")
运行后你会得到类似 x = 190.51 的结果(具体数值取决于计算精度),这就是对应Excel里无限斜率回归的拟合直线。
第三步:可视化拟合结果
为了直观对比,我们把原始数据和拟合的垂直直线画出来:
# 先安装绘图包(如果没安装过) # install.packages("ggplot2") library(ggplot2) # 绘制散点图 + 垂直拟合线 ggplot(df, aes(x = R1, y = LAI1)) + geom_point(size = 3, color = "steelblue") + # 原始数据点 geom_vline(xintercept = k, color = "red", linetype = "dashed", size = 1) + # 拟合的垂直直线 labs(title = "无限斜率线性回归(垂直直线拟合)", x = "R1", y = "LAI1") + theme_minimal()
图中红色虚线就是拟合的无限斜率直线,所有数据点到这条线的水平距离平方和是最小的,和Excel的结果完全一致。
补充:计算拟合残差
如果你需要查看每个数据点的水平偏差(残差),可以用以下代码:
# 计算残差(每个R1值与k的差值) df$residuals <- df$R1 - k print(df)
内容的提问来源于stack exchange,提问作者Alvin
相关产品推荐
相关产品推荐

