当前位置:   article > 正文

第67步 时间序列建模实战:ARIMA建模(Stata)_stata做arima

stata做arima

基于WIN10的64位系统演示

一、写在前面

这一期,我们使用Stata进行SARIMA模型的构建。

同样,使用某省2005年1月至2016年12月AIDS死亡率的时间序列数据。

二、Stata建立SARIMA实战

1问GPT怎么用

咒语:我有一批{数据}:2005年1月至2016年12月AIDS死亡率的时间序列数据。用2005年1月至2015年12月的数据为训练集训练SARIMA模型,用2015年1月至2015年12月的数据为验证集进行验证,然后计算SARIMA模型的R方、BIC值和AIC值,同时分别计算训练集和验证集的MAE、MAPE、MSE和RMSE值。请用Stata 13.1版本进行构建。

部分数据格式如下:{XXX}

进过一番学习,我大概学会了。

GPT对Stata语句的学习估计不多,还得配合Stata帮助文档才行。

2导入数据

打开Stata,如下图操作,输入数据,改列名:

点击保存数据,将数据命名为“data.dta”。另,Stata面板功能如下:

(3)设置为时间序列格式

跟SPSS一样,需要做时间序列数据的转换:

  1. *修改工作路劲,把数据放入工作路径中,建议全英文路径
  2. cd "C:\Users\YourName\Documents"
  3. *导入名为"data.dta"的数据集,并清除当前内存中的所有数据
  4. use "data.dta", clear
  5. *使用monthly函数将"time"变量转换为月份格式。"YM"表示输入的日期格式为年月
  6. gen date = monthly(time, "YM")
  7. *将"date"变量的格式设置为时间序列格式
  8. format date %tm
  9. *声明数据为时间序列数据,其中时间变量为"date"
  10. tsset date

然后翻车了,因为:

你的时间数据是以月-年(例如Jan-05)的格式存在的,这就是为什么monthly()函数无法正确解析它的原因。在Stata中,monthly()函数期望的输入格式是"2005m1",而不是"Jan-05"。

那就改吧:

(4)差分、单位根检验和相关图

(4.1)单位根(ADF)检验:

dfuller death_rate, lags(12)  

解读:dfuller death_rate, lags(12)是Stata中执行Dickey-Fuller单位根检验的命令,用于检查时间序列数据是否平稳。这个命令的各个参数的含义如下:

dfuller: 这是Stata的命令,表示要进行Dickey-Fuller单位根检验。

death_rate: 这是你要检查的变量名,即你想要测试是否平稳的时间序列数据。

, lags(12): 这是一个选项,表示在进行Dickey-Fuller检验时,要包括的滞后阶数。在这个例子中,滞后阶数设置为12,意味着在进行检验时,会考虑到过去12期的数据。如果不指定lags()选项,会自动选择一个合适的滞后阶数。

P值大于0.05,说明数据不平稳。

(4.2)一般差分和季节性差分:

  1. *一阶差分
  2. gen death_rate_diff = D.death_rate
  3. *季节性拆分
  4. gen death_rate_seasonal_diff = DS12.death_rate

注意:这个DS12.death_rate是指做了1次一般拆分,然后再做1次周期为12的季节性拆分!!也就是d和D都等于1,所以少了13个数据!!

然后,可以做个ADF检验:

  1. dfuller death_rate_diff, lags(12)
  2. dfuller death_rate_seasonal_diff, lags(12)

显示都可以可通过ADF检验。

(4.3)相关图:

  1. *生成自相关图(ACF)
  2. corrgram death_rate_diff, lags(20)

偏自相关图(PACF)还得装包,算了。

(5)建模

(5.1)建立SARIMA模型

看代码,自行体会:

案例1:SARIMA(0,1,1)(0,1,1)12:

arima death_rate, arima(0,1,1) sarima(0,1,1,12) noconstant

案例2:SARIMA(1,1,1)(1,1,2)12:

arima death_rate, arima(1,1,1) sarima(1,1,1,12) noconstant

应该看得懂吧,最后一个是是否要常数项。

看看SARIMA(1,1,1)(1,1,1)12的结果:

一个参数没有统计学意义,换下一个模型SARIMA(1,1,1)(0,1,1)12:

arima death_rate, arima(1,1,1) sarima(0,1,1,12) noconstant

(5)查看拟合性能

使用

estat ic

命令来查看ARIMA模型的AIC和BIC值。似乎没有提供R方,不过筛选模型不用也行吧。

(6)拟合和预测

(6.1)进行静态预测(也就是拟合):使用predict命令进行静态预测。以下代码会创建一个新的变量yhat_static,其中包含静态预测的值:

predict yhat_static, y

(6.2)进行动态预测(也就是预测):

从2015年12月开始进行动态预测:

  1. tsappend, add(12)
  2. tsset date, monthly
  3. predict yhat1, dynamic(tm(2015m12)) y

结果:

好了收工!!!

三、总结

Stata挺好用的,就是下次不用了!!!

四、数据

链接:https://pan.baidu.com/s/1vZqgwcLP3hSrpLpHMttTCA?pwd=i2wb

提取码:i2wb

本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/109335
推荐阅读
相关标签
  

闽ICP备14008679号