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

原文链接:http://tecdat.cn/?p=20531

 

在标准线性模型中,我们假设 R语言中的多项式回归、局部回归、核平滑和平滑样条回归模型。当线性假设无法满足时,可以考虑使用其他方法。

  • 多项式回归

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

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

同样,在标准线性模型方法(使用GLM的条件正态分布)中,参数 R语言中的多项式回归、局部回归、核平滑和平滑样条回归模型 可以使用最小二乘法获得,其中 R语言中的多项式回归、局部回归、核平滑和平滑样条回归模型 在 R语言中的多项式回归、局部回归、核平滑和平滑样条回归模型 。

即使此多项式模型不是真正的多项式模型,也可能仍然是一个很好的近似值 R语言中的多项式回归、局部回归、核平滑和平滑样条回归模型。实际上,根据 Stone-Weierstrass定理,如果 R语言中的多项式回归、局部回归、核平滑和平滑样条回归模型 在某个区间上是连续的,则有一个统一的近似值 R语言中的多项式回归、局部回归、核平滑和平滑样条回归模型 ,通过多项式函数。

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

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

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

与标准回归线

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

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

 

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

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

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

 

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

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

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

 

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

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

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

  • 局部回归

实际上,如果我们的兴趣是局部有一个很好的近似值  R语言中的多项式回归、局部回归、核平滑和平滑样条回归模型,为什么不使用局部回归?

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

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

 

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

R语言中的多项式回归、局部回归、核平滑和平滑样条回归模型可以解决,因为

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

例如,如果我们想在某个时候进行预测 , 考虑 R语言中的多项式回归、局部回归、核平滑和平滑样条回归模型。使用此模型,我们可以删除太远的观测值,

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

 

更一般的想法是考虑一些核函数 R语言中的多项式回归、局部回归、核平滑和平滑样条回归模型 给出权重函数,以及给出邻域长度的一些带宽(通常表示为h),

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

这实际上就是所谓的 Nadaraya-Watson 函数估计器 R语言中的多项式回归、局部回归、核平滑和平滑样条回归模型
在前面的案例中,我们考虑了统一核 R语言中的多项式回归、局部回归、核平滑和平滑样条回归模型

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

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

这可以使用

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

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

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

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

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

 

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

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

  1.    
  2.   name=paste("local-reg-",100+i,".png",sep="")
  3.   png(name,600,400)
  4.    
  5.    
  6.   for(i in 1:length(vx0)) graph (i)

然后,我使用

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

 

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

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

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

 

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

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

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

 

当然,我们可以更改带宽

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

 

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

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

 R语言中的多项式回归、局部回归、核平滑和平滑样条回归模型 是使用局部回归获得的预测。  

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

  1.   library(XML)
  2.    
  3.   data = readHTMLTable(html)

整理数据集,

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

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

 

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

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

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

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

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

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

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

  1.   db$mu[95]=7
  2.    
  3.   plot(data$no,data$mu
  4.    
  5.   lines(NW,col="red")

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

样条平滑

接下来,讨论回归中的平滑方法。假设R语言中的多项式回归、局部回归、核平滑和平滑样条回归模型 , R语言中的多项式回归、局部回归、核平滑和平滑样条回归模型 是一些未知函数,但假定足够平滑。例如,假设 R语言中的多项式回归、局部回归、核平滑和平滑样条回归模型 是连续的, R语言中的多项式回归、局部回归、核平滑和平滑样条回归模型 存在,并且是连续的,  R语言中的多项式回归、局部回归、核平滑和平滑样条回归模型 存在并且也是连续的等等。如果 R语言中的多项式回归、局部回归、核平滑和平滑样条回归模型 足够平滑,  可以使用泰勒展开式。 因此,对于 R语言中的多项式回归、局部回归、核平滑和平滑样条回归模型

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

也可以写成

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

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

使用 黎曼积分,观察到

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

 

因此,

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

我们有线性回归模型。一个自然的想法是考虑回归 R语言中的多项式回归、局部回归、核平滑和平滑样条回归模型,对于 R语言中的多项式回归、局部回归、核平滑和平滑样条回归模型 

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

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

plot(db)

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

 

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

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

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

  1.    
  2.    
  3.   lines(xr[xr<=3],predict(reg)[xr<=3
  4.    
  5.    
  6.   lm(yr~xr,subset=xr>=3)
  7.    

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

 

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

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

 

回归中出现的函数如下

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

 

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

  1.    
  2.   matplot(xr,B
  3.    
  4.   abline(v=c(0,2,5,10),lty=2)

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

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

 

预测是

  1.    
  2.    
  3.   lines(xr,predict(reg),col="red")

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

我们可以选择更多的节点

  1.    
  2.    
  3.   lines(xr,predict(reg),col="red")

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

 

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

  1.    
  2.    
  3.   polygon(c(xr,rev(xr)),c(P[,2],rev(P[,3]))
  4.    
  5.   points(db)
  6.    

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

 

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

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

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

 

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

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

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

 

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

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

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

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

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

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

 

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

  1.   k=5
  2.    

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

 

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

  1.    
  2.    
  3.   polygon(c(xr,rev(xr)),c(P[,2],rev(P[,3]))
  4.    
  5.   points(db)
  6.   lines(xr,P[,1],col="red")
  7.    

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

 

使用函数 R语言中的多项式回归、局部回归、核平滑和平滑样条回归模型,可以确保点的连续性 R语言中的多项式回归、局部回归、核平滑和平滑样条回归模型

 

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

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

  1.    
  2.   lm(mu~bs(no,knots=c(12*(1:7)+.5),Boundary.knots=c(0,97),
  3.    
  4.    
  5.   lines(c(1:94,96),predict(reg),col="red")

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

 

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

  1.    
  2.    
  3.   abline(v=12*(0:8)+.5,lty=2)
  4.    
  5.   lm(mu~bs(no,knots=c(12*(1:7)+.5),Boundary.knots=c(0,97),

 

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


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

最受欢迎的见解

1.R语言多元Logistic逻辑回归 应用案例

2.面板平滑转移回归(PSTR)分析案例实现

3.matlab中的偏最小二乘回归(PLSR)和主成分回归(PCR)

4.R语言泊松Poisson回归模型分析案例

5.R语言回归中的Hosmer-Lemeshow拟合优度检验

6.r语言中对LASSO回归,Ridge岭回归和Elastic Net模型实现

7.在R语言中实现Logistic逻辑回归

8.python用线性回归预测股票价格

9.R语言如何在生存分析与Cox回归中计算IDI,NRI指标

上一篇:1077 Kuchiguse (20 分)


下一篇:python进行文件操作