ARIMA交通流量预测

浏览: 2036

交通流量预测分析研究是智能运输系统的核心研究内容之一,实例使用ARIMA(p,d,q)-差分自回归移动平均模型(Autoregressive Integrated Moving Average Model,简记ARIMA),AR是自回归, p为自回归项; MA为移动平均,q为移动平均项数,d为时间序列成为平稳时所做的差分次数。所谓ARIMA模型,是指将非平稳时间序列转化为平稳时间序列,然后将因变量仅对它的滞后值以及随机误差项的现值和滞后值进行回归所建立的模型。ARIMA模型根据原序列是否平稳以及回归中所含部分的不同,包括移动平均过程(MA)、自回归过程(AR)、自回归移动平均过程(ARMA)以及ARIMA过程。ARIMA模型建模的基本条件是要求待预测的数列满足平稳的条件,即个体值要围绕序列均值上下波动,不能有明显的上升或下降趋势,如果出现上升或下降趋势,需要对原始序列进行差分平稳化处理。具体代码及描述如下:

##############################################ARIMA############################################
##############根据趋势定差分,使得满足平稳性#########本实例里只需进行一次差分即可##############
 library(tseries)
 library(DBI)
 library(ROracle)
 drv=dbDriver('Oracle')
 conn=dbConnect(drv,'AQTS_ZHZX','AQTS_ZHZX','192.168.1.1:1521/jgyw')
 rs=dbSendQuery(conn,"select d.gcsjrq, sum(ZLL) zll from dw_fact_flux d
 where d.gcsjrq >= 20160201 and d.gcsjrq<20160308
 group by d.gcsjrq
 order by d.gcsjrq asc")    
datad=fetch(rs)
lostjobOra <- apply(datad, 2, as.numeric)
graphics.off()
split.screen(c(1,3))
screen(1) 
plot(lostjobOra[,2],type="b")
#如果序列有明显的指数趋势,故先对数列进行对数变换得到新的数列
#对具有明显线性趋势的数列常用的平稳化措施是差分
#lostjob  <- log(lostjobOra[,2])#取对数可以消除数据波动变大趋势,
lostjob <- lostjobOra[,2]
df1 = diff(lostjob)#d=1阶差分,对数列进行一阶差分,可以消除数据增长趋势性和季节性
screen(2) 
plot(df1,type = "b")
# s4_df1=diff(df1,4) # 对d=1阶差分结果进行k=4步(季节)差分
# screen(3)
# plot(s4_df1,type = "b")
##############对差分结果作ADF检验(单位根检验),确定其其是否为平稳性,###############
###因为存在单位根就是非平稳时间序列,序列中存在单位根过程就不平稳,会使回归分析中存在伪回归###
##############p值小于默认p值(0.05),拒绝接受存在单位根的原假设######################
#####所以可以接受序列是平稳的。因为这就可以对序列进行ARMA模型分析了##################
adf.test(df1)
#实际上,我们是对一阶差分后的序列在进行ARMA建模,
#因此,建立的模型从原序列角度应该称为ARIMA模型,其中,差分部分的参数d=1.
#adfTest(df1,lag=6) #对差分结果进行平稳性检验
################模型的识别与定界,ARIMA(p,d,q)中的pq定阶##############################  
#模型的识别与定阶主要是通过对序列的自相关和偏自相关观察得到的,可以看到自相关和偏自相
#关的拖尾性并不明显,因此考虑建立混合ARMA模型
###############模型选择的方法
#若平稳序列的偏相关函数是截尾的,而自相关函数是拖尾的,可断定序列适合AR模型
#若平稳序列的偏相关函数是拖尾的,而自相关函数是截尾的,则可断定序列适合MA模型
#若平稳序列的偏相关函数和自相关函数均是拖尾的,则序列适合ARMA模型
acf(df1,40)
pacf(df1,40)
##############建立arima模型,ARIMA(1,0,0),即为AR(1)################## 
##模型参数的估计:ML表示参数的极大似然估计,CSS表示参数的条件最小二乘法以及混合方法CSS-ML估计
ansCd=arima(df1,order=c(1,0,1),method='ML')   #ARMA(1,1)
ans=arima(lostjob,order=c(1,1,1),method='ML')
##############检验模型残差白噪声,最主要是残差序列的独立性检验##################     
#P值大于0.05,则接受原假设,认为残差序列通过纯随机性检验
ar(df1)$order#确定lag,或者通过pacf确定
Box.test(df1,lag=5,type='Ljung')
Box.test(ans$residuals,lag=5,type='Ljung')
#Box.test(ansCd$residuals,lag=5,type='Ljung')
##############预测##################       
 predict(ans,10)
#######R语言中有专门的forecast包,包里的auto.arima函数可以对序列模型进行智能识别建模   
可参考:
http://m.blog.csdn.net/dingming001/article/details/73732933
http://blog.csdn.net/desilting/article/details/39013825

华青莲,方便自己,成长他人!!!

推荐 2
本文由 华青莲 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

0 个评论

要回复文章请先登录注册