读取数据(
scan() 及read.csv() 等函数,row.names 参数可以用来指定索引列)转换成时间序列(
ts() 函数,注意frequency 参数取值设置:
http://m.blog.csdn.net/blog/u014032673/41984147)观察检验时间序列是否平滑,对不平滑的时间序列要进行差分(
diff() 函数),差分的阶数=arima(p,d,q) 中d参数的值acf()和 pacf()两个函数分别查看时间序列的自相关图和偏自相关图,并得出相应的q,p值
-
模型初步选择,可以用函数
AIC(arima(objts,order=c(p,d,q),method="ML")) ARIMA模型拟合,调用
arima(objts,order=c(p,d,q)) 来拟合数据,可用tsdiag(a1) 对模型进行检验。也可用arimamodel<−auto.arima(objts,trace=T) 来自动进行拟合。预测,调用
forecast.Arima(objarima,h=?,level=c(99.5)) 获得要预测的未来某“长度”内的数据。可以用plot.forecast(objforecast) 查看预测的序列。-
残差检验,对预测的残差进行检验,如果残差是一个白噪声序列,说明残差中已经不再含有有用的信息,模型已经不需要优化了。残差检验可调用
Box.test(objforecast$residuals,lag=20,type="Ljung−Box") *统计量为17.4,*度为20,并且P值是0.6(置信度只有40%)这样的值不足以拒绝“预测误差在1-20阶是非零自相关,证明预测误差在1-20阶是非零自相关的。*
Ps: p值大,说明为纯随机序列。p值小,非纯随机序列,置信水平(1-p).或者用
plotForecastErrors(objforecast$residuals) 看预测的残差是否满足一个正态分布,这个函数使用前要先定义:或者用
acf(objforecast$residuals,lag.max=20) 查看残差的自相关图。
以前没有接触过时序分析,为免以后忘记,先粗浅的大概总结了下流程吧,最近因为做题才接触到这一块儿,统计方面很多内因都还不太懂,慢慢理解后再行扩充吧。