对未来5期CPI数据进行预测,RPI、PPI为解释变量,用R语言实现,很shallow,还请路过的大神指教
实现VAR模型对数据有较多要求,主要分为以下几步
1)平稳性检验,平稳最棒了,不平稳需要检查是否为同阶单整,不是同阶单整可以考虑对数差分化处理,使数据保持平稳,但同时也要注意差分以后的数据是否还具有意义。
2)对于平稳的数据可以做格兰杰因果检验,对于不平稳但同阶单整的数据可以做协整检验。格兰杰因并不等于格兰杰果。
3)确定模型的滞后阶数,不同的信息准则构造不同,但都是值越小越好,一般常用的有AIC、SC但选择时也要综合考虑,尽量选择使模型比较简介的吧(滞后阶数较少的)。
4)拟合模型
5)稳定性检验
6)脉冲响应分析
7)方差分解
8)预测

library(vars)
library(urca)
library(MASS)
library(sandwich)
library(tseries)
library(lmtest)
library(readxl)
CPI_DATA <- read_excel("D:/CPI DATA.xlsx")
data.ts<-ts(CPI_DATA[,2:4],start = c(2001,1),end = c(2019,5),frequency = 12)
plot.ts(data.ts,lty=1,type="o",main="2001.01-2019.05 CPI RPI PPI 走势图")
#legend("topright",legend = colnames(data.ts),col=c("green","red","blue"),pch = 17,cex = 0.8)#没必要加图例
#对数化处理
ldata.ts<-log(data.ts)
plot.ts(ldata.ts,type="o",main="对数时间序列图",)
#平稳性检验ur.df,adf.test都可用  ur.df函数中,none无,drift含常数项,trend含常数项和趋势项
#summary(ur.df(ldata.ts[,1],type="trend",selectlags = "AIC"))#接受原假设,非平稳
#summary(ur.df(ldata.ts[,2],type="none",selectlags = "AIC"))#接受原假设,非平稳
#summary(ur.df(ldata.ts[,3],type="none",selectlags = "AIC"))#拒绝原假设,平稳
adf.test(ldata.ts[,1])#不平稳
adf.test(ldata.ts[,2])#平稳
adf.test(ldata.ts[,3])#平稳
#平稳化处理
cpi.data<-diff(ldata.ts[,1])
plot.ts(cpi.data,lty=1,type="o",main="CPI变化率")
adf.test(cpi.data)对数差分化后CPI平稳
ndata.ts<-data.frame(cpi.data,ldata.ts[2:221,2],ldata.ts[2:221,3])#建立新数据
colnames(ndata.ts)<-c("CPI","RPI","PPI")
ndata.ts<-ts(ndata.ts,start = c(2001,2),end = c(2019,5),frequency = 12)
plot.ts(ndata.ts,type="o",main="时间序列图")
#jh.test<-ca.jo(ndata.ts,type = "trace",ecdet = "none",K=3,spec="transitory")#协整检验,因为数据是平稳序列,所以直接做格兰杰因果检验就OK
#summary(jh.test)
#格兰杰因果检验
grangertest(ndata.ts[,1]~ndata.ts[,2],order=3)
grangertest(ndata.ts[,1]~ndata.ts[,3],order=3)
grangertest(ndata.ts[,2]~ndata.ts[,1],order=3)
grangertest(ndata.ts[,3]~ndata.ts[,1],order=3)
#模型滞后阶数的确定
VARselect(ndata.ts,lag.max=10,type = "const")#选择最优滞后阶数#模型拟合
var.sc<-VAR(ndata.ts,p=2,lag.max = 10,ic="SC")
var.hq<-VAR(ndata.ts,p=3,lag.max = 10,ic="HQ")
var.fpe<-VAR(ndata.ts,p=4,lag.max = 10,ic="FPE")
var.aic<-VAR(ndata.ts,p=10,lag.max = 10,ic="AIC")
plot(var.sc)
plot(var.hq)
plot(var.fpe)
plot(var.aic)
summary(var.sc)
#causality(var,cause = c('RPI','PPI')#拟合模型前和拟合模型后做格兰杰因果检验是有差别的
#稳健性检验
sta.sc<-stability(var.sc,type = "OLS-CUSUM",h=0.15)
sta.hq<-stability(var.hq,type = "OLS-CUSUM",h=0.15)
sta.fpe<-stability(var.fpe,type = "OLS-CUSUM",h=0.15)
sta.aic<-stability(var.aic,type = "OLS-CUSUM",h=0.15)
plot(sta.sc)
plot(sta.hq)
plot(sta.fpe)
plot(sta.aic)
#脉冲响应分析
var.irf<-irf(var.sc,n.ahead = 30)
plot(var.irf)
#方差分解
var.fevd<-fevd(var.sc,n.ahead = 10)
plot(var.fevd)
var.fevd$CPI
var.fevd$RPI
var.fevd$PPI
#预测
var.predict<-predict(var.sc,n.ahead = 5,ci=0.95)
plot(var.predict)
fanchart(var.predict)

