/* Model: y_t=phi_0+phi_1*y_t-1+e_t, e_t~iidn(0, sig2) 独立正态分布 */ /* abs(phi_1)<1, sig2>0 */ new;cls; library optmum; @============== data generating =================@ t=1000; phi_0=2; phi_1=0.8; sig2 = 10; ymat=zeros(t,1); ymat[1]=rndn(1,1)*sqrt(sig2/(1-(phi_1)^2))+(phi_0/(1-phi_1)); itr=2; do until itr>t; ymat[itr]=phi_0+phi_1*ymat[itr-1]+rndn(1,1)*sqrt(sig2); itr=itr+1; endo; @============ Estimation by MLE =================@ prmtr_in=0.5|0.75|ln(10.5); {xout, fout, cout, gout}=optmum(&lik_f, prmtr_in); prm_fnl=trans(xout); cov=inv(hessp(&lik_f, xout)); grad=gradfd(&trans, xout); cov_fnl=grad*cov*grad'; stde=sqrt(diag(cov_fnl)); t_val=prm_fnl./stde; @=============output ==========================@ output file=mle.out reset; "================="; "The initial values are";;prmtr_in'; "Likelihood Values";;-fout; "Estimated parameters before trans are";;xout'; "Estimated parameters after trans are";;prm_fnl'; "T-values are";;t_val'; "================="; end; @====== Procedures: Log likelihood function set up=====@ proc lik_f(prmtr0); local prmtr, phi_0, phi_1, ssig2, lnl, itr, et, lnf; prmtr=trans(prmtr0); phi_0=prmtr[1]; phi_1=prmtr[2]; ssig2=prmtr[3]; lnl=0; itr=2; do until itr>t; et=ymat[itr]-phi_0-phi_1*ymat[itr-1]; (回归残差) lnf=-0.5*ln(2*pi*ssig2)-0.5*((et^2)/ssig2); (定义似然函数) lnl=lnl+lnf; itr=itr+1; endo; retp(-lnl); endp; @====== Procedures: constraining the parameters =======@ proc trans(prmtr1); local prmtr; prmtr=prmtr1; prmtr[2]=prmtr1[2]/(1+abs(prmtr1[2])); prmtr[3]=exp(prmtr1[3]); retp(prmtr); endp;
版主,有些地方看不懂啊。上面是你给的MLE估计的资料,非常感谢!!但是,你能不能来解释下?
proc lik_f(prmtr0)这句的prmtr0是哪来的啊?把prmtr0传递给trans?还有最后的那个trans的自定义函数是什么意思?在定义似然函数时,把trans返回的值又赋给了估计系数和方差(方差是我猜的,据似然函数的形式)?没看明白

,
还有optmum返回值是都是什么意义?没有对optmum的解释的资料。。。,那个模块的东西一个也不明白。还有prmtr_in的初值是任意赋的吗??
主要是optmum和trans这两块看不明白。希望版大或者版里的高手帮小弟解释下。初学者。。。