MATLAB Answers

0

Constraints on a set of parameter in the likelihood function with fmincon

Asked by Alessandra Costa on 6 Feb 2019
Latest activity Edited by Alessandra Costa on 6 Feb 2019
Hello to everyone, I setted a gamma loglikelihood function in Matlab, defined through a set of parameter theta, that is a 4 by 1 vector [w,a,b,eta] and variable x (a vector n by 1); by using the fmincon I would like to define some constraints. In particular, they are a>=0, b>=0 and a+b<1. The loglikelihood is a function of x and mi variables, where a is associated to x(t-1) and b to mi (t-1) but I've some difficulties in defining them. I think I can set lb=[-Inf 0 0 -Inf] but I don't know how to constrain the sum of a+b to be less than 1,or if I have to pass them in a anonymous function. The loglikood function refers to x, but I've also mi, in the specification that is created within the function by a for cycle.
Thank you in advance.

  0 Comments

Sign in to comment.

Products


Release

R2018b

2 Answers

Answer by Alan Weiss
on 6 Feb 2019
 Accepted Answer

I don't understand whether you are optimizing over x, over theta, or over both. If theta is fixed and you are optimizing over x, then you should write
[X,FVAL,EXITFLAG,OUTPUT] = fmincon(@(x)gammamle(theta,x),x0,A,b,[],[],lb,ub,[],options);
where x0 is your initial guess for x. In this case, ensure that your lower and upper bound vectors have the same length as your x0 vector, and the A and b matrices need to expect a variable of that size, too.
If you are optimizing over theta, then you should write
[X,FVAL,EXITFLAG,OUTPUT] = fmincon(@(theta)gammamle(theta,x),theta0,A,b,[],[],lb,ub,[],options);
where theta0 is your initial value of theta.
If you are optimizing over both x and theta, then you need to rewrite your objective function to accept a vector z = [x,theta] and parse out the variables in the function, something like
function f = myfun(z)
theta = z(1:4);
x = z(5:end);
% Your code here for computing y
end
Again, in this case, your lower and upper bounds should be the same length as z, and the A and b matrices need to be adjusted as well. The function call would be
[X,FVAL,EXITFLAG,OUTPUT] = fmincon(@myfun,z0,A,b,[],[],lb,ub,[],options);
Alan Weiss
MATLAB mathematical toolbox documentation

  1 Comment

Thank you for you answer. I'll follow you suggestions and I'll check my code.

Sign in to comment.


Answer by Matt J
on 6 Feb 2019
Edited by Matt J
on 6 Feb 2019

Set
lb=[-Inf 0 0 -Inf];
ub=[];
A=[0 1 1 0];
b=1;

  7 Comments

I know I don't have equality constraints. I call the fmincon function with this command:
[X,FVAL,EXITFLAG,OUTPUT,LAMBDA,GRAD,HESSIAN] = fmincon(gammamle(theta,x),theta0,ind1,A,b,[],[],lb,ub,[],options,[]);
where gammamle(theta,x) is my function, defined through theta and x; theta is a 4*1 row vector of parameters and x is 4683*1 vector, referring to my variable of interest; then I specified theta0=[0.1,0.2,0.75,0.8] as initial points for the optimizations, ind1 is my variable of interest (ind1=x), and A, B, lb and ub are defined as you previously suggested. options refers only to the algorithm chosen. I don't know why I got this error
You are creatively inventing your own syntax for fmincon, which of course has no hope of working. As you can see from the fmincon documentation, there is no 3rd input argument allowing you to input a "variable of interest", ind1.The 3rd and 4th arguments are meant to be your inequality data A,b.
Please clarify for us what a "variable of interest" means.
No, I'm following a suggestion code from a microeconomic book, that suggests me to use this specification when I call the fmincon function. But thanks you for the answer

Sign in to comment.