神经网络算法代码

library(neuralnet)
library(nnet)
library(AMORE)
library(lattice)
library(grid)
library(DMwR)
library(readxl)
CPI_DATA <- read_excel("D:/CPI DATA.xlsx")
#将输入数据归一化
#maxs<-apply(CPI_DATA,2,max)
#mins<-apply(CPI_DATA,2,min)
#bp.data<-as.data.frame(scale(CPI_DATA,center = mins,scale = maxs-mins))
#传统方法
cmax<-c(max(CPI_DATA[,2]),max(CPI_DATA[,3]),max(CPI_DATA[,4]))
cmin<-c(min(CPI_DATA[,2]),min(CPI_DATA[,3]),min(CPI_DATA[,4]))
bp.data<-data.frame((CPI_DATA[,2]-cmin[1])/(cmax[1]-cmin[1]),(CPI_DATA[,3]-cmin[2])/(cmax[2]-cmin[2]),(CPI_DATA[,4]-cmin[3])/(cmax[3]-cmin[3]))
colnames(bp.data)<-c("CPI","RPI","PPI")
#分组
train<-bp.data[1:216,]
test<-bp.data[217:221,]
#没找到可视化功能,所以放弃了
#net<-newff(n.neurons = c(2,7,5,1),learning.rate.global = 1e-3,momentum.global = 0.4,error.criterium = 'LMS',Stao = NA,hidden.layer = "sigmoid",output.layer = 'purelin',method="ADAPTgdwm")
#result<-train(net,train[,2:3],train[,1],error.criterium="LMS",report=TRUE,show.step=1000,n.shows=5)
#y<-sim(result$net,test[,2:3])
#org<-y*(cmax[1]-cmin[1])+cmin[1]#逆归一化,有争议不好用
#以下都是寻找最优隐藏层
net1<-neuralnet(CPI~RPI+PPI,data = train,hidden = c(5,3),threshold = 0.05,learningrate = 0.1,algorithm = "rprop+",err.fct = "sse",act.fct = 'tanh',linear.output = T)
plot(net1)
net.result1<-compute(net1,test[,2:3])
org1<-net.result1$net.result*(cmax[1]-cmin[1])+cmin[1]
org1
net2<-neuralnet(CPI~RPI+PPI,data = train,hidden = c(7,5),threshold = 0.05,learningrate = 0.1,algorithm = "rprop+",err.fct = "sse",act.fct = 'tanh',linear.output = T)
plot(net2)
org2<-net.result2$net.result*(cmax[1]-cmin[1])+cmin[1]
org2
net3<-neuralnet(CPI~RPI+PPI,data = train,hidden = c(7,4),threshold = 0.05,learningrate = 0.1,algorithm = "rprop+",err.fct = "sse",act.fct = 'tanh',linear.output = T)
plot(net3)
net.result2<-compute(net2,test[,2:3])
org3<-net.result2$net.result*(cmax[1]-cmin[1])+cmin[1]
org3

