时间序列分析实战(二):时序的ARMA模型拟合与预测

简介: 时间序列分析实战(二):时序的ARMA模型拟合与预测

1 目的

  有1971年9月至1993年6月澳大利亚季度常住人口变动情况构成的时间序列x t x_txt,判断该时序的平稳性和纯随机性,并拟合适当的ARMA模型预测其未来五年情况。

2 平稳性检验

2.1 原始时序图

  运行程序:

data<-scan("F:\\时间序列分析\\数据.txt")#读取数据
data1<-ts(data,start = c(1971,3),frequency =4)          #转化为时序数据
plot(data1)                                              #绘制时序图

  运行结果:

图1 1971年9月-1933年6月澳大利亚季度常住人口时序图

  由图1可以看出,根据时序图显示,该时序数据没有明显的趋势和周期特征,进一步进行ADF检验。

2.2 ADF检验

  运行程序:

library(aTSA)                                            #加载包
adf.test(data1)                                          #ADF检验

  运行结果:

## Augmented Dickey-Fuller Test 
## alternative: stationary 
##  
## Type 1: no drift no trend 
##      lag    ADF p.value
## [1,]   0 -2.719   0.010
## [2,]   1 -1.531   0.128
## [3,]   2 -0.928   0.345
## [4,]   3 -0.698   0.428
## Type 2: with drift no trend 
##      lag    ADF p.value
## [1,]   0 -10.12   0.010
## [2,]   1  -6.41   0.010
## [3,]   2  -3.56   0.010
## [4,]   3  -2.32   0.207
## Type 3: with drift and trend 
##      lag    ADF p.value
## [1,]   0 -10.48  0.0100
## [2,]   1  -6.88  0.0100
## [3,]   2  -3.92  0.0172
## [4,]   3  -2.57  0.3362
## ---- 
## Note: in fact, p.value = 0.01 means p.value <= 0.01

  根据ADF检验结果显示该序列平稳。接下来检验序列的纯随机性。

3 纯随机检验

  运行程序:

for (k in 1:2){                                          #纯随机检验
  print(Box.test(data1,lag=2*k,type="Ljung-Box"))
}

  运行结果:

## 
##  Box-Ljung test
## 
## data:  data1
## X-squared = 1.211, df = 2, p-value = 0.5458
## 
## 
##  Box-Ljung test
## 
## data:  data1
## X-squared = 16.325, df = 4, p-value = 0.002612

  通过纯随机检验的LB检验结果显示该序列为非白噪声序列,所以1971年9月至1993年6月澳大利亚常住人口变动情况时序数据为平稳非白噪声序列。

4 ARMA模型拟合

4.1 自相关图

  运行程序:

acf(data1)                             #自相关图

  运行结果:

图2 自相关图

4.2 偏自相关图

  运行程序:

pacf(data1)                            #偏自相关图

  运行结果:

图3 偏自相关图

4.3 ARMA模型阶数判定

  根据自相关图和偏自相关图显示结果,自相关图和偏自相关图均显示拖尾特点,故考虑建立ARMA模型,尝试建立ARMA(1,1)-ARMA(4,4),通过AIC准则选择最优模型。

  运行程序:

#拟合ARMA(1,1)-ARMA(4,4)
k<-matrix(rep(0,16),nrow = 4,ncol = 4)                     #创建0矩阵
for(i in 1:4){
  for (j in 1:4) {
    k[i,j]<-arima(data1,order = c(i,0,j),method="ML")$aic
  }
}
which(k==min(k),arr.ind = T)                               #提取aic最小值位置

  运行结果:

##      row col
## [1,]   3   2

  运行程序:

min(k)                                                     #最小aic

  运行结果:

## [1] 768.0453

  根据结果显示,最小AIC模型为ARMA(3,2),其AIC值为768.0453。即选址最优模型ARMA(3,2)。

4.4 模拟拟合

  运行程序:

model<-arima(data1,order = c(3,0,2),method="ML")          #最优模型

4.5 模型预测

  运行程序:

