epoh 发表于 2011-10-13 08:34
1.请注意短信息 请将文件放在正确路径: C:\Program Files\Ox\packages\MSVAR\HAMILTON.OX
...
老师您好,我想您肯定也知道gauss的使用方法吧。我在网上下载了kim的程序,但是运行不出来,不知道是那里除了问题。不知老师能不能帮我修改下,使程序能够运行呢?
/* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Decomposition of REAL GNP into random walk (stochastic trend) component
vs. stationary (cyclical) component
Model:
y_t = y_{1t} + y_{2t}
Trend: y_{1t}=g_{t-1} + y_{1,t-1} + v_t, v_t -- i.i.d. N(0,sigma_v^2)
g_t = g_{t-1} + w_t w_t -- i.i.d. N(0,sigma_w^2)
Cycle: y_{2t}=phi_1* y_{2,t-1} + phi_2* y_{2,t-2} + u_t,
u_t -- i.i.d. N(0,sigma_u^2)
cjkim@korea.ac.kr
WRITTEN BY C.J. KIM, DEPT. OF ECONOMICS, KOREA UNIVERSITY
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
new;
library optmum, pgraph;
format /m1 /rd 9,6;
load data[195,1]=gdp4795.prn; @Real GDP 1947.1 - 1995.3; From CITIBASE@————我试了下数据根本就无法导入。我是把数据改成txt文件,路径名也改了,依然不行。
yy= LN(data[1:195,1]);
t=rows(yy);
@ Maximum Likelihood Estimation @
START=21; @1951.I @
prmtr_in={ 2 2 2 2 1 };
PRMTR_IN=PRMTR_IN';
@Initial values of the parameters @
{xout,fout,gout,cout}=optmum(&lik_fcn,PRMTR_IN);
@ prmtr estimates, -log lik value, Grandient, code@
prm_fnl=trans(xout);
"Calculating Hessian..... Please be patient!!!!";
hessn0=hessp(&lik_fcn,xout);
cov0=inv(hessn0);
grdn_fnl=gradfd(&TRANS,xout);
cov=grdn_fnl*cov0*grdn_fnl';
SD =sqrt(diag(cov)); @Standard errors of the estimated coefficients@
output file=clrk_uc1.out reset;
"==FINAL OUTPUT========================================================";
"initial values of prmtr is";
trans(prmtr_in)';
"==============================================================";
"likelihood value is ";; -fout;
"code";;cout;
"Estimated parameters are:";
prm_fnl';
XOUT';
"Standard errors of parameters are:"; sd';
OUTPUT OFF;
DATA = filter(xout);
output file=clrk_uc1.dta reset;
yy[start:t]~DATA;
output off;
XY(SEQA(1,1,ROWS(DATA)),YY[START:T,1]~DATA[.,1]);
XY(SEQA(1,1,ROWS(DATA)),DATA[.,2]~zeros(rows(data),1));
XY(SEQA(1,1,ROWS(DATA)),DATA[.,3]);
@ END OF MAIN PROGRAM @
@========================================================================@
@========================================================================@
PROC LIK_FCN(PRMTR1);
LOCAL SV,SE,F,H,Q,R,BETA_LL,P_LL,BETA_TL,P_TL,BETA_TT,P_TT,vt,ft, VAL,
LIK_MAT,J_ITER, phi1,phi2,vecpll,prmtr,mu,SW;
PRMTR=TRANS(PRMTR1);
LOCATE 20,1; PRMTR';
SV=PRMTR[1,1]; @s.e. of the random walk component@
SE=PRMTR[2,1]; @s.e. of the AR component@
SW=PRMTR[3,1];
phi1=prmtr[4,1];
phi2=prmtr[5,1];
F=(1~0~0~1)|
(0~phi1~phi2~0)|
(0~1~0~0)|
(0~0~0~1);
H=1~1~0~0;
Q= ZEROS(4,4);
Q[1,1]=SV^2; Q[2,2]=SE^2; Q[4,4]=SW^2;
R= 0;
BETA_LL=0|0|0|0;
P_LL=EYE(4)*100;
LIK_MAT=ZEROS(T,1);
J_ITER = 1;
DO UNTIL J_ITER>T;
BETA_TL = F * BETA_LL ;
P_TL = F * P_LL * F' + Q;
vt=yy[j_iter,1] - H * BETA_TL ; @prediction error@
ft= H * P_TL * H' + R; @variance of forecast error@
BETA_TT= BETA_TL + P_TL * H' * inv(ft) * vt;
P_TT= P_TL - P_TL * H' * inv(ft) * H * P_TL;
LIK_MAT[J_ITER,1] = -0.5*(LN(2*pi*ft) + vt^2/ft);
BETA_LL=BETA_TT;
P_LL=P_TT;
J_ITER = J_ITER+1;
ENDO;
VAL =-SUMC(LIK_MAT[START:T]);
LOCATE 2,20; VAL;
RETP(VAL);
ENDP;
@>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>@
PROC FILTER(PRMTR1);
LOCAL SV,SE,F,H,Q,R,BETA_LL,P_LL,BETA_TL,P_TL,BETA_TT,P_TT,
vt,ft, VAL, LIK_MAT,J_ITER,
phi1,phi2,vecpll,prmtr,mu,SW,BETA_MAT;
BETA_MAT=ZEROS(T,3);
LIK_MAT=ZEROS(T,1);
PRMTR=TRANS(PRMTR1);
LOCATE 20,1; PRMTR';
SV=PRMTR[1,1]; @s.e. of the random walk component@
SE=PRMTR[2,1]; @s.e. of the AR component@
SW=PRMTR[3,1];
phi1=prmtr[4,1];
phi2=prmtr[5,1];
F=(1~0~0~1)|
(0~phi1~phi2~0)|
(0~1~0~0)|
(0~0~0~1);
H=1~1~0~0;
Q= ZEROS(4,4);
Q[1,1]=SV^2; Q[2,2]=SE^2; Q[4,4]=SW^2;
R= 0;
BETA_LL=0|0|0|0; @initial value @
P_LL=EYE(4)*100;
J_ITER = 1;
DO UNTIL J_ITER>T;
BETA_TL = F * BETA_LL ;
P_TL = F * P_LL * F' + Q;
vt=yy[j_iter,1] - H * BETA_TL ;
@prediction error@
ft= H * P_TL * H' + R; @variance of forecast error@
BETA_TT= BETA_TL + P_TL * H' * inv(ft) * vt;
P_TT= P_TL - P_TL * H' * inv(ft) * H * P_TL;
BETA_MAT[J_ITER,.]=BETA_TT[1,1]~BETA_TT[2,1]~BETA_TT[4,1];
BETA_LL=BETA_TT;
P_LL=P_TT;
J_ITER = J_ITER+1;
ENDO;
RETP(BETA_MAT[START:T,.]);
ENDP;
@================================================================@
PROC TRANS(c0); @ constraining values of reg. coeff.@
local c1,d1,d2;
c1=c0;
c1[1:3,.]=exp(-1*c0[1:3,.])/10;
d1=c0[4,1]./(1+abs(c0[4,1]));
d2=c0[5,1]./(1+abs(c0[5,1]));
c1[4,1]=d1+d2;
c1[5,1]= -1* d1*d2 ;
retp(c1);
endp;
gauss新手,很多都不大明白,多谢老师了。