R语言中的多项式回归、局部回归、核平滑和平滑样条回归模型

全文下载链接:http://tecdat.cn/?p=20531

当线性假设无法满足时,可以考虑使用其他方法点击文末“阅读原文”获取完整代码数据

相关视频

多项式回归

扩展可能是假设某些多项式函数,

ac822f2f8655706b06ee38aeb2de65a7.png

同样,在标准线性模型方法(使用GLM的条件正态分布)中,参数 9e6ab46ca6393dcd0ab849cef532d90e.png 可以使用最小二乘法获得,其中 491bf23f10f5400259adc507e5f3b3a4.png 在 75992dceb40882f7b633e8f0a5d24808.png 。

即使此多项式模型不是真正的多项式模型,也可能仍然是一个很好的近似值 38f7fc1fe9f876c644572860c2a7ed65.png。实际上,根据 Stone-Weierstrass定理,如果 fdf1b2073e5a01b4dff3fa7a456a7dbb.png 在某个区间上是连续的,则有一个统一的近似值 bfb69ff980dc48bd0e7f9c93cd58d07f.png ,通过多项式函数。

仅作说明,请考虑以下数据集

db = data.frame(x=xr,y=yr)
plot(db)

R语言中的多项式回归、局部回归、核平滑和平滑样条回归模型_第1张图片

与标准回归线

reg = lm(y ~ x,data=db)
abline(reg,col="red")

R语言中的多项式回归、局部回归、核平滑和平滑样条回归模型_第2张图片

考虑一些多项式回归。如果多项式函数的次数足够大,则可以获得任何一种模型,

reg=lm(y~poly(x,5),data=db)

R语言中的多项式回归、局部回归、核平滑和平滑样条回归模型_第3张图片

但是,如果次数太大,那么会获得太多的“波动”,


点击标题查阅往期内容

R语言中的多项式回归、局部回归、核平滑和平滑样条回归模型_第4张图片

R语言ISLR工资数据进行多项式回归和样条回归分析

outside_default.png

左右滑动查看更多

outside_default.png

01

R语言中的多项式回归、局部回归、核平滑和平滑样条回归模型_第5张图片

02

R语言中的多项式回归、局部回归、核平滑和平滑样条回归模型_第6张图片

03

R语言中的多项式回归、局部回归、核平滑和平滑样条回归模型_第7张图片

04

R语言中的多项式回归、局部回归、核平滑和平滑样条回归模型_第8张图片

reg=lm(y~poly(x,25),data=db)

R语言中的多项式回归、局部回归、核平滑和平滑样条回归模型_第9张图片

并且估计值可能不可靠:如果我们更改一个点,则可能会发生(局部)更改

yrm=yr;yrm\[31\]=yr\[31\]-2 
lines(xr,predict(regm),col="red")

R语言中的多项式回归、局部回归、核平滑和平滑样条回归模型_第10张图片

  • 局部回归

实际上,如果我们的兴趣是局部有一个很好的近似值  3d2af30469979f6a7c59ca0e8bf50066.png,为什么不使用局部回归?

使用加权回归可以很容易地做到这一点,在最小二乘公式中,我们考虑

7633a40cf65b86e970c1e715d59110fc.png

  • 在这里,我考虑了线性模型,但是可以考虑任何多项式模型。在这种情况下,优化问题是

57b3b984ddd0aba00563d6a719fcc01f.png可以解决,因为

4906979f6a0629e60715804e88ef0d73.png

例如,如果我们想在某个时候进行预测 , 考虑 224aea600da21727a30df10f591ddb70.png。使用此模型,我们可以删除太远的观测值,

R语言中的多项式回归、局部回归、核平滑和平滑样条回归模型_第11张图片

更一般的想法是考虑一些核函数 d2d19a4eb4bb2ff97f24a6183f19a674.png 给出权重函数,以及给出邻域长度的一些带宽(通常表示为h),

6c9f11e593a30e4f450655962d5f2f75.png

这实际上就是所谓的 Nadaraya-Watson 函数估计器 08fa348bd02783d694de98b58f0fe36c.png
在前面的案例中,我们考虑了统一核 a45576eee4a71c77b12007f8a1c275c9.png

但是使用这种权重函数具有很强的不连续性不是最好的选择,尝试高斯核,

7733a244e55581921b6b5b609038781f.png

这可以使用

w=dnorm((xr-x0))
reg=lm(y~1,data=db,weights=w)

在我们的数据集上,我们可以绘制

w=dnorm((xr-x0))
plot(db,cex=abs(w)*4)
lines(ul,vl0,col="red")
axis(3)
axis(2)
reg=lm(y~1,data=db,weights=w)
u=seq(0,10,by=.02)
v=predict(reg,newdata=data.frame(x=u))
lines(u,v,col="red",lwd=2)

在这里,我们需要在点2进行局部回归。下面的水平线是回归(点的大小与宽度成比例)。红色曲线是局部回归的演变

