昨晚好好做了一下。其实挺简单的。没有写一个完整的程序,只是把计算过程做出来了。供大家参考。
对于一个有5个变量的VAR(1)来说,可以是这样的:(注意需要让当前的估计是这个VAR)
- /* obtain estimated coefficients and vce matrix */
- mata
- b=rowshape(st_matrix("e(b)"),5)
- s=st_matrix("e(Sigma)")
- m0=I(5,5)
- end
- /* calculate all the M matrix */
- forvalues i = 1/24 {
- local ii = `i'-1
- /* for higher order var this needs to be changed */
- mata: m`i' = b*m`ii'
- }
- /* generalized impulse response */
- mata: e=I(5,5)
- /* period 1 */
- forvalues i = 1/5 {
- mata: phi`i' = s[`i',`i']^(-1/2)*m0*s*e[.,`i']
- }
- /* other periods */
- forvalues t = 1/24 {
- forvalues i = 1/5 {
- mata: tmp = s[`i',`i']^(-1/2)*m`t'*s*e[.,`i']
- mata: phi`i' = (phi`i',tmp)
- }
- }
- forvalues i = 1/5 {
- mata: phi`i' = phi`i''
- }
我已经验证过,当估计VAR时使用dfk选项时,这个和EViews的GIRF做出的结果是完全一样的。