在R语言中进行局部多项式回归拟合(LOESS)

star2017 1年前 ⋅ 8800 阅读
原文  http://xccds1977.blogspot.com/2011/12/rloess.html
局部多项式回归拟合是对两维散点图进行平滑的常用方法,它结合了传统线性回归的简洁性和非线性回归的灵活性。当要估计某个响应变量值时,先从其预测变量附近取一个数据子集,然后对该子集进行线性回归或二次回归,回归时采用加权最小二乘法,即越靠近估计点的值其权重越大,最后利用得到的局部回归模型来估计响应变量的值。用这种方法进行逐点运算得到整条拟合曲线。

在R语言中进行局部多项式回归拟合是利用loess函数,我们以cars数据集做为例子来看下使用方法。该数据中speed表示行驶速度,dist表示刹车距离。用loess来建立模型时重要的两个参数是span和degree,span表示数据子集的获取范围,取值越大则数据子集越多,曲线越为平滑。degree表示局部回归中的阶数,1表示线性回归,2表示二次回归,也可以取0,此时曲线退化为简单移动平均线。这里我们设span取0.4和0.8,从下图可见取值0.8的蓝色线条较为平滑。

————————
plot(cars,pch=19)
model1=loess(dist~speed,data=cars,span=0.4)
lines(cars$speed,model1$fit,col=’red’,lty=2,lwd=2)
model2=loess(dist~speed,data=cars,span=0.8)
lines(cars$speed,model2$fit,col=’blue’,lty=2,lwd=2)
————————
在R语言中进行局部多项式回归拟合(LOESS)

当模型建立后,也可以类似线性回归那样进行预测和残差分析

————————
x=5:25
predict(model2,data.frame(speed=x))
plot(model2$resid~model2$fit)
————————

R语言中另一个类似的函数是lowess,它在绘图上比较方便,但在功能上不如loess强大和灵活。

————————
plot(cars,pch=19)
lines(lowess(cars),lty=2,lwd=2)
————————

在R语言中进行局部多项式回归拟合(LOESS)

LOESS的优势是并不需要确定具体的函数形式,而是让数据自己来说话,其缺点在于需要大量的数据和运算能力。LOESS作为一种平滑技术,其目的是为了探寻响应变量和预测变量之间的关系,所以LOESS更被看作一种数据探索方法,而不是作为最终的结论。

原创文章,作者:xsmile,如若转载,请注明出处:http://www.17bigdata.com/%e5%9c%a8r%e8%af%ad%e8%a8%80%e4%b8%ad%e8%bf%9b%e8%a1%8c%e5%b1%80%e9%83%a8%e5%a4%9a%e9%a1%b9%e5%bc%8f%e5%9b%9e%e5%bd%92%e6%8b%9f%e5%90%88%ef%bc%88loess%ef%bc%89/

更多内容请访问:IT源点

相关文章推荐

全部评论: 0

    我有话说: