Stata:时间序列数据的回归和预测

发布时间:2020-10-09 阅读 22504

Stata 连享会   主页 || 视频 || 推文

温馨提示: 定期 清理浏览器缓存,可以获得最佳浏览体验。

课程详情 https://gitee.com/arlionn/Course   |   lianxh.cn

课程主页 https://gitee.com/arlionn/Course

作者:张悦 (香港城市大学)


目录


我们分析回归模型的其中一个原因是为了生成对因变量的预测。在预测之前,我们首先需要一个具体的模型来提供参考。虽然时间序列数据常用于预测分析的研究,但需要提醒大家的是,数据并不限于使用时间序列数据。

1. 建立模型

让我们以静态线性回归模型为例,

我们假设等式 (1) 里的误差项是白噪音,样本为T, bi是最小二乘法 (OLS) 里βi的估计量,i=1,2,,k, 这意味着拟合值在我们的模型里变成了:

在公式 (2) 里,我们只看模型里样本内的预估,这些预测的构建是基于使用回归系数的点估计和回归因子的实际观测值,也就是当 t=1,2,,T 的实际值,为了获得拟合值,我们已经预设误差项均值为零。

假设现在我们有额外的 n 个观察值 (T+n), 但是基于原始数据T,我们仍使用我们的 OLS 参数估计值。

现在,我们就可以来进行 n 个额外样本的事后估计预测,由于我们已经知晓这些数据的值,所以当预测那些 n 时,我们便可以看出模型的表现到底如何。

2. 数据验证

我们使用数据 consdpi.dta,它包含了两个时间序列,分别叫做 realconsrealdpi。在我们估计他们之间的长期关系之前,两个时间序列必须做单位根检验。