library("forecast")
fore1<-forecast::forecast(model,h=20)                      #模型预测
fore1                           #预测结果及0.05和0.5显著性水平下的置信区间

  运行结果:

##         Point Forecast    Lo 80    Hi 80    Lo 95    Hi 95
## 1993 Q3       55.84804 33.51665 78.17942 21.69513 90.00094
## 1993 Q4       54.40362 31.20745 77.59979 18.92814 89.87910
## 1994 Q1       47.24138 23.85678 70.62597 11.47772 83.00503
## 1994 Q2       49.48305 23.78938 75.17673 10.18797 88.77814
## 1994 Q3       52.73426 26.70517 78.76335 12.92620 92.54232
## 1994 Q4       52.00451 25.97331 78.03571 12.19323 91.81580
## 1995 Q1       51.19748 25.07768 77.31729 11.25070 91.14427
## 1995 Q2       51.87825 25.63253 78.12396 11.73889 92.01761
## 1995 Q3       52.35380 26.08425 78.62335 12.17799 92.52960
## 1995 Q4       52.21059 25.93444 78.48674 12.02468 92.39649
## 1996 Q1       52.17543 25.88658 78.46428 11.97010 92.38076
## 1996 Q2       52.34066 26.04270 78.63862 12.12140 92.55992
## 1996 Q3       52.41657 26.11588 78.71727 12.19313 92.64001
## 1996 Q4       52.40455 26.10234 78.70675 12.17880 92.63029
## 1997 Q1       52.42316 26.11950 78.72682 12.19519 92.65113
## 1997 Q2       52.46207 26.15758 78.76655 12.23283 92.69131
## 1997 Q3       52.47818 26.17334 78.78302 12.24840 92.70796
## 1997 Q4       52.48233 26.17727 78.78740 12.25220 92.71246
## 1998 Q1       52.49184 26.18661 78.79707 12.26147 92.72222
## 1998 Q2       52.50167 26.19635 78.80699 12.27116 92.73218

  运行程序:

plot(fore1,lty=2)                                         #绘制预测图
lines(fore1$fitted,col=4)                                 #添加拟合值

  运行结果:

图4 预测图

  通过图4可以看到该序列的拟合图及未来五年的预测图,拟合效果较好。


相关文章
时间序列分析实战(五):ARIMA加法(疏系数)模型建模
时间序列分析实战(五):ARIMA加法(疏系数)模型建模
|
数据处理
时间序列分析实战(一):时序平稳性和白噪声检验
时间序列分析实战(一):时序平稳性和白噪声检验
时间序列分析实战(十):ARIMAX时序的协整动态模型
时间序列分析实战(十):ARIMAX时序的协整动态模型
|
数据可视化 vr&ar
【Eviews实战】——ARIMA模型建模
【Eviews实战】——ARIMA模型建模
|
数据可视化 vr&ar
时间序列分析实战(七):多个变量的ARIMA模型拟合
时间序列分析实战(七):多个变量的ARIMA模型拟合
|
机器学习/深度学习 程序员 数据处理
时间序列分析技巧(一):根据ACF、PACF进行AR、MA、ARMA模型选择
时间序列分析技巧(一):根据ACF、PACF进行AR、MA、ARMA模型选择
|
机器学习/深度学习 运维 计算机视觉
TimesNet:时间序列预测的最新模型
2023年4月发表了一个新的模型,它在时间序列分析的多个任务中实现了最先进的结果,如预测、imputation、分类和异常检测:TimesNet。
1083 0
时间序列分析实战(六):ARIMA乘法(疏系数)模型建模及预测
时间序列分析实战(六):ARIMA乘法(疏系数)模型建模及预测
|
机器学习/深度学习 资源调度 自然语言处理
长短时记忆网络(LSTM)完整实战:从理论到PyTorch实战演示
长短时记忆网络(LSTM)完整实战:从理论到PyTorch实战演示
15515 0
|
数据可视化 vr&ar Python
时间序列分析技巧(二):ARIMA模型建模步骤总结
时间序列分析技巧(二):ARIMA模型建模步骤总结