赞
踩
第一步,设置时间序列,注意此处若时间不连续会对后续滞后回归有影响。
#设置时间序列
tsset var~
结果大概这样
. tsset trade_date
time variable: trade_date, 03jan2018 to 27may2020, but with gaps
delta: 1 day
第二步,判断最佳滞后阶数,此处可加判断条件取符合条件部分,至于判断取决于其AIC与BIC,一般AIC值即可判断(AIC越小越好)。
#判断滞后阶数
varsoc var~1 var~2 (if 条件1)
结果这样
. varsoc log_return stk_log_return if time==0
Selection-order criteria
Sample: 12jan2018 - 13mar2020, but with gaps
Number of obs = 96
+---------------------------------------------------------------------------+
|lag | LL LR df p FPE AIC HQIC SBIC |
|----+----------------------------------------------------------------------|
| 0 | 680.432 2.5e-09 -14.134 -14.1124 -14.0806* |
| 1 | 687.212 13.561 4 0.009 2.4e-09 -14.1919 -14.1271 -14.0317 |
| 2 | 698.272 22.119* 4 0.000 2.0e-09* -14.339* -14.231* -14.0719 |
| 3 | 701.008 5.4713 4 0.242 2.1e-09 -14.3127 -14.1615 -13.9387 |
| 4 | 702.141 2.2668 4 0.687 2.2e-09 -14.2529 -14.0586 -13.7721 |
+---------------------------------------------------------------------------+
Endogenous: log_return stk_log_return
Exogenous: _cons
阶数判断有找标星星的就好了,这个就是两阶滞后较优。
也可以一个个回归试一试,报告AIC和BIC比较:
#回归后报告AIC BIC
estat ic
estat ic
Akaike's information criterion and Bayesian information criterion
-----------------------------------------------------------------------------
Model | N ll(null) ll(model) df AIC BIC
-------------+---------------------------------------------------------------
. | 334 1080.45 1100.915 5 -2191.831 -2172.775
-----------------------------------------------------------------------------
Note: BIC uses N = number of observations. See [R] BIC note.
第三步,开始回归,对于滞后二阶回归:
#二阶滞后回归①
reg y l.y l.x l2.y l2.x (if 条件1)
#二阶滞后回归②
var y x,lag(n)
上面两种方法均可,其中①中可以加条件筛选:方法②不能加if判断语句,其中的n即为第二部判断的滞后阶数。
reg log_return l.log_return l.stk_log_return l2.log_return l2.stk_log_return Source | SS df MS Number of obs = 334 -------------+---------------------------------- F(4, 329) = 10.72 Model | .003495038 4 .00087376 Prob > F = 0.0000 Residual | .026808292 329 .000081484 R-squared = 0.1153 -------------+---------------------------------- Adj R-squared = 0.1046 Total | .03030333 333 .000091001 Root MSE = .00903 -------------------------------------------------------------------------------- log_return | Coef. Std. Err. t P>|t| [95% Conf. Interval] ---------------+---------------------------------------------------------------- log_return | L1. | .1295246 .0483182 2.68 0.008 .0344729 .2245763 | stk_log_return | L1. | .0418571 .044596 0.94 0.349 -.0458722 .1295863 | log_return | L2. | -.3160259 .0569197 -5.55 0.000 -.4279985 -.2040534 | stk_log_return | L2. | .0892175 .0450037 1.98 0.048 .0006862 .1777488 | _cons | .0000102 .0004966 0.02 0.984 -.0009668 .0009871 --------------------------------------------------------------------------------
我使用的数据为2018年1月3日到2020年5月27日的数据,有效数据条数为581,但此时显示:
Number of obs = 334
581条记录两阶滞后回归后只剩334个观测值?被吞了?注意,知识点来了,又一个小细节。
并不是计算有问题,只是由于滞后阶数的设置为2,也就是说接下来两天 (注意!不是接下来两个交易日或者有观测数据的日期) 有数据才能计入有效进入回归。而我使用的数据是可转债和股票交易数据,周末没有交易,周五周四的滞后两天是周末,没有观测值就被跳过了,遇到节假日也是同理。也就是说非交易日前两天都没了,所以观测数比实际数据少了40%以上。
如果想要对上一个交易日或者上一个观测进行回归,自行构造虚拟时间序列设置为第一步即可。
第四步,对于使用第三步中方法①的可以使用test命令,对于使用第三步中方法②的可以使用
#报告结果
vargranger
vargranger
Granger causality Wald tests
+------------------------------------------------------------------+
| Equation Excluded | chi2 df Prob > chi2 |
|--------------------------------------+---------------------------|
| log_return stk_log_return | 2.3602 1 0.124 |
| log_return ALL | 2.3602 1 0.124 |
|--------------------------------------+---------------------------|
| stk_log_return log_return | .15784 1 0.691 |
| stk_log_return ALL | .15784 1 0.691 |
+------------------------------------------------------------------+
结果报告就有了,最后一个是p值。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。