Gauss 编程应用于学科前沿一:单位根
单位根理论我就不说了,虽然已经有30余年的历史了,发展也很成熟,但做实证特别是时间序列和长序列面板数据模型时,还需要用到单位根检验。
因此,本帖子从最初的单位根检验开始,到非线性单位根检验,再到面板数据单位根,我们希望通过本帖,基本上掌握单位根检验的各种程序。
在code里,我们有带实际数据的,也有模拟数据,当然也可能只有调用程序,都能用。
我们先从DF检验开始:
1、这个例子是DF检验的模拟,重复10000次,并计算临界值,注意临界值是在原假设下估计的,也就是先生成带单位根的数据AR,即proc gen_ar1(phi0,e_mat); AR程序你也可以自己编,不像这样。
/* Dickey Fuller Distribution */
new;cls;
library pgraph;
tru_phi=1;
H0_phi=1;
n_ob =100;
n_trial =10000;
t_mat=zeros(n_trial,1);
trial=1;
do until trial > n_trial;
trial;;"th Iteration";
e=rndn(n_ob,1);
y=gen_ar1(tru_phi,e);
Yt = y[2:n_ob,1];
Ylag=y[1:n_ob-1,1];
tt=rows(Yt);
X=Ylag~ones(tt,1)~seqa(1,1,tt) ;
b=inv(X'X)* X'Yt;
residual=Yt-X*b;
sigma2=residual'residual/(tt-cols(x));
vc_b = sigma2 * inv(X'X); @Variance-Covariance matrix of b@
se_b =sqrt(vc_b[1,1]); @Standard error of b@
t_value=(b[1,1]-H0_phi)/se_b; @test statistic for H0: phi= H0_phi@
t_mat[trial,1]=t_value;
trial=trial +1;
endo;
sorted_t = sortc(t_mat,1);
output file =dky_flr.out reset;
"5% Critical Value is:" sorted_t[500,1];
output off;
{a,b,c}= histp(t_mat,50);
end;
@======================================@
proc gen_ar1(phi0,e_mat);
local x0_mat,i;
x0_mat = zeros(n_ob,1);
x0_mat[1,1]=e_mat[1,1];
i=2;
do until i>n_ob;
x0_mat[i,1]=phi0*x0_mat[i-1,1] + e_mat[i,1];
i=i+1;
endo;
retp(x0_mat);
endp;