R语言中的多项式回归、局部回归、核平滑和平滑样条回归模型
全文下载链接:http://tecdat.cn/?p=20531
当线性假设无法满足时,可以考虑使用其他方法(点击文末“阅读原文”获取完整代码数据)。
相关视频
多项式回归
扩展可能是假设某些多项式函数,
同样,在标准线性模型方法(使用GLM的条件正态分布)中,参数 可以使用最小二乘法获得,其中 在 。
即使此多项式模型不是真正的多项式模型,也可能仍然是一个很好的近似值 。实际上,根据 Stone-Weierstrass定理,如果 在某个区间上是连续的,则有一个统一的近似值 ,通过多项式函数。
仅作说明,请考虑以下数据集
db = data.frame(x=xr,y=yr)
plot(db)
与标准回归线
reg = lm(y ~ x,data=db)
abline(reg,col="red")
考虑一些多项式回归。如果多项式函数的次数足够大,则可以获得任何一种模型,
reg=lm(y~poly(x,5),data=db)
但是,如果次数太大,那么会获得太多的“波动”,
点击标题查阅往期内容
R语言ISLR工资数据进行多项式回归和样条回归分析
左右滑动查看更多
01
02
03
04
reg=lm(y~poly(x,25),data=db)
并且估计值可能不可靠:如果我们更改一个点,则可能会发生(局部)更改
yrm=yr;yrm\[31\]=yr\[31\]-2
lines(xr,predict(regm),col="red")
局部回归
实际上,如果我们的兴趣是局部有一个很好的近似值 ,为什么不使用局部回归?
使用加权回归可以很容易地做到这一点,在最小二乘公式中,我们考虑
在这里,我考虑了线性模型,但是可以考虑任何多项式模型。在这种情况下,优化问题是
可以解决,因为
例如,如果我们想在某个时候进行预测 , 考虑 。使用此模型,我们可以删除太远的观测值,
更一般的想法是考虑一些核函数 给出权重函数,以及给出邻域长度的一些带宽(通常表示为h),
这实际上就是所谓的 Nadaraya-Watson 函数估计器 。
在前面的案例中,我们考虑了统一核 ,
但是使用这种权重函数具有很强的不连续性不是最好的选择,尝试高斯核,
这可以使用
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进行局部回归。下面的水平线是回归(点的大小与宽度成比例)。红色曲线是局部回归的演变
让我们使用动画来可视化曲线。
但是由于某些原因,我无法在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)
当然,我们可以更改带宽
请注意,实际上,我们必须选择权重函数(所谓的核)。但是,有(简单)方法来选择“最佳”带宽h。交叉验证的想法是考虑
是使用局部回归获得的预测。
我们可以尝试一些真实的数据。
library(XML)data = 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=db,
lines((s predict(reg)\[1:12\]
所有季节都应该被认为是完全独立的,这不是一个很好的假设。
smooth(db$no,db$mu,kernel = "normal",band=5)
我们可以尝试查看带宽较大的曲线。
db$mu\[95\]=7plot(data$no,data$mulines(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<=3lm(yr~xr,subset=xr>=3)
这是不同的,因为这里我们有三个参数(关于两个子集的回归)。当要求连续模型时,失去了一个自由度。观察到可以等效地写
lm(yr~bs(xr,knots=c(3),Boundary.knots=c(0,10)
回归中出现的函数如下
现在,如果我们对这两个分量进行回归,我们得到
matplot(xr,Babline(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),
点击文末“阅读原文”
获取全文完整资料。
本文选自《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语言曲线回归:多项式回归、多项式样条回归、非线性回归数据分析
R语言中的多项式回归、局部回归、核平滑和平滑样条回归模型相关推荐
- 二次拟合r方_拟合R语言中的多项式回归
原标题:拟合R语言中的多项式回归 让我们看一个经济学的例子:假设你想购买一定数量q的特定产品.如果单价是p,那么你会支付总金额y.这是一个线性关系的典型例子.总价格和数量成正比. 如下所示: 但购买和 ...
- 在R语言中实现Logistic逻辑回归
逻辑回归是拟合回归曲线的方法,当y是分类变量时,y = f(x).典型的使用这种模型是给定一组预测的X预测Ÿ.预测因子可以是连续的,分类的或两者的混合.最近我们被客户要求撰写关于Logistic逻辑回 ...
- R语言中的广义线性模型(GLM)和广义相加模型(GAM):多元(平滑)回归分析保险资金投资组合信用风险敞口
最近我们被客户要求撰写关于信用风险敞口的研究报告,包括一些图形和统计输出. 在之前的课堂上,我们已经看到了如何可视化多元回归模型(带有两个连续的解释变量).在此,目标是使用一些协变量(例如,驾驶员的年 ...
- R语言中使用非凸惩罚函数回归(SCAD、MCP)分析前列腺数据
原文链接:http://tecdat.cn/?p=20828 本文使用lasso或非凸惩罚拟合线性回归,GLM和Cox回归模型的正则化,特别是_最小_最_大凹_度_惩罚_函数_(MCP)_和光滑切片绝 ...
- 在R语言中进行局部多项式回归拟合(LOESS)
局部多项式回归拟合是对两维散点图进行平滑的常用方法,它结合了传统线性回归的简洁性和非线性回归的灵活性.当要估计某个响应变量值时,先从其预测变量附近取一个数据子集,然后对该子集进行线性回归或二次回归,回 ...
- R语言使用broom包将回归模型(线性回归、逻辑回归、比例风险回归)的结果整理成dataframe并导出到excel等文件中:基于mtcars和colon数据集
R语言使用broom包将回归模型(线性回归.逻辑回归.比例风险回归)的结果整理成dataframe并导出到excel等文件中:基于mtcars和colon数据集 目录
- R语言使用lm函数构建回归模型、使用broom包的augmented函数将模型结果存入dataframe中、使用ggplot2可视化回归残差图(拟合值和残差值的关系图)
R语言使用lm函数构建回归模型.使用broom包的augmented函数将模型结果存入dataframe中.使用ggplot2可视化回归残差图(拟合值和残差值的关系图) 目录
- R语言使用glm构建logistic回归模型,构建多个协变量和分组变量之间的关系模型进行倾向性评分计算、使用predict函数预测倾向性评分并将结果整合到dataframe中
R语言使用glm构建logistic回归模型,构建多个协变量和分组变量之间的关系模型进行倾向性评分计算.估计(Propensity score).使用predict函数预测倾向性评分并将结果整合到da ...
- R语言中通过鞅残差(martingale residual)分析、可视化自变量与鞅残差的关系判断指定连续变量和风险比HR值是否存在着线性趋势、Cox回归对线性条件的诊断
R语言中通过鞅残差(martingale residual)分析.可视化自变量与鞅残差的关系判断指定连续变量和风险比HR值是否存在着线性趋势.Cox回归对线性条件的诊断 目录
最新文章
- Python爬无止境,获得王者荣耀全部高清皮肤
- 【 C 】在单链表中插入一个新节点的尝试(一)
- 9点到17点半 cron_SpringQuartz定时任务的cron表达式书写
- Window平台下的Android的环境配置
- DataGrid双向排序以及给HeaderText加图标
- 单例模式双重校验锁_被面试官虐过之后,他轻蔑的问我:你还说你了解单例模式吗?...
- 简单团队-爬虫豆瓣top250-项目总结
- Python3 使用[]提取字符
- [转]php获取含中文字符串长度
- Mysql(4)——数据库相关操作
- python调试和测试有什么区别和联系_软件测试和测试开发到底有什么区别跟联系?...
- Windows下rocketmq mqnamesrv.exe 启动成功,但是mqbroker.exe启动失败
- 安卓网页离线保存_Android之 -WebView实现离线缓存阅读
- 第十章--聚类分析 第5组 小组作业
- 嵌入式ARM核心板介绍
- Python学习_100Days
- docker命令安装rap2阿里开源接口管理工具
- 学习记录 重叠网络权威知识——多尺度复杂网络社区发现的链接
- react cron表达式生成组件qnn-react-cron
- Android键盘和触摸事件处理
热门文章
- c# 解决:Panel 添加自定义控件后滚动条跳动问题
- 关于mysql百万100W数据查询优化
- oracle ebs form查询,Oracle EBS FORM 更改记录状态
- vue 避免全局样式污染的正确做法
- Android Studio 微信分享功能(包括可以分享到朋友圈,分享到朋友)
- 第一课 request传参
- 习题 11.1 将例11.1的程序片断补充和改写成一个完整、正确的程序,用公用继承方式。在程序中应包括输入数据的函数,在程序运行时输入num,name,sex,age,addr的值,程序应输出以上。。
- 计算机网络专业运动会入场式,这所学校运动会开幕式亮了!各方阵带着专业C位亮相...
- 河南新华计算机学校学费多少,河南新华电脑学院提前三年收费 育人还是圈钱?...
- 快速上手 ClickHouse