R语言时间序列分析常用步骤

 常用步骤代码:

#载入数据
d <- WWWusage
x <- ts(d,start = 1) # 其实WWWusage本身就是时间序列格式的,这里是为了提醒大家记得ts
plot(x)

#差分并观察
x.dif <- diff(x,1,2)
plot(x.dif)
#差分序列ADF检验
library(tseries)
adf.test(x.dif) # p越小越好
#确定差分阶数d

#序列纯随机性检验
for(i in 1:2)print(Box.test(x.dif, lag=6*i))
#p大,拒绝序列为白噪声的假设,说明序列有规律可提取,有研究价值,可继续建模

#判断p、q
acf(x.dif)
pacf(x.dif)
#根据auto.arima辅助判断
library(forecast)
auto.arima(x.dif) # AIC 实际值越小越好
x.fit <- arima(x.dif,order = c(2,0,0));x.fit
#多对比几次结果

#AIC是赤池统计量,当增加了一个变量后,如果这个变量对模型有足够的解释力,就会使赤池统计量变小
#AIC的值为负的时候也是越小越好,也就说是实际值而不是绝对值越小越好,比如-2与-1.9,就选-2那个
#AIC和BIC是似然函数和乘法函数的线性组合,不同之处在于惩罚力度不同。都是越小越好
#loglik是对数似然,模型比较时越大越好

#残差白噪声检测,考察拟合效果,p越大,说明残差纯随机性越显著,信息充分提取
for(i in 1:2) print(Box.test(x.fit$residuals,lag = 6*i))

#通过检测的模型进行预测
library(zoo)
library(forecast)
x.fore <- forecast(x.fit,h = 10) #预测未来10期
plot(x.fore)
x.fore

模型阶数判定:

以datasets包自带WWWusage数据为例,2阶差分后拟合模型,AIC实际值(不是绝对值)越小越好,实验如下:

win.graph();par(mfrow=c(1,2));acf(x.dif);pacf(x.dif)

结合acf图和pacf图,结果似乎是p=2,q=2最佳,但对比AIC值却不是如此:

 结果表明对x <- ts(WWWusage)来说,arima(2,2,0)的拟合效果最好,AIC值为511.46。

为什么偏自相关图判断的结果不是拟合效果最好的呢?希望哪位老师同学可以指点我,谢谢!

我的微信:1961812312


更新:

之前没有对p,q作为组合代入模型寻找最小aic值,

下一篇文章中,分析了36种组合的结果,找到aic值最小的结果为p=5,q=5,aic值为509.8135

但还是与自相关图和偏自相关图结果给出的建议不一样,这一点还是希望有老师同学指点一下!


参考文献:

https://people.duke.edu/~rnau/411arim.htm

https://bbs.pinggu.org/forum.php?mod=viewthread&action=printable&tid=226732

https://bbs.pinggu.org/thread-3226868-1-1.html

https://www.zybuluo.com/evilking/note/851533

wikimirror

感谢上帝的恩典。

另:根据ARIMA模型得到公式结果,可以参考wiki和Google的镜像资料代入得出。


更新:

R语言时间序列分析-根据aic值选择arima模型


更新2:

对于之前的问题,当(偏)自相关图给出的模型不是AIC值最优的模型时,应该选择哪一个?答案如下:

从ACF和PACF图上定性判断有时不准确,建议以量化的标准(AIC值)为准。不放心也可以再多比较一下其他指标,包括:BIC值,两个模型的残差随机性检验,最佳子集等

——网友何劼

感谢网友@没有那把剑、@ 何劼

Guess you like

Origin blog.csdn.net/weixin_42683052/article/details/116716505