一、写在前面
这一期,我们使用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一样,需要做时间序列数据的转换:
*修改工作路劲,把数据放入工作路径中,建议全英文路径
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"。
那就改吧:
(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)一般差分和季节性差分:
*一阶差分
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)
偏自相关图(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月开始进行动态预测:
tsappend, add(12)
tsset date, monthly
predict yhat1, dynamic(tm(2015m12)) y
结果:
好了收工!!!
三、总结
Stata挺好用的,就是下次不用了!!!
四、数据
链接:https://pan.baidu.com/s/1vZqgwcLP3hSrpLpHMttTCA?pwd=i2wb
提取码:i2wb