R语言集成模型(提升树boosting、随机森林、约束最小二乘法加权平均模型融合分析时间序列数据)
原文链接:http://tecdat.cn/?p=24148
特别是在经济学/计量经济学中,建模者不相信他们的模型能反映现实。比如:收益率曲线并不遵循三因素的Nelson-Siegel模型,股票与其相关因素之间的关系并不是线性的,波动率也不遵循Garch(1,1)过程,或者Garch(?,?)。我们只是试图为我们看到的现象找到一个合适的描述。
模型的发展往往不是由我们的理解决定的,而是由新的数据的到来决定的,这些数据并不适合现有的看法。有些人甚至可以说,现实没有基本的模型(或数据生成过程)。正如汉森在《计量经济学模型选择的挑战》中写道。
“模型应该被视为近似值,计量经济学理论应该认真对待这一点”所有的理论都自然而然地遵循 "如果这是一个过程,那么我们就显示出对真实参数的收敛性 "的思路。收敛性很重要,但这是一个很大的假设。无论是否存在这样的过程,这样的真实模型,我们都不知道它是什么。同样,特别是在社会科学领域,即使有一个真正的GDP,你可以认为它是可变的。
这种讨论引起了模型的组合,或者预测未来的组合。如果我们不知道潜在的真相,结合不同的选择,或不同的建模方法可能会产生更好的结果。
模型平均 让我们使用 3 种不同的模型对时间序列数据进行预测。简单回归 (OLS)、提升树和随机森林。一旦获得了三个预测,我们就可以对它们进行平均。
# 加载代码运行所需的软件包。如果你缺少任何软件包,先安装。tem <- lappy(c("randomoest", "gb", "quanteg"), librry, charter.oly=T)# 回归模型。 moelm <- lm(y~x1+x2, data=https://www.it610.com/article/f)molrf <- ranmFrst(y~x1+x2, dta=df)mogm <- gb(ata=df, g.x=1:2, b.y=4
faiy ="gssian", tre.comle = 5, eain.rate = 0.01, bg.fratn = 0.5)# 现在我们对样本外的预测。#-------------------------------Tt_ofsamp <- 500boosf <- pbot(df\_new$x1, df\_new$x2)rfft <- pf(df\_new$x1, df\_new$x2)lmt <- pm(df\_new$x1, df\_new$x2)# 绑定预测mtfht <- cbind(bo\_hat, f\_fat, lm_at)# 命名这些列c("Boosting", "Random Forest", "OLS")# 定义一个预测组合方案。# 为结果留出空间。resls <- st()# 最初的30个观测值作为初始窗口# 重新估计新的观测值到达it_inw = 30for(i in 1:leth(A_shes)){
A\_nw$y, mt\_fht,Aeng\_hee= A\_scmes\[i, n_wiow = intwdow )}# 该函数输出每个预测平均方案的MSE。# 让我们检查一下各个方法的MSE是多少。atr <- apy(ma\_ht, 2, fucon(x) (df\_wy - x)^2 )apy(ma\_er\[nitnow:Tou\_o_saple, \], 2, fncon(x) 100*( man(x) ) )
文章图片
在这种情况下,最准确的方法是提升。但是,在其他一些情况下,根据情况,随机森林会比提升更好。如果我们使用约束最小二乘法,我们可以获得几乎最准确的结果,但这不需要事先选择 Boosting 、Random Forest 方法。继续介绍性讨论,我们只是不知道哪种模型会提供最佳结果以及何时会这样做。
加权平均模型融合预测
文章图片
是你的预测变量,
文章图片
是时间预测
文章图片
,从方法
文章图片
, 和
文章图片
例如OLS,
文章图片
提升树和
文章图片
是随机森林。您可以只取预测的平均值:
文章图片
通常,这个简单的平均值表现非常好。
在 OLS 平均中,我们简单地将预测投影到目标上,所得系数用作权重:
文章图片
这是相当不稳定的。所有预测都有相同的目标,因此它们很可能是相关的,这使得估计系数变得困难。稳定系数的一个不错的方法是使用约束优化,即您解决最小二乘问题,但在以下约束下:
文章图片
另一种方法是根据预测的准确程度对预测进行平均化,直到基于一些指标如根MSE。我们反转权重,使更准确的(低RMSE)获得更多权重。
文章图片
您可以绘制各个方法的权重:
文章图片
文章图片
文章图片
这是预测平均方法。
## 需要的子程序。er <- funcion(os, red){ man( (os - ped)^2 ) }## 不同的预测平均方案##简单rd <- aply(a_at, 1, an)wehs <- trx( 1/p, now = TT, ncl = p)## OLS权重wgs <- marx( nol=(p+1)T)for (i in in_wnow:TT) {wghs\[i,\] <- lm $oefpd <- t(eigs\[i,\])%*%c(1, aht\[i,\] )## 稳健的权重for (i in iitnow:T) {whs\[i,\] <- q(bs\[1:(i-1)\]~ aft\[1:(i-1),\] )$cefprd\[i\] <- t(wihs\[i,\] )*c(1, atfha\[i,\])##基于误差的方差。MSE的倒数for (i in n_no:TT) {mp =aply(aerr\[1:(i-1),\]^2,2,ean)/um(aply(mter\[1:(i-1),\]^2,2,man))wigs\[i,\] <- (1/tmp)/sum(1/tep)ped\[i\] <- t(wits\[i,\] )%*%c(maat\[i,\] )##使用约束最小二乘法for (i in itd:wTT) {weht\[i,\] <- s1(bs\[1:(i-1)\], a_fat\[1:(i-1),\] )$wigtsred\[i\] <- t(wehs\[i,\])%*%c(aht\[i,\] )##根据损失的平方函数,挑选出迄今为止表现最好的模型tmp <- apy(mt\_fat\[-c(1:iit\_wdow),\], 2, ser, obs= obs\[-c(1:ntwiow)\] )for (i in it_idw:TT) {wghs\[i,\] <- rp(0,p)wihts\[i, min(tep)\] <- 1ped\[i\] <- t(wiht\[i,\] )*c(mht\[i,\] )} }MSE <- sr(obs= os\[-c(1:intiow)\], red= red\[-c(1:itwiow)\])
文章图片
最受欢迎的见解
1.在python中使用lstm和pytorch进行时间序列预测
2.python中利用长短期记忆模型lstm进行时间序列预测分析
3.使用r语言进行时间序列(arima,指数平滑)分析
4.r语言多元copula-garch-模型时间序列预测
5.r语言copulas和金融时间序列案例
6.使用r语言随机波动模型sv处理时间序列中的随机波动
7.r语言时间序列tar阈值自回归模型
8.r语言k-shape时间序列聚类方法对股票价格时间序列聚类
【R语言集成模型(提升树boosting、随机森林、约束最小二乘法加权平均模型融合分析时间序列数据)】9.python3用arima模型进行时间序列预测
推荐阅读
- Activiti(一)SpringBoot2集成Activiti6
- 【生信技能树】R语言练习题|【生信技能树】R语言练习题 - 中级
- 一起来学习C语言的字符串转换函数
- C语言字符函数中的isalnum()和iscntrl()你都知道吗
- C语言浮点函数中的modf和fmod详解
- C语言中的时间函数clock()和time()你都了解吗
- 私有化轻量级持续集成部署方案--03-部署web服务(下)
- C语言学习|第十一届蓝桥杯省赛 大学B组 C/C++ 第一场
- C语言解方程的根和判断是否是闰年
- C语言的版本比较