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

如何拟合过全部数据点的光滑样条并实现值预测?

拟合经过所有数据点的平滑样条解决方案

一、使用smooth.spline实现(推荐,支持便捷预测)

smooth.spline可以直接生成经过所有数据点的平滑曲线,只需设置自由度等于数据点数量,强制样条插值经过每个点:

# 加载数据
dat <- structure(list(time = c(7269, 21935, 43200, 86400, 172800, 259200, 
518400), speed = c(5.804787454, 4.558924, 3.88888889, 3.21296296, 
2.44675926, 1.9437728, 1.88)), row.names = c(NA, -7L), class = c("tbl_df", 
"tbl", "data.frame"))

# 拟合经过所有点的平滑样条
spline_fit <- smooth.spline(dat$time, dat$speed, df = nrow(dat))

# 预测任意x对应的y值
new_time <- seq(min(dat$time), max(dat$time), length.out = 100)
pred_speed <- predict(spline_fit, new_time)$y

# 可视化对比
plot(dat$time, dat$speed, pch=16, main="平滑样条拟合(经过所有数据点)")
lines(new_time, pred_speed, col="red", lwd=2) # 平滑曲线
lines(dat$time, dat$speed, col="gray", lty=2) # 原直线连接

参数说明:df = nrow(dat)指定自由度等于数据点数量,确保样条严格经过每个数据点,同时保持曲线光滑。

二、自然样条实现

如果需要自然样条(边界处为线性),可以用splines包的ns函数,设置中间数据点为 knots,拟合后也能经过所有点:

library(splines)

# 拟合自然样条(设置中间time点为 knots)
ns_fit <- lm(speed ~ ns(time, knots = dat$time[-c(1, nrow(dat))]), data = dat)

# 预测任意x对应的y值
pred_ns <- predict(ns_fit, newdata = data.frame(time = new_time))

# 可视化对比
plot(dat$time, dat$speed, pch=16, main="自然样条拟合(经过所有数据点)")
lines(new_time, pred_ns, col="blue", lwd=2) # 自然样条曲线
lines(dat$time, dat$speed, col="gray", lty=2) # 原直线连接

三、xspline方案(可行,需手动处理预测)

xspline可以生成平滑曲线,若要实现类似predict的功能,可通过以下步骤:

  1. 用draw=FALSE提取曲线的坐标点
  2. 用approx或spline函数对坐标点做插值,得到任意x对应的y值
# 获取xspline平滑曲线的坐标
xspline_coords <- xspline(dat$time, dat$speed, shape = 1, draw = FALSE)
# shape参数控制平滑度:0=自然样条风格,1=更平滑,2=带张力的样条

# 预测任意x对应的y值
pred_xspline <- approx(xspline_coords$x, xspline_coords$y, xout = new_time)$y

# 可视化对比
plot(dat$time, dat$speed, pch=16, main="xspline平滑曲线(经过所有数据点)")
lines(xspline_coords$x, xspline_coords$y, col="green", lwd=2) # xspline原始曲线
lines(new_time, pred_xspline, col="darkgreen", lty=3, lwd=1.5) # 预测值连接曲线
lines(dat$time, dat$speed, col="gray", lty=2) # 原直线连接

方案总结

  • 优先选择smooth.spline或自然样条方案,原生支持predict函数,操作更便捷。
  • xspline是可行方案,但需要手动提取坐标再做插值预测,适合仅需快速绘图或对预测精度要求不高的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 23:57:10