Maximum Likelihood estimation - fminsearch
3 views (last 30 days)
Show older comments
Hi everyone,
I am trying to estimate a Vector Autoregression (VAR) model with two endogenous variables and one lag using maximum likelihood (ML). My idea is to use "fminsearch" in order to minimise the (-1)*(log-likelihood), equivalently maximise the log-likelihood. However, I make a mistake and I do not see where. In particular the code seems to get stuck at the initial conditions, no matter which they are. The log-likelihood function is:
LLF = -(T*n/2)*log(2*pi) + (T/2)*log(determinant(inverse(omega))) -0.5*sum(over t) [ (y(t) - A*x(t))'*inverse(omega)*(y(t) - A*x(t))]
where n is the number of endogenous variables, my case 2 T is the sample size y(t) is a 2*1 vector of endogenous variables x(t) are the regressors. since I assume one lag, these are lagged values of y omega is the variance-covariance matrix.
My code is below, I actually create the y and x series myself. It can be run by giving the initial conditions and then executing the function as follows:
x0 = [0.5 ; 0.36 ; 0.8 ; 0.2]; [x, fval, exitflag, output] = fminsearch(@likelihood_ist, x0) ;
Does anyone have any ideas? Thanks a lot!!
******** THE CODE
function F = likelihood_ist(x)
err1 = randn(100,1); err2 = randn(100,1);
v1=zeros(90,1); v2=zeros(90,1);
for i=2:91 v1(i)= 0.8*v1(i-1) + 0.56*v2(i-1) + err1(i); v2(i)= 0.6*v2(i-1) + 0.24*v1(i-1) + err2(i); end
v1(1) = [] ; v2(1) = [] ;
SampleSize = length(v1); nvars = 2 ;
c1 = x(1) ; c2 = x(2) ; c3 = x(3) ; c4 = x(4) ; A = [c1 c2 ; c3 c4] ; omega = cov(err1, err2);
y = [v1 v2] ; for i = 2:length(y) y1 = zeros(nvars, 1); xx= zeros(nvars,1) ; y1(1) = y(i,1) ; y1(2) = y(i,2) ; xx(1) = y(i-1, 1) ; xx(2) = y(i-1, 2) ; summing(i-1) = (y1-A*xx)'*(inv(omega))*(y1-A*xx); end
allsum = sum(summing) ; F = (-1)* ((-SampleSize*nvars/2)*log(2*pi)+(SampleSize/2)*log(det(inv(omega))) - 0.5*allsum) ;
0 Comments
Answers (1)
Matt J
on 7 Mar 2013
Edited: Matt J
on 7 Mar 2013
FIMINSEARCH experiments with different x, trying to find one that will reduce your -1*loglikelihood. Because your function output is also based on random quantities, however, changing x alone may not be enough to find a downward direction. If not, FMINSEARCH would give up.
Bottom line - your loglikelihood is not supposed to be stochastic.
0 Comments
See Also
Categories
Find more on Linear and Nonlinear Regression in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!