VAR模型与BP神经网络算法的简单实践相关推荐

  1. 基于BP神经网络算法的性别识别

    目录 基于 BP 神经网络算法的性别识别 1 目录 1 1.背景介绍 2 2. OpenCV 的介绍 3 3.安装 OpenCV 4 4. BP 神经网络算法介绍和实践 4 4.1 BP 神经网络结构 ...

  2. BP神经网络算法基本原理,bp神经网络简单实例

    神经网络BP算法求代码 输入节点数为3x3x5=45,输出节点数为3x3+2=11,隐节点数通过试凑法得出.BP神经网络的Matlab代码见附件,修改节点数.增加归一化和反归一化过程即可. BP算法, ...

  3. bp神经网络权值调整公式,bp神经网络算法推导

    神经网络BP模型 一.BP模型概述误差逆传播(ErrorBack-Propagation)神经网络模型简称为BP(Back-Propagation)网络模型. PallWerbas博士于1974年在他 ...

  4. BP神经网络算法基本原理,bp神经网络实例分析

    BP人工神经网络方法 (一)方法原理人工神经网络是由大量的类似人脑神经元的简单处理单元广泛地相互连接而成的复杂的网络系统.理论和实践表明,在信息处理方面,神经网络方法比传统模式识别方法更具有优势. 人 ...

  5. 人工神经网络与bp神经网络,BP神经网络算法原理

    BP神经网络原理 人工神经网络有很多模型,但是日前应用最广.基本思想最直观.最容易被理解的是多层前馈神经网络及误差逆传播学习算法(ErrorBack-Prooaeation),简称为BP网络. 在19 ...

  6. BP神经网络算法基本原理,bp网络神经算法代码

    bp神经网络的算法改进一共有多少种啊!麻烦举例一下! . 改进点主要在以下几个方面1激励函数的坡度-------误差曲面的平台和不收敛现象----------------激励函数中引入陡度因子,分段函 ...

  7. MATLAB 中BP神经网络算法用于回归拟合的实现

    转载自:https://www.cnblogs.com/babyfei/p/7400072.html BP神经网络算法提供了一种普遍并且实用的方法从样例中学习值为实数.离散值或者向量的函数,这里就简单 ...

  8. 【项目实战】Python基于BP神经网络算法实现家用热水器用户行为分析与事件识别

    说明:这是一个机器学习实战项目(附带数据+代码+文档+视频讲解),如需数据+代码+文档+视频讲解可以直接到文章最后获取. 1.项目背景 居民在使用家用热水器的过程中,会因为地区气候.不同区域和用户年龄 ...

  9. 数学建模算法与应用【BP神经网络算法】

    评价预测和分类问题可以用到神经网络.卷积神经网络适合大样本的情况,深度学习包括很多种网络,如卷积神经网络,对抗网络等,深度学习大小样本皆可. 人工神经网络ANN 在机器学习和认知科学领域,人工神经网络 ...

最新文章

  1. 2010-12-30
  2. 2018-07-09--记录一次gitlab迁移事件及遇到的问题
  3. Windows Terminal 1.0 正式发布
  4. 查看apk的签名信息和签名文件的信息
  5. 计算机二级c语言填空题怎么算分,计算机二级C语言题型和评分标准
  6. 为什么我不选阿里云(一)
  7. SharePoint 2010 WSP包部署过程中究竟发生什么?
  8. 事件处理程序中event参数的传递
  9. P5 周志华:“数据、算法、算力”,人工智能三要素在未来还要加上“知识”
  10. WebService之Axis2快速入门(2): 传递复合类型的数据
  11. mysql5.6 主从 延迟_MySQL5.6升级5.7时,出现主从延迟问题排查过程
  12. python万年历代码_利用python实现万年历
  13. 蓝桥杯led流水灯实现(38译码器和锁存器的使用)
  14. 博士申请 | 南方科技大学丁克蜜老师课题组招收全奖博士/硕士研究生
  15. 工业机器人实训系统(鼠标装配)
  16. 微信公众号H5网页调用微信支付
  17. 用于AB测试的减少方差方法总结和对比
  18. 累计独立访客(UV)不低于 1000 是什么意思,怎么推广呢解决1000呢?
  19. Hive数据导出为csv、tsv文件的几种方法
  20. Ubuntu 20.04 源码编译Paddle2.2.2

热门文章

  1. 【生活随想】自考小结
  2. JAVA_GUI之“注册登陆界面”
  3. Creo草绘图形技巧-透视图
  4. 【Android】侧滑按钮
  5. Jasperreports的XSD翻译
  6. JS中的强制类型转换
  7. 03-Linux系统克隆和快照
  8. 走进微信公众号实现关注之后推送一条服务器自定义的消息给用户
  9. 用python制作个性化签名
  10. Kotlin 集合类的高阶函数