给你一个za例子,你自己用数据运行吧
new; cls;
load data[,]=? ; @数据调用格式你自己设置吧@
y=data;
maxlag=4;
pi0=0.15;
call zatest1(y,maxlag,pi0);
proc(0)=zatest1(y,maxlag,pi0);
local thresholdt,n,dy,t1,t2,tb,i,j,x,d,lag,temp,rhs,tval,taua,taub,tauc;
thresholdt=1.6;
n=rows(y);
dy=y[2:n]-y[1:n-1];
t1=maxc(round(n*pi0)|maxlag+5); t2=minc(round(n*(1-pi0))|n-(maxlag+5)+1);
taua=zeros(t2-t1+1,1); taub=zeros(t2-t1+1,1); tauc=zeros(t2-t1+1,1);
tb=t1;
do while tb<=t2;
print "---------";
print/lz "tb=" tb;
print "---------";
d=(zeros(tb,1)|ones(n-tb,1));
lag=maxlag;
do while lag>=1;
j=2+lag;
x=y[j-1:n-1];
i=1;
do while i<=lag;
x=x~dy[j-1-i:n-1-i];
i=i+1;
endo;
rhs=x~ones(n-j+1,1)~seqa(1,1,n-j+1)~d[j:n,.];
temp=rhs[.,1]; rhs[.,1]=rhs[.,cols(x)]; rhs[.,cols(x)]=temp;
print/lz lag;; tval=dftau(dy[j-1:n-1],rhs);
if abs(tval)>thresholdt;
break;
endif;
lag=lag-1;
endo;
if lag==0;
x=y[j-1:n-1];
endif;
print/lz "ZA Test(MODEL A): break at" tb;;print/lz "lag=" lag;
taua[tb-t1+1]=dftau(dy[j-1:n-1],x~ones(n-j+1,1)~seqa(1,1,n-j+1)~d[j:n,.]);
print;
d=(zeros(tb,1)|seqa(1,1,n-tb));
lag=maxlag;
do while lag>=1;
j=2+lag;
x=y[j-1:n-1];
i=1;
do while i<=lag;
x=x~dy[j-1-i:n-1-i];
i=i+1;
endo;
rhs=x~ones(n-j+1,1)~seqa(1,1,n-j+1)~d[j:n,.];
temp=rhs[.,1]; rhs[.,1]=rhs[.,cols(x)]; rhs[.,cols(x)]=temp;
print/lz lag;; tval=dftau(dy[j-1:n-1],rhs);
if abs(tval)>thresholdt;
break;
endif;
lag=lag-1;
endo;
if lag==0;
x=y[j-1:n-1];
endif;
print/lz "ZA Test(MODEL B): break at" tb;;print/lz "lag=" lag;
taub[tb-t1+1]=dftau(dy[j-1:n-1],x~ones(n-j+1,1)~seqa(1,1,n-j+1)~d[j:n,.]);
print;
d=(zeros(tb,1)|ones(n-tb,1))~(zeros(tb,1)|seqa(1,1,n-tb));
lag=maxlag;
do while lag>=1;
j=2+lag;
x=y[j-1:n-1];
i=1;
do while i<=lag;
x=x~dy[j-1-i:n-1-i];
i=i+1;
endo;
rhs=x~ones(n-j+1,1)~seqa(1,1,n-j+1)~d[j:n,.];
temp=rhs[.,1]; rhs[.,1]=rhs[.,cols(x)]; rhs[.,cols(x)]=temp;
print/lz lag;; tval=dftau(dy[j-1:n-1],rhs);
if abs(tval)>thresholdt;
break;
endif;
lag=lag-1;
endo;
j=2+lag;
if lag==0;
x=y[j-1:n-1];
endif;
print/lz "ZA Test(MODEL C): break at" tb;;print/lz "lag=" lag;
tauc[tb-t1+1]=dftau(dy[j-1:n-1],x~ones(n-j+1,1)~seqa(1,1,n-j+1)~d[j:n,.]);
tb=tb+1;
endo;
print;
print "Model A:";
print/lz "tb=" minindc(taua)+t1-1;; print "minZA=" minc(taua);
print/lz "tb=" maxindc(taua)+t1-1;; print "maxZA=" maxc(taua);
print " aveZA=" meanc(taua);
print "Model B:";
print/lz "tb=" minindc(taub)+t1-1;;print "minZA=" minc(taub);
print/lz "tb=" maxindc(taub)+t1-1;;print "maxZA=" maxc(taub);
print " aveZA=" meanc(taub);
print "Model C:";
print/lz "tb=" minindc(tauc)+t1-1;;print "minZA=" minc(tauc);
print/lz "tb=" maxindc(tauc)+t1-1;;print "maxZA=" maxc(tauc);
print " aveZA=" meanc(tauc);
endp;
proc dftau(dy,x);
local n1,k,b,e,s2hat,varb,se,tau;
n1=rows(x); k=cols(x);
b=inv(x'x)*x'dy;
e=dy-x*b;
s2hat=e'e/(n1-k);
varb=s2hat*inv(x'x);
se=sqrt(diag(varb));
tau=b[1]./se[1];
print "tau=" tau;; print/rz "( n=" n1 ")";
retp(tau);
endp;
|