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


    基于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

  • 相关阅读:
    基于Springboot社区疫情防控系统设计与实现 毕业设计开题报告
    Java反射详解
    【JavaEE】MyBatis 动态SQL 使用讲解
    一种多策略改进的麻雀搜索算法
    炫云云渲染3ds max效果图渲染教程
    Python Urllib:网络库(stdlib)的强大功能与灵活运用
    前端常用网站
    操作系统安全 访问控制机制
    MediaRecorder媒体录音机
    Telegraf--采集指定信息
  • 原文地址:https://blog.csdn.net/qq_30452897/article/details/132746194