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

拟合的二次回归曲线显示异常,寻求正确绘制方法

二次回归曲线绘制异常的解决方法

你的问题出在lines(fitted(model7))的使用逻辑上:拟合值fitted(model7)是按照原始数据的行顺序输出的,但如果你的distance变量不是从小到大排序的,直接用lines连接会导致线条按行号顺序乱连,而不是沿着x轴(distance)的升序绘制,所以曲线显示异常。

下面是三种可行的修正方案:

方案1:先排序数据再拟合绘图

# 按distance对数据从小到大排序
sorted_data <- data[order(data$distance), ]
# 基于排序后的数据拟合模型
model7 <- lm(count~distance+I(distance^2), data=sorted_data)
# 绘制散点图
plot(count~distance, data=data)
# 绘制有序的拟合曲线
lines(sorted_data$distance, fitted(model7))

方案2:不重新拟合,直接排序拟合值后绘图

model7 <- lm(count~distance+I(distance^2), data=data)
# 绘制散点图
plot(count~distance, data=data)
# 将distance和对应拟合值绑定,按distance排序
sorted_fit <- data.frame(dist = data$distance, fit_val = fitted(model7))[order(data$distance), ]
# 绘制曲线
lines(sorted_fit$dist, sorted_fit$fit_val)

方案3:用预测生成平滑曲线(推荐)

这种方法会生成一系列均匀分布的distance值,预测对应的拟合结果,绘制出更平滑的二次曲线,尤其适合数据分布不均的情况:

model7 <- lm(count~distance+I(distance^2), data=data)
# 绘制散点图
plot(count~distance, data=data)
# 生成覆盖原distance范围的100个均匀取值
x_seq <- seq(min(data$distance), max(data$distance), length.out = 100)
# 预测这些x值对应的拟合y值
y_pred <- predict(model7, newdata = data.frame(distance = x_seq))
# 绘制平滑曲线
lines(x_seq, y_pred)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 00:01:16