Hi. Any help will be greatly appreciated! I'm having trouble using the optmum procedure.
I'm calling the optmum procedure by:
{xout,fout,gout,cout} = optmum(&lik_fcn,prmtr_in);
i have defined a vector of starting values:
prmtr_in = 0.001|0.0001|0.0025|0.06|0.07|0.8|0.9|0.2|0.5;
The function that I want minimized is the "lik_fcn" where I have the procedure below. It has a vector of inputs and also returns a single output. However, I am getting an error:
Currently active call: File optutil.src, line 153, in lik_fcn vof = fnct(x0); /* Initial function value */ Traceback:
File optutil.src, line 153, in _optmum
vof = fnct(x0); /* Initial function value */
File optmum.src, line 264, in optmum
{ x,f0,g,retcode,Lopfhess,Lopitdta } = _optmum(fnct,x0,
proc lik_fcn(prmtr);
@local variables for procedure@
local beta_mat,F,beta_ll,P_ll,j_itr,beta_tl,p_tl,eta_tl,f_tl,beta_tt,
p_tt,kt,C,Q1,Q2,Q3,Q,R,sig2d,sig2u,sig2g,gm1,gm0,d0,d1,siggu,siggd,sigdu,rho,
kappa,A,B1,B2,M0,M0b,M1, M1a,M1b,M2,M2a,M2b,beta,lnl;
@Assign Parameter values @
sig2d=prmtr[1,1];
sig2u=prmtr[2,1];
sig2g=prmtr[3,1];
gm1=prmtr[4,1];
gm0=prmtr[5,1];
d0=prmtr[6,1];
d1=prmtr[7,1];
siggu=prmtr[8,1];
siggd=0; //by assumption
sigdu=prmtr[9,1];
rho=0.969;
kappa=0.1387; //backed out
A = kappa/(1-rho) + (gm0-d0)/(1-rho);
B1 = 1/(1-rho*d1);
B2 = 1/(1-rho*gm1);
Beta_ll={0,0,0,0}; //@initial guess for coefficients@ (b_0_0)
P_ll = {10 10 10 10,10 10 10 10,10 10 10 10,10 10 10 10}; //@Uncertainty associated with initial guess@ (p_0_0)
eta_tl=zeros(2,t);
@Transition Equations@
F={gm1 0 1 0, 0 0 0 0, 0 0 0 0, 0 0 0 0};
C={0 0 0, 1 0 0, 0 1 0, 0 0 1};
Q1=sig2d~siggu~siggd;
Q2=siggu~sig2g~sigdu;
Q3=siggd~sigdu~sig2u;
Q=Q1|Q2|Q3;
@Measurement Equations@
M0=gm0|(1-d1)*A;
M1a=0~0;
M1b=0~d1;
M1=M1a|M1b;
M2a=1~1~0~0;
M2b=B2*(gm1-d1)~0~B2~-B1;
M2=M2a|M2b;
R=0;
lnl=0;
j_itr=2;
do until j_itr>t;
Beta_tl = F*beta_ll; //conditional expectation of beta
P_tl = F*P_ll*F' + C*Q*C'; //conditional expectation of var-beta
eta_tl[1:2,J_itr]=ymat[1:2,J_itr]-M0-M1*ymat[1:2,J_itr-1]-M2*Beta_tl; //prediction error
f_tl=M2*P_tl*M2' + R; //variance of Yt
Kt=P_tl*M2'*inv(f_tl); //kalman gain
Beta_tt = Beta_tl + Kt* eta_tl[1:2,J_itr]; //updating for beta
P_tt = (eye(1) - Kt*M2)*P_tl; //updating for var beta
beta_ll = beta_tt; p_ll=p_tt; //set next periods values
if j_itr < start; goto skip; endif;
lnl = lnl - 0.5*ln(2*pi*f_tl) - 0.5* (eta_tl^2)/f_tl;
skip: J_itr = J_itr+1;
endo;
retp(-lnl);
endp;
2 Answers
0
The procedure computing the objective function must return a scalar value. That is not the case with your function. In this statement
lnl = lnl - 0.5*ln(2*pi*f_tl) - 0.5* (eta_tl^2)/f_tl;
f_tl and eta_tl are matrices. Also, note that the slash operator is a linear solve with a leading dot. I suspect you really want a "./" not a "/", but in any event lnl must be a scalar value.
0
Thanks a lot! I understand now. I need to call the procedure twice separately.
Your Answer
2 Answers
The procedure computing the objective function must return a scalar value. That is not the case with your function. In this statement
lnl = lnl - 0.5*ln(2*pi*f_tl) - 0.5* (eta_tl^2)/f_tl;
f_tl and eta_tl are matrices. Also, note that the slash operator is a linear solve with a leading dot. I suspect you really want a "./" not a "/", but in any event lnl must be a scalar value.
Thanks a lot! I understand now. I need to call the procedure twice separately.