R语言中的多项式回归、局部回归、核平滑和平滑样条回归模型_第12张图片

让我们使用动画来可视化曲线。

但是由于某些原因,我无法在Linux上轻松安装该软件包。我们可以使用循环来生成一些图形

name=paste("local-reg-",100+i,".png",sep="")
png(name,600,400)
 

for(i in 1:length(vx0)) graph (i)

然后,我使用

当然,可以考虑局部线性模型,

return(predict(reg,newdata=data.frame(x=x0)))}

甚至是二次(局部)回归,

lm(y~poly(x,degree=2), weights=w)

当然,我们可以更改带宽

R语言中的多项式回归、局部回归、核平滑和平滑样条回归模型_第13张图片

请注意,实际上,我们必须选择权重函数(所谓的核)。但是,有(简单)方法来选择“最佳”带宽h。交叉验证的想法是考虑

99f6b2c06ec196d12ec368f7faa37acf.png

c82fdde00a13f273695332b87c7984dd.png 是使用局部回归获得的预测。  

我们可以尝试一些真实的数据。

library(XML)
 
data = readHTMLTable(html)

整理数据集,

plot(data$no,data$mu,ylim=c(6,10))
segments(data$no,data$mu-1.96*data$se,

R语言中的多项式回归、局部回归、核平滑和平滑样条回归模型_第14张图片

我们计算标准误差,反映不确定性。

for(s in 1:8){reg=lm(mu~no,data=db, 
lines((s predict(reg)\[1:12\]

R语言中的多项式回归、局部回归、核平滑和平滑样条回归模型_第15张图片

所有季节都应该被认为是完全独立的,这不是一个很好的假设。

smooth(db$no,db$mu,kernel = "normal",band=5)

R语言中的多项式回归、局部回归、核平滑和平滑样条回归模型_第16张图片

我们可以尝试查看带宽较大的曲线。

db$mu\[95\]=7
  
plot(data$no,data$mu

lines(NW,col="red")

R语言中的多项式回归、局部回归、核平滑和平滑样条回归模型_第17张图片

样条平滑

接下来,讨论回归中的平滑方法。假设056d4ba31cdcd3ce30ae3e699767699d.png , 60a1dca48ee06377c9353b4d291c2db5.png 是一些未知函数,但假定足够平滑。例如,假设 dc62f640ea9b36dd0a0f4dfd137dc682.png 是连续的, 9610ed619162a64028c5c822ca6094fe.png 存在,并且是连续的,  58dbe020c48854f81d37bd5af504cb89.png 存在并且也是连续的等等。如果 70898d81a861c38b5380f859587f4529.png 足够平滑,  可以使用泰勒展开式。 因此,对于 ac753178fb0cd9ff745111e2d229e846.png

010c7ea97404b1bd269e3cd64b3e2191.png

也可以写成

44ced6f0b8e913707e4fca4b6e787f4b.png

第一部分只是一个多项式。

使用 黎曼积分,观察到

b247040f59f9f9ce98a51beb7f5533c0.png

因此,

af3fde55a237628f8fcb040bb60b03ca.png

我们有线性回归模型。一个自然的想法是考虑回归 ,对于  

b99808d73dd98b22a640ad7984fd9c3f.png

给一些节点 。

plot(db)

R语言中的多项式回归、局部回归、核平滑和平滑样条回归模型_第18张图片

如果我们考虑一个节点,并扩展阶数1,

B=bs(xr,knots=c(3),Boundary.knots=c(0,10),degre=1)
 
lines(xr\[xr<=3\],predict(reg)\[xr<=3\],col="red")
lines(xr\[xr>=3\],predict(reg)\[xr>=3\],col="blue")

可以将用该样条获得的预测与子集(虚线)上的回归进行比较。

lines(xr\[xr<=3\],predict(reg)\[xr<=3


lm(yr~xr,subset=xr>=3)

R语言中的多项式回归、局部回归、核平滑和平滑样条回归模型_第19张图片

这是不同的,因为这里我们有三个参数(关于两个子集的回归)。当要求连续模型时,失去了一个自由度。观察到可以等效地写

lm(yr~bs(xr,knots=c(3),Boundary.knots=c(0,10)

回归中出现的函数如下

R语言中的多项式回归、局部回归、核平滑和平滑样条回归模型_第20张图片

现在,如果我们对这两个分量进行回归,我们得到

matplot(xr,B

abline(v=c(0,2,5,10),lty=2)

如果加一个节点,我们得到

R语言中的多项式回归、局部回归、核平滑和平滑样条回归模型_第21张图片

预测是

lines(xr,predict(reg),col="red")

R语言中的多项式回归、局部回归、核平滑和平滑样条回归模型_第22张图片

我们可以选择更多的节点

lines(xr,predict(reg),col="red")

R语言中的多项式回归、局部回归、核平滑和平滑样条回归模型_第23张图片

我们可以得到一个置信区间

polygon(c(xr,rev(xr)),c(P\[,2\],rev(P\[,3\]))

points(db)

R语言中的多项式回归、局部回归、核平滑和平滑样条回归模型_第24张图片

如果我们保持先前选择的两个节点,但考虑泰勒的2阶的展开,我们得到

matplot(xr,B,type="l")
abline(v=c(0,2,5,10),lty=2)

R语言中的多项式回归、局部回归、核平滑和平滑样条回归模型_第25张图片

如果我们考虑常数和基于样条的第一部分,我们得到

B=cbind(1,B)
lines(xr,B\[,1:k\]%*%coefficients(reg)\[1:k\],col=k-1,lty=k-1)

R语言中的多项式回归、局部回归、核平滑和平滑样条回归模型_第26张图片

如果我们将常数项,第一项和第二项相加,则我们得到的部分在第一个节点之前位于左侧,

k=3
lines(xr,B\[,1:k\]%*%coefficients(reg)\[1:k\]

R语言中的多项式回归、局部回归、核平滑和平滑样条回归模型_第27张图片

通过基于样条的矩阵中的三个项,我们可以得到两个节点之间的部分,

lines(xr,B\[,1:k\]%*%coefficients(reg)\[1:k\]

R语言中的多项式回归、局部回归、核平滑和平滑样条回归模型_第28张图片

最后,当我们对它们求和时,这次是最后一个节点之后的右侧部分,

k=5

R语言中的多项式回归、局部回归、核平滑和平滑样条回归模型_第29张图片

这是我们使用带有两个(固定)节点的二次样条回归得到的结果。可以像以前一样获得置信区间

polygon(c(xr,rev(xr)),c(P\[,2\],rev(P\[,3\]))

points(db)
lines(xr,P\[,1\],col="red")

R语言中的多项式回归、局部回归、核平滑和平滑样条回归模型_第30张图片

使用函数 ,可以确保点的连续性 。

R语言中的多项式回归、局部回归、核平滑和平滑样条回归模型_第31张图片

再一次,使用线性样条函数,可以增加连续性约束,

lm(mu~bs(no,knots=c(12*(1:7)+.5),Boundary.knots=c(0,97),


lines(c(1:94,96),predict(reg),col="red")

R语言中的多项式回归、局部回归、核平滑和平滑样条回归模型_第32张图片

但是我们也可以考虑二次样条,

abline(v=12*(0:8)+.5,lty=2)

lm(mu~bs(no,knots=c(12*(1:7)+.5),Boundary.knots=c(0,97),

R语言中的多项式回归、局部回归、核平滑和平滑样条回归模型_第33张图片


R语言中的多项式回归、局部回归、核平滑和平滑样条回归模型_第34张图片

点击文末“阅读原文”

获取全文完整资料。

本文选自《R语言中的多项式回归、局部回归、核平滑和平滑样条回归模型》。

点击标题查阅往期内容

Stata中的治疗效果:RA:回归调整、 IPW:逆概率加权、 IPWRA、 AIPW

R语言混合线性模型、多层次模型、回归模型分析学生平均成绩GPA和可视化

样条曲线分段线性回归模型piecewise regression估计个股beta值分析收益率数据

R语言RSTAN MCMC:NUTS采样算法用LASSO 构建贝叶斯线性回归模型分析职业声望数据

PYTHON用户流失数据挖掘:建立逻辑回归、XGBOOST、随机森林、决策树、支持向量机、朴素贝叶斯和KMEANS聚类用户画像

Python中的Lasso回归之最小角算法LARS

R语言多项式线性模型:最大似然估计二次曲线

R语言中的多项式回归、B样条曲线(B-spline Curves)回归

R语言广义线性模型GLM、多项式回归和广义可加模型GAM预测泰坦尼克号幸存者

R语言用多项式回归和ARIMA模型预测电力负荷时间序列数据

R语言曲线回归:多项式回归、多项式样条回归、非线性回归数据分析

R语言ISLR工资数据进行多项式回归和样条回归分析

R语言用泊松Poisson回归、GAM样条曲线模型预测骑自行车者的数量

R语言分位数回归、GAM样条曲线、指数平滑和SARIMA对电力负荷时间序列预测

R语言自适应平滑样条回归分析

R语言非参数模型厘定保险费率:局部回归、广义相加模型GAM、样条回归

基于R统计软件的三次样条和平滑样条模型数据拟合及预测

R语言曲线回归:多项式回归、多项式样条回归、非线性回归数据分析 

ca9414be7c1f528eaa1088d5274cc96a.png

0c29032b62d5b0eb21bf2dbb53e7cf54.jpeg

R语言中的多项式回归、局部回归、核平滑和平滑样条回归模型_第35张图片

你可能感兴趣的:(R语言中的多项式回归、局部回归、核平滑和平滑样条回归模型)