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

基于WIN10的64位系统演示

一、写在前面

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

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

第67步 时间序列建模实战:ARIMA建模(Stata)_第1张图片

二、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,如下图操作,输入数据,改列名:

第67步 时间序列建模实战:ARIMA建模(Stata)_第2张图片

第67步 时间序列建模实战:ARIMA建模(Stata)_第3张图片

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

第67步 时间序列建模实战:ARIMA建模(Stata)_第4张图片

第67步 时间序列建模实战:ARIMA建模(Stata)_第5张图片

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

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

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

然后翻车了,因为:

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

那就改吧:

第67步 时间序列建模实战:ARIMA建模(Stata)_第6张图片

(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()选项,会自动选择一个合适的滞后阶数。

第67步 时间序列建模实战:ARIMA建模(Stata)_第7张图片

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

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

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

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

然后,可以做个ADF检验:

dfuller death_rate_diff, lags(12)
dfuller death_rate_seasonal_diff, lags(12)

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

(4.3)相关图:

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

第67步 时间序列建模实战:ARIMA建模(Stata)_第8张图片

偏自相关图(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的结果:

第67步 时间序列建模实战:ARIMA建模(Stata)_第9张图片

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

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

第67步 时间序列建模实战:ARIMA建模(Stata)_第10张图片

(5)查看拟合性能

使用

estat ic

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

第67步 时间序列建模实战:ARIMA建模(Stata)_第11张图片

(6)拟合和预测

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

predict yhat_static, y

第67步 时间序列建模实战:ARIMA建模(Stata)_第12张图片

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

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

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

结果:

第67步 时间序列建模实战:ARIMA建模(Stata)_第13张图片

好了收工!!!

三、总结

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

四、数据

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

提取码:i2wb

你可能感兴趣的:(《100,Steps,to,Get,ML》—JET学习笔记,ARIMA,Stata,时间序列)