武汉私教培训⽤R做时间序列分析之ARIMA模型预测
昨天刚刚把导⼊数据弄好,今天迫不及待试试怎么做预测,⽹上找的帖⼦跟着弄的。
安然无恙英文第⼀步.对原始数据进⾏分析
⼀.ARIMA预测时间序列
指数平滑法对于预测来说是⾮常有帮助的,⽽且它对时间序列上⾯连续的值之间相关性没有要求。但是,如果你想使⽤指数平滑法计算出预测区间,那么预测误差必须是不相关的,⽽且必须是服从零均值、⽅差不变的正态分布。即使指数平滑法对时间序列连续数值之间相关性没有要求,在某种情况下,我们可以通过考虑数据之间的相关性来创建更好的预测模型。⾃回归移动平均模型( ARIMA)包含⼀个确定(explicit)的统计模型⽤于处理时间序列的不规则部分,它也允许不规则部分可以⾃相关。
⼆.确定数据的差分
ARIMA 模型为平稳时间序列定义的。因此,如果你从⼀个⾮平稳的时间序列开始,⾸先你就需要做时间序列差分直到你得到⼀个平稳时间序列。如果你必须对时间序列做 d 阶差分才能得到⼀个平稳序列,那么你就使⽤ARIMA(p,d,q)模型,其中 d 是差分的阶数。
我们以每年⼥⼈裙⼦边缘的直径做成的时间序列数据为例。从 1866 年到 1911 年在平均值上是不平稳的。随着时间增加,数值变化很⼤。下⾯是.dat数据:
下⾯进⼊预测。先导⼊数据:
storyline> skirts <- scan("/tsdldata/roberts/skirts.dat",skip=5) #导⼊在线数据,并跳过前5⾏
Read 46 items #R控制台显⽰内容,表⽰共读取46⾏数据dresr
> skirts<- ts(skirts,start = c(1866)) #设定时间1866开始
> plot.ts(skirts) #画出图
我们可以通过键⼊下⾯的代码来得到时间序列(数据存于“skirtsts”)的⼀阶差分,并画出差分序列的图: > skirtsdiff<-diff(skirts,differences=1) #⼀阶差分
> plot.ts(skirtsdiff) #画图
从⼀阶差分的图中可以看出,数据仍是不平稳的。我们继续差分。> skirtsdiff2<-diff(skirts,differences=2)
去日本留学怎么样
> plot.ts(skirtsdiff2)世界杯西班牙夺冠
⼆次差分(上⾯)后的时间序列在均值和⽅差上确实看起来像是平稳的,随着时间推移,时间序列的⽔平和⽅差⼤致保持不变。因此,看起来我们需要对裙⼦直径进⾏两次差分以得到平稳序列。
第⼆步,找到合适的ARIMA模型live it up
银河护卫队2 彩蛋如果你的时间序列是平稳的,或者你通过做 n 次差分转化为⼀个平稳时间序列,接下来就是要选择合适的 ARIMA模型,这意味着需要寻找ARIMA(p,d,q)中合适的 p 值和 q 值。为了得到这些,通常需要检查[平稳时间序列的(⾃)相关图和偏相关图。
我们使⽤ R 中的“acf()”和“pacf” 函数来分别(⾃)相关图和偏相关图。“acf()”和“pacf 设定“plot=FALSE” 来得到⾃相关和偏相关的真实值。> acf(skirtsdiff2,lag.max=20)romeo must die
> acf(skirtsdiff2,lag.max=20,plot=FALSE)
Autocorrelations of ries ‘skirtsdiff2’, by lag
0 1 2 3 4 5 6 7 8 9 10 11 12
1.000 -0.303 0.096 0.009 0.102 -0.453 0.173 -0.025 -0.039 0.073 -0.094 0.133 -0.089
postmessage13 14 15 16 17 18 19 20
-0.027 -0.102 0.207 -0.260 0.114 0.101 0.011 -0.090
⾃相关图显⽰滞后1阶⾃相关值基本没有超过边界值,虽然5阶⾃相关值超出边界,那么很可能属于偶然出现的,⽽⾃相关值在其他上都没有超出显著边界,⽽且我们可以期望 1 到 20 之间的会偶尔超出 95%的置信边界。
> pacf(skirtsdiff2,lag.max=20)
> pacf(skirtsdiff2,lag.max=20,plot=FALSE)