拟合的二次回归曲线显示异常,寻求正确绘制方法
二次回归曲线绘制异常的解决方法
你的问题出在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
相关产品推荐
相关产品推荐

