Answers:
这是一些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.demo
函数实际上同时显示了平滑黄土和原始黄土的拟合。
从理论上讲,您总是可以找到一个样条曲线,该样条曲线可以根据需要近似逼近另一个连续函数,但是不太可能会有简单的结点选择来可靠地近似拟合适合任何数据集的黄土。
平滑样条或黄土的实际结果将非常相似。它们在支撑的边缘看起来可能有些不同,但是只要您确保它是“自然的”平滑样条,它们看起来就会非常相似。
如果您只是使用一个为散点图添加“平滑”,则没有真正的理由偏爱另一个。相反,如果您要对新数据进行预测,则使用平滑样条线通常要容易得多。这是因为平滑样条是原始数据的直接基础扩展。如果您使用100节的速度,则意味着您从原始变量中创建了约100个新变量。黄土只是估算所有经历过的值的响应(或大数据的分层子集)。
通常,已经建立了算法来优化用于平滑样条曲线的惩罚值(R中的mgcv可能做到最好)。Loess并不是很明确,但是您通常仍可以从任何实现中获得合理的输出。MGCV还为您提供了等效的自由度,因此您可以了解数据的“非线性”程度。
我发现,当对非常大的数据进行建模时,与平滑样条或黄土相比,更简单的自然样条通常会提供相似的结果,以最小的计算量。