varsoc realcons
dfuller realcons,trend lags(#)
varsoc realdpi
dfuller realdpi,trend lags(#)

varsoc D.realcons
dfuller D.realcons,lags(#)
varsoc D.realdpi
dfuller D.realdpi,lags(#)

Note:# 表示滞后阶数,由 varsoc 命令基于信息准则确定。

单位根检验显示了两个时间序列 I (1) 是协整的。在这个案例里,我们现在可以用一个时间序列对于另外一个时间序列的回归来估计他们的长期关系,这样的回归不需要数据从 1950Q11983Q4 的差分。

reg realcons realdpi if tin(1950q1,1983q4)
   Source |       SS       df       MS              Number of obs =     136
----------+------------------------------           F(  1,   134) =       .
    Model |  76256873.3     1  76256873.3           Prob > F      =  0.0000
 Residual |  84604.0843   134  631.373763           R-squared     =  0.9989
----------+------------------------------           Adj R-squared =  0.9989
    Total |  76341477.4   135  565492.425           Root MSE      =  25.127
---------------------------------------------------------------------------
 realcons |      Coef.   Std. Err.      t    P>|t|     [95% Conf. Interval]
----------+----------------------------------------------------------------
  realdpi |   .8579124   .0024686   347.53   0.000     .8530299    .8627948
    _cons |   67.65482   6.270548    10.79   0.000     55.25277    80.05687
---------------------------------------------------------------------------

虽然我们还有 1984Q11985Q4 的样本,但是现在我们已经估测了 1983Q4 的样本,让我们使用这 8 个观察值来作为事后分析的预测。

regress realcons realdpi if tin(1950q1,1983q4)
estimates store consmodel
forecast create expostforecast, replace
forecast estimates consmodel
set seed 1
forecast solve, prefix(f_)  ///
   begin(tq(1984q1)) end(tq(1985q4)) static  ///
   simulate(betas, statistic(stddev,prefix(sd_)) reps(100))

现在我们来对比 realconsf_realcons (realcons 的预测) 在估测期间内。

list realcons f_realcons if tin(1984q1, 1985q4)
     +---------------------+
     | realcons   f_real~s |
     |---------------------|
137. |   3579.7    3587.67 |
138. |   3628.3    3655.79 |
139. |   3653.5    3721.33 |
140. |   3700.9    3744.75 |
141. |   3756.8    3746.04 |
     |---------------------|
142. |   3791.5    3815.62 |
143. |   3860.9    3796.66 |
144. |   3874.2    3832.43 |
     +---------------------+

在作图之前,我们来计算一下 f_realcons 95% 预测区间的上界和下界。

gen f_y_up = f_realcons + invnormal(0.975)*sd_realcons
gen f_y_dn = f_realcons + invnormal(0.025)*sd_realcons

下面是数据生成的图表:

twoway (line realcons   year)  ///
       (line f_realcons year)  ///
       (line f_y_up     year, lpattern(dash)) ///
	   (line f_y_dn     year, lpattern(dash)) ///
	   if tin(1984q1,1985q4)
Graph.png
Graph.png

现在,假设我们使用样本 T 个观察值来测算我们的模型,我们想要预测其他 n 个观察值。到目前为止,我们并不知道 yt 的实际值,这个叫做事前估计

当我们处理这一类的估计时,会遇到一些实际的问题。如果我们想要运用公式 (2),对于 (T+1) 时期,意味着我们需要每一个 xt的值。实际上,有两种方法我们可以插入xt 的值,一种是插入可信的猜测,一种是使用模型来预测,例如 ARIMA 模型。

目前为止,我们所谓的静态预测,意味着我们的回归是静态的形式 (而不是动态) 在公式 (1) 里,因为没有任何的变量在 RHS 公式里是 yt的滞后值。

现在我们更改一下公式 (1) 来包含一个因变量的滞后值:

公式 (3) 可以用来获得事后或事前估计对于 (T+1) 时期,如下所示:

在公式 (4), 我们已经知道了 yt1 (yT的观察值) 在 (T+1) 期间。但是,当我们预测 yt 在 (T+2) 时期时,就事后估计来说他们实际上是两种观念:

  • 我们可以插入已知的 yT+1 来代表 yt1 在预测公式中 (与 x3,T+2,x4,T+2etc 一起)。
  • 我们也可以插入原来预测值 yT+1, 也叫做 yT+1 在公式 (4),与相应的 xt 值一起。

同样的选择延续到 (T+3) 时期以及之后的预测。第一个选择被称为静态预测,第二个选择叫做动态预测

当我们打算做两个或两个以上的时期的事前预测,我们使用动态预测。在这种情况下,我们实际上不知道样本以外因变量的真实值。

现在我们来用简单的动态模型来估算一下公式 (3) 模型,只有一个滞后的因变量来作为回归因子。

reg realcons L.realcons realdpi if tin(1950q1,1983q4)
      Source |       SS       df       MS              Number of obs =     135
-------------+------------------------------           F(  2,   132) =       .
       Model |  75172507.6     2  37586253.8           Prob > F      =  0.0000
    Residual |  47085.9217   132  356.711528           R-squared     =  0.9994
-------------+------------------------------           Adj R-squared =  0.9994
       Total |  75219593.5   134   561340.25           Root MSE      =  18.887

------------------------------------------------------------------------------
    realcons |      Coef.   Std. Err.      t    P>|t|     [95% Conf. Interval]
-------------+----------------------------------------------------------------
    realcons |
         L1. |   .6729567   .0662463    10.16   0.000     .5419149    .8039985
             |
     realdpi |   .2840548   .0564912     5.03   0.000     .1723096    .3958001
       _cons |   26.23553   6.328403     4.15   0.000     13.71732    38.75373
------------------------------------------------------------------------------

这个结果显示了我们的模型并不稳健,并且残差体现了一部分自相关的趋势。但是为了解释上述观点和讨论,让我们先来忽略这些可能存在的问题。现在,让我们来生成一些事后静态估计:

. reg realcons L.realcons realdpi if tin(1950q1,1983q4)
. estimates store consmodel
. forecast create forecaststat, replace
. forecast estimates consmodel
. set seed 1
. forecast solve, prefix(sf_) static  ///
    begin(tq(1984q1)) end(tq(1985q4)) ///
	simulate(betas, statistic(stddev, prefix(ssd_)) ///
	reps(100))

还有一些事后动态估计:

. forecast create forecastdy, replace
. forecast estimates consmodel
. set seed 1
. forecast solve, prefix(df_)   ///
     begin(tq(1984q1)) end(tq(1985q4)) ///
	 simulate(betas, statistic(stddev, prefix(dsd_)) ///
	 reps(100))

让我们比较这两种估计:

list realcons sf_realcons df_realcons if tin(1984q1,1985q4)
     +--------------------------------+
     | realcons   sf_rea~s   df_rea~s |
     |--------------------------------|
137. |   3579.7    3575.46    3575.46 |
138. |   3628.3    3623.25     3620.4 |
139. |   3653.5    3677.66    3672.34 |
140. |   3700.9    3702.37    3715.05 |
141. |   3756.8    3734.69    3744.22 |
     |--------------------------------|
142. |   3791.5    3795.35    3786.88 |
143. |   3860.9    3812.42    3809.31 |
144. |   3874.2    3870.97    3836.26 |
     +--------------------------------+

注意到在第一个时间段,静态和动态估计是一致的,但是之后会有所不同。在作图之前,让我们计算一下静态和动态的 95%预测区间的上界和下界。

gen sf_y_up = sf_realcons + >invnormal(0.975)*ssd_realcons
gen sf_y_dn = sf_realcons + >invnormal(0.025)*ssd_realcons
gen df_y_up = df_realcons + >invnormal(0.975)*dsd_realcons
gen df_y_dn = df_realcons + >invnormal(0.025)*dsd_realcons

生成图表:

twoway (line realcons    year)  ///
       (line sf_realcons year)  ///
	   (line sf_y_up     year, lpattern(dash)) ///
	   (line sf_y_dn     year, lpattern(dash)) ///
	   if tin(1984q1,1985q4)
Graph2.png
Graph2.png
twoway (line realcons year)     ///
       (line df_realcons year)  ///
	   (line df_y_up year,lpattern(dash))  ///
	   (line df_y_dn year,lpattern(dash))  ///
	   if tin(1984q1,1985q4)
Graph3.png
Graph3.png

3. 结论

结果从图中可知,相比于静态预测值,大部分的动态预测值在区间内,这意味着动态预测更具参考意义。

连享会计量方法专题……

相关课程

连享会-直播课 上线了!
http://lianxh.duanshu.com

免费公开课:


课程一览

支持回看,所有课程可以随时购买观看。

专题 嘉宾 直播/回看视频
最新专题 DSGE, 因果推断, 空间计量等
Stata数据清洗 游万海 直播, 2 小时,已上线
研究设计 连玉君 我的特斯拉-实证研究设计-幻灯片-
面板模型 连玉君 动态面板模型-幻灯片-
面板模型 连玉君 直击面板数据模型 [免费公开课,2小时]

Note: 部分课程的资料,PPT 等可以前往 连享会-直播课 主页查看,下载。


关于我们

  • Stata连享会 由中山大学连玉君老师团队创办,定期分享实证分析经验。直播间 有很多视频课程,可以随时观看。
  • 连享会-主页知乎专栏,300+ 推文,实证分析不再抓狂。
  • 公众号推文分类: 计量专题 | 分类推文 | 资源工具。推文分成 内生性 | 空间计量 | 时序面板 | 结果输出 | 交乘调节 五类,主流方法介绍一目了然:DID, RDD, IV, GMM, FE, Probit 等。
  • 公众号关键词搜索/回复 功能已经上线。大家可以在公众号左下角点击键盘图标,输入简要关键词,以便快速呈现历史推文,获取工具软件和数据下载。常见关键词:课程, 直播, 视频, 客服, 模型设定, 研究设计, stata, plus, 绘图, 编程, 面板, 论文重现, 可视化, RDD, DID, PSM, 合成控制法

连享会主页  lianxh.cn
连享会主页 lianxh.cn

连享会小程序:扫一扫,看推文,看视频……

扫码加入连享会微信群,提问交流更方便

✏ 连享会学习群-常见问题解答汇总:
https://gitee.com/arlionn/WD