原文链接:http://tecdat.cn/?p=20531
在标准线性模型中 , 我们假设。 当线性假设无法满足时 , 可以考虑使用其他方法 。
文章图片
多项式回归 扩展可能是假设某些多项式函数 ,
文章图片
同样 , 在标准线性模型方法(使用GLM的条件正态分布)中 , 参数 可以使用最小二乘法获得 , 其中 在。
文章图片
文章图片
文章图片
即使此多项式模型不是真正的多项式模型 , 也可能仍然是一个很好的近似值。 实际上 , 根据 Stone-Weierstrass定理 , 如果 在某个区间上是连续的 , 则有一个统一的近似值, 通过多项式函数 。
文章图片
文章图片
文章图片
仅作说明 , 请考虑以下数据集
- db = data.frame(x=xr,y=yr)
- plot(db)
文章图片
与标准回归线
- reg = lm(y ~ x,data=https://www.sohu.com/a/db)
- abline(reg,col="red")
文章图片
考虑一些多项式回归 。 如果多项式函数的次数足够大 , 则可以获得任何一种模型 ,
reg=lm(y~poly(x,5),data=https://www.sohu.com/a/db)
文章图片
但是 , 如果次数太大 , 那么会获得太多的“波动” ,
reg=lm(y~poly(x,25),data=https://www.sohu.com/a/db)
文章图片
并且估计值可能不可靠:如果我们更改一个点 , 则可能会发生(局部)更改
- yrm=yr;yrm[31]=yr[31]-2
- lines(xr,predict(regm),col="red")
文章图片
局部回归 实际上 , 如果我们的兴趣是局部有一个很好的近似值, 为什么不使用局部回归?
文章图片
使用加权回归可以很容易地做到这一点 , 在最小二乘公式中 , 我们考虑
文章图片
- 在这里 , 我考虑了线性模型 , 但是可以考虑任何多项式模型 。 在这种情况下 , 优化问题是
文章图片
文章图片
【函数|拓端tecdat|R语言中的多项式回归、局部回归、核平滑和平滑样条回归模型】例如 , 如果我们想在某个时候进行预测,考虑。 使用此模型 , 我们可以删除太远的观测值 ,
文章图片
文章图片
更一般的想法是考虑一些核函数 给出权重函数 , 以及给出邻域长度的一些带宽(通常表示为h) ,
文章图片
文章图片
这实际上就是所谓的 Nadaraya-Watson 函数估计器。
文章图片
在前面的案例中 , 我们考虑了统一核,
文章图片
但是使用这种权重函数具有很强的不连续性不是最好的选择 , 尝试高斯核 ,
文章图片
这可以使用
- w=dnorm((xr-x0))
- reg=lm(y~1,data=https://www.sohu.com/a/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=https://www.sohu.com/a/db,weights=w)
- u=seq(0,10,by=.02)
- v=predict(reg,newdata=https://www.sohu.com/a/data.frame(x=u))
- lines(u,v,col="red",lwd=2)
文章图片
让我们使用动画来可视化曲线 。
但是由于某些原因 , 我无法在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=https://www.sohu.com/a/data.frame(x=x0)))}
文章图片
甚至是二次(局部)回归 ,
- lm(y~poly(x,degree=2), weights=w)
文章图片
当然 , 我们可以更改带宽
文章图片
请注意 , 实际上 , 我们必须选择权重函数(所谓的核) 。 但是 , 有(简单)方法来选择“最佳”带宽h 。 交叉验证的想法是考虑
文章图片
是使用局部回归获得的预测 。
文章图片
我们可以尝试一些真实的数据 。
- library(XML)
- data = https://www.sohu.com/a/readHTMLTable(html)
- plot(data$no,data$mu,ylim=c(6,10))
- segments(data$no,data$mu-1.96*data$se,
文章图片
我们计算标准误差 , 反映不确定性 。
- for(s in 1:8){reg=lm(mu~no,data=https://www.sohu.com/a/db,
- lines((s predict(reg)[1:12]
文章图片
所有季节都应该被认为是完全独立的 , 这不是一个很好的假设 。
smooth(db$no,db$mu,kernel = "normal",band=5)
文章图片
我们可以尝试查看带宽较大的曲线 。
- db$mu[95]=7
- plot(data$no,data$mu
- lines(NW,col="red")
文章图片
样条平滑 接下来 , 讨论回归中的平滑方法 。 假设,是一些未知函数 , 但假定足够平滑 。 例如 , 假设 是连续的 ,存在 , 并且是连续的 ,存在并且也是连续的等等 。 如果 足够平滑 ,可以使用泰勒展开式 。因此 , 对于
文章图片
文章图片
文章图片
文章图片
文章图片
文章图片
文章图片
也可以写成
文章图片
第一部分只是一个多项式 。
使用 黎曼积分 , 观察到
文章图片
因此 ,
文章图片
我们有线性回归模型 。 一个自然的想法是考虑回归, 对于
文章图片
给一些节点。
plot(db)
文章图片
如果我们考虑一个节点 , 并扩展阶数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)
文章图片
这是不同的 , 因为这里我们有三个参数(关于两个子集的回归) 。 当要求连续模型时 , 失去了一个自由度 。 观察到可以等效地写
- lm(yr~bs(xr,knots=c(3),Boundary.knots=c(0,10)
文章图片
现在 , 如果我们对这两个分量进行回归 , 我们得到
- matplot(xr,B
- abline(v=c(0,2,5,10),lty=2)
文章图片
预测是
- lines(xr,predict(reg),col="red")
文章图片
我们可以选择更多的节点
- lines(xr,predict(reg),col="red")
文章图片
我们可以得到一个置信区间
- polygon(c(xr,rev(xr)),c(P[,2],rev(P[,3]))
- points(db)
文章图片
如果我们保持先前选择的两个节点 , 但考虑泰勒的2阶的展开 , 我们得到
- matplot(xr,B,type="l")
- abline(v=c(0,2,5,10),lty=2)
文章图片
如果我们考虑常数和基于样条的第一部分 , 我们得到
- B=cbind(1,B)
- lines(xr,B[,1:k]%*%coefficients(reg)[1:k],col=k-1,lty=k-1)
文章图片
如果我们将常数项 , 第一项和第二项相加 , 则我们得到的部分在第一个节点之前位于左侧 ,
- k=3
- lines(xr,B[,1:k]%*%coefficients(reg)[1:k]
文章图片
通过基于样条的矩阵中的三个项 , 我们可以得到两个节点之间的部分 ,
- lines(xr,B[,1:k]%*%coefficients(reg)[1:k]
文章图片
最后 , 当我们对它们求和时 , 这次是最后一个节点之后的右侧部分 ,
- k=5
文章图片
这是我们使用带有两个(固定)节点的二次样条回归得到的结果 。 可以像以前一样获得置信区间
- polygon(c(xr,rev(xr)),c(P[,2],rev(P[,3]))
- points(db)
- lines(xr,P[,1],col="red")
文章图片
使用函数, 可以确保点的连续性。
文章图片
再一次 , 使用线性样条函数 , 可以增加连续性约束 ,
- lm(mu~bs(no,knots=c(12*(1:7)+.5),Boundary.knots=c(0,97),
- lines(c(1:94,96),predict(reg),col="red")
文章图片
但是我们也可以考虑二次样条 ,
- abline(v=12*(0:8)+.5,lty=2)
- lm(mu~bs(no,knots=c(12*(1:7)+.5),Boundary.knots=c(0,97),
文章图片
文章图片
最受欢迎的见解
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指标
推荐阅读
- 字符串|常用Excel函数知识学习篇1.0
- 函数|NeurIPS 2021 | 华为诺亚Oral论文:基于频域的二值神经网络训练方法
- 测试|普源DG5000系列函数/任意波形发生器功能解析
- 人物|把数学函数印在T恤上却被告侵权 这位程序员怒了
- 量子|科学家实现用量子系统 得到黎曼函数前80个零点
- 广告|拓端tecdat|移动广告中基于点击率的数据策略
- XTrain|拓端tecdat|matlab使用长短期记忆(LSTM)神经网络对序列数据进行分类
- 分析|拓端tecdat|R语言文本挖掘NASA数据网络分析,tf-idf和主题建模
- 模型|拓端tecdat|R语言多元逐步回归模型分析房价和葡萄酒价格:选择最合适预测变量
- 偏差|拓端tecdat|在Python和R中使用交叉验证方法提高模型性能