(Sorry! I'm unable to reply to the previous thread for some reason)

My likelihood procedure takes in a vector of initial values x0 and returns a scalar value for the log likelihood through an iterative process. The procedure compiles correctly and seems to be able to calculate the likelihood value.

x0 = {0.09, 0.062, 0.932, 0.354, 0.016, 0.058, 0.002, -0.147, 0.417};

proc log_lik(x0);

@local variables for procedure@

local t,F,beta_ll,P_ll,j_itr,beta_tl,p_tl,eta_tl,f_tl,beta_tt,F1,F2,F3,F4,

p_tt,kt,C,Q1,Q2,Q3,Q,R,sigd,sigu,sigg,rhogu,rhogd,rhodu,sig2d,sig2u,sig2g,gm1,gm0,d0,d1,siggu,siggd,sigdu,rho,

kappa,A,B1,B2,M0,M0b,M1, M1a,M1b,M2,M2a,M2b,beta,lnlik,z,rho12,sig1,sig2,sig12,h;

@Assign Parameter values @

t=cols(ymat);

d0=x0[1,1];

gm0=x0[2,1];

d1=x0[3,1];

gm1=x0[4,1];

sigu=x0[5,1];

sigg=x0[6,1];

sigd=x0[7,1];

rhodu=x0[8,1];

rhogu=x0[9,1];

siggd = 0; //by assumption

rhogd = 0;

siggd = 0;

rho = 0.969;

kappa = 0.1387;

sig2d = sigd^2;

sig2u = sigu^2;

sig2g = sigg^2;

siggu = rhogu*sigg*sigu;

sigdu = rhodu*sigd*sigu;

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@

F1=gm1~0~1~0;

F2=0~0~0~0;

F3=0~0~0~0;

F4=0~0~0~0;

F=F1|F2|F3|F4;

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|(A-d1*A);

M1a=0~0;

M1b=0~d1;

M1=M1a|M1b;

M2a=1~1~0~0;

M2b=(B2*gm1-B2*d1)~0~B2~-B1;

M2=M2a|M2b;

R=0;

lnlik=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

sig1=(f_tl[1,1])^(0.5);

sig2=(f_tl[2,2])^(0.5);

sig12=(f_tl[1,2])^(0.5);

rho12=sig12/(sig1*sig2);

beta_ll = beta_tt; p_ll=p_tt; //set next periods values

if j_itr < start; goto skip; endif;

lnlik= lnlik-(ln(det(f_tl))+eta_tl[1:2,J_itr]'*inv(f_tl)*eta_tl[1:2,J_itr]);

//print lnlik;

skip: J_itr = J_itr+1;

endo;

retp(-lnlik);

endp;

{x,f,g,cov,ret} = maxlik(ymat,0,&log_lik,x0);

G0159 : Wrong number of parameters [maxutil.src, line 2912]

Currently active call:

File maxutil.src, line 2912, in log_lik

a0 = ll(x,z);

Traceback:

File maxutil.src, line 2912, in _max_rdd

a0 = ll(x,z);

File maxutil.src, line 423, in _max

vof = _max_rdd(lfct,0,x0,0,0,0,LLoutput,Lmaxlag,dataset,vindx,row,

File maxlik.src, line 547, in maxlik

{ x,f,g,h,retcode,Lmlfhess,Lmlitdta,Lmlcpvcp,Lmlhsvcp,_max_dat,

File maxlik.src, line 649, in <main>

endp;

## 2 Answers

0

The problem is as I suspected. Your likelihood procedure takes only one input, the starting values. It needs to take two inputs. Below is the description from the manual. Also, take a look at some of the Maximum Likelihood examples such as `maxlik1.e`, etc. They will be located in your GAUSSHOME/examples directory.

**Writing the Log-likelihood Function**

The user must provide a procedure for computing the log-likelihood for a matrix of observations. The procedure must have two input arguments: first, a vector of parameter values, and second, the data matrix. The output argument is the log-likelihood for the observations in the second argument evaluated at the parameter values in the first argument. Suppose that the function procedure has been named `pfct`, the following considerations apply:

The format of the procedure is:

logprob = pfct(x,y);

where `x` is a column vector of parameters of the model

and `y` the data matrix

The output from the procedure `pfct` is the vector of log-likelihoods for a set of observations.

0

Thanks a lot. I wanted to follow-up and say that I found Ronald Schoenberg's CML and Maxlik handbooks very helpful. (For those like myself that read through many past user posts to troubleshoot.)

## Your Answer

## 2 Answers

The problem is as I suspected. Your likelihood procedure takes only one input, the starting values. It needs to take two inputs. Below is the description from the manual. Also, take a look at some of the Maximum Likelihood examples such as `maxlik1.e`, etc. They will be located in your GAUSSHOME/examples directory.

**Writing the Log-likelihood Function**

The user must provide a procedure for computing the log-likelihood for a matrix of observations. The procedure must have two input arguments: first, a vector of parameter values, and second, the data matrix. The output argument is the log-likelihood for the observations in the second argument evaluated at the parameter values in the first argument. Suppose that the function procedure has been named `pfct`, the following considerations apply:

The format of the procedure is:

logprob = pfct(x,y);

where `x` is a column vector of parameters of the model

and `y` the data matrix

The output from the procedure `pfct` is the vector of log-likelihoods for a set of observations.

Thanks a lot. I wanted to follow-up and say that I found Ronald Schoenberg's CML and Maxlik handbooks very helpful. (For those like myself that read through many past user posts to troubleshoot.)