如何调整样条曲线的平滑度

How to adjust smoothness of spline

set.seed(1); x <- round(rnorm(30), 1); y <- sin(pi * x) + rnorm(30)/10
plot(x, y, main = "spline(x,y)  when x has ties")
lines(spline(x, y, n = 201), col = 2)

有没有办法调整样条曲线的平滑度?特别是从 -0.5 开始,有些摇摆不定的部分可能会更平滑。我查看了文档,但似乎没有一个简单的参数可以执行此操作(类似于 smooth.spline 中的 spar)。

我会使用 LOESS 进行平滑处理:

lines(loess.smooth(y=spl[["y"]], x=spl[["x"]], span = 0.05), col=2)

根据需要调整跨度。

loess 是一种方法,但如果你想使用样条曲线,请使用 smooth.spline,而不是插值 spline

set.seed(1); 
x <- round(rnorm(30), 1); 
y <- sin(pi * x) + rnorm(30)/10
plot(x, y, main = "spline(x,y)  when x has ties")
sm <- smooth.spline(x, y, spar = 0.5) # play with spar
pred <- predict(sm, seq(-2, 2, by = 0.1))
lines(pred, col = "red")

此解决方案存在一个问题:请注意,在点密度较低的负区域中,拟合不是很好。 loess 更本地化(这就是 l 的意思),所以它可能会更好。