时间序列分析实战(二):时序的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可以看到该序列的拟合图及未来五年的预测图,拟合效果较好。


相关文章
|
6月前
|
数据可视化 vr&ar
时间序列分析实战(七):多个变量的ARIMA模型拟合
时间序列分析实战(七):多个变量的ARIMA模型拟合
|
6月前
【R语言实战】——带有新息为标准学生t分布的金融时序的GARCH模型拟合预测
【R语言实战】——带有新息为标准学生t分布的金融时序的GARCH模型拟合预测
|
4月前
|
机器学习/深度学习 数据挖掘 vr&ar
时间序列预测利器:Sklearn中的ARIMA与状态空间模型
【7月更文第24天】时间序列预测是数据分析和机器学习领域的一个重要分支,它致力于从历史数据中挖掘规律,预测未来的发展趋势。在Python的Scikit-learn库中,虽然直接提供的时间序列预测模型不如专门的时间序列分析库如Statsmodels或Prophet那样丰富,但Scikit-learn的强大之处在于其模型的灵活性和集成能力,尤其是状态空间模型的实现,为自定义复杂时间序列模型提供了坚实的基础。本文将介绍如何使用Scikit-learn进行时间序列预测,重点聚焦在ARIMA模型(通过Statsmodels间接实现)和状态空间模型的使用上,并通过代码示例深入解析。
163 0
|
5月前
|
机器学习/深度学习 vr&ar
技术心得:时间序列:ARIMA模型
技术心得:时间序列:ARIMA模型
54 0
|
6月前
|
数据可视化 vr&ar Python
时间序列分析技巧(二):ARIMA模型建模步骤总结
时间序列分析技巧(二):ARIMA模型建模步骤总结
|
机器学习/深度学习 运维 计算机视觉
TimesNet:时间序列预测的最新模型
2023年4月发表了一个新的模型,它在时间序列分析的多个任务中实现了最先进的结果,如预测、imputation、分类和异常检测:TimesNet。
799 0
|
6月前
|
机器学习/深度学习 Python
【视频】ARIMA时间序列模型原理和R语言ARIMAX预测实现案例
【视频】ARIMA时间序列模型原理和R语言ARIMAX预测实现案例
|
6月前
|
数据可视化
R语言GAMLSS模型对艾滋病病例、降雪量数据拟合、预测、置信区间实例可视化
R语言GAMLSS模型对艾滋病病例、降雪量数据拟合、预测、置信区间实例可视化
|
6月前
R语言多元时间序列滚动预测:ARIMA、回归、ARIMAX模型分析
R语言多元时间序列滚动预测:ARIMA、回归、ARIMAX模型分析
|
6月前
ARIMA、ARIMAX、 动态回归和OLS 回归预测多元时间序列
ARIMA、ARIMAX、 动态回归和OLS 回归预测多元时间序列
ARIMA、ARIMAX、 动态回归和OLS 回归预测多元时间序列