我希望更好地了解使用黄土或平滑样条曲线来平滑某些曲线的优缺点。
我的问题的另一个变体是,是否有一种方法可以构建平滑样条曲线,从而产生与使用黄土相同的结果。
欢迎任何参考或见解。
我希望更好地了解使用黄土或平滑样条曲线来平滑某些曲线的优缺点。
我的问题的另一个变体是,是否有一种方法可以构建平滑样条曲线,从而产生与使用黄土相同的结果。
欢迎任何参考或见解。
平滑样条或黄土的实际结果将非常相似。它们在支撑的边缘可能看起来有点不同,但只要您确保它是“自然”的平滑样条曲线,它们看起来就会非常相似。
如果您只是使用一个来为散点图添加“平滑”,那么没有真正的理由更喜欢一个。相反,如果您想对新数据进行预测,则使用平滑样条曲线通常要容易得多。这是因为平滑样条是原始数据的直接基扩展;如果您使用 100 节来制作它,这意味着您从原始变量创建了大约 100 个新变量。相反,Loess 只是估计所有经历过的值(或大数据的分层子集)的响应。
一般来说,已经建立了算法来优化平滑样条曲线的惩罚值(R 中的 mgcv 可能是最好的)。黄土不是很明确,但是您通常仍然可以从任何实现中获得合理的输出。MGCV 还可以让您感受等效的自由度,因此您可以感受数据的“非线性”程度。
我发现,在对非常大的数据进行建模时,与平滑样条或黄土相比,更简单的自然样条通常会为最少的计算提供相似的结果。
这是一些 R 代码/示例,可让您比较黄土拟合和样条拟合的拟合:
library(TeachingDemos)
library(splines)
tmpfun <- function(x,y,span=.75,df=3) {
plot(x,y)
fit1 <- lm(y ~ ns(x,df))
xx <- seq( min(x), max(x), length.out=250 )
yy <- predict(fit1, data.frame(x=xx))
lines(xx,yy, col='blue')
fit2 <- loess(y~x, span=span)
yy <- predict(fit2, data.frame(x=xx))
lines(xx,yy, col='green')
invisible(NULL)
}
tmplst <- list(
span=list('slider', from=0.1, to=1.5, resolution=0.05, init=0.75),
df=list('slider', from=3, to=25, resolution=1, init=3))
tkexamp( tmpfun(ethanol$E, ethanol$NOx), tmplst )
您可以尝试使用您的数据并更改代码以尝试其他类型或选项。您可能还想查看loess.demo
TeachingDemos 包中的函数,以更好地了解黄土算法的作用。请注意,您从 loess 中看到的通常是 loess 与第二次插值平滑(有时本身是样条曲线)的组合,该loess.demo
函数实际上显示了平滑和原始 loess 拟合。
从理论上讲,您总能找到一个尽可能接近另一个连续函数的样条曲线,但不太可能有一个简单的节点选择来可靠地为任何数据集提供一个接近近似的黄土拟合。