How to use fmincon for constrained maximum likelihood?

8 views (last 30 days)
Hi, I'm trying to solve a constrained minimization problem but I get several error messages. Could you help me in adjusting the code? Thanks!
clear all
n=2;
thetatrue=[1 1 2 2 0.2];
mu = [0 0]; %mean and variance covariance matrix
sd = [1 thetatrue(2*n+1); thetatrue(2*n+1) 1];
load data
X=data(:,1:n);
Y=data(:,n+1:size(data,2));
B1(:,2)=-X(:,1);
B1(:,1)=-1;
B2(:,2)=-X(:,2);
B2(:,1)=-1;
C1=(all(bsxfun(@eq,Y,[0 0]),2));
C2=1-C1;
cdf=@(x) mvncdf( [B1*[x(1);x(3)], B2*[x(2);x(4)] ] ,mu,[1 x(5); x(5) 1]);
options=optimset('Algorithm',...
'interior-point','Display','iter','MaxIter',10000,'TolX',10^-30,'TolFun',10^-30);
theta0=thetatrue;
[theta,fval,exitflag,output]=...
fmincon(@(x) log_lik(x,cdf,C1,C2),theta0,[],[],[],[],[-Inf; -Inf; -Inf; -Inf; -1], ...
[+Inf; +Inf; +Inf; +Inf; 1],[],options);
And
function val=log_lik(theta,cdf,C1,C2)
g=cdf(theta);
val=-sum(C1.*log(g)+C2.*log(1-g));
I have also another question: from the theory I know that the set of global minimizers could be non singleton; is there a way to understand it from the results of the optimization procedure?

Accepted Answer

Alan Weiss
Alan Weiss on 12 Feb 2014
I ran exactly the code you gave with your data. fmincon ran to completion:
First-order Norm of
Iter F-count f(x) Feasibility optimality step
0 6 1.503710e+03 0.000e+00 1.317e+03
User objective function returned NaN; trying a new point...
1 14 1.052526e+03 0.000e+00 1.146e+03 1.602e+02
User objective function returned NaN; trying a new point...
2 29 2.470200e+02 0.000e+00 1.015e+02 5.340e+00
3 35 8.972820e+01 0.000e+00 5.300e+01 4.382e+00
4 41 6.477636e+01 0.000e+00 1.000e+01 2.883e+00
5 47 6.067017e+01 0.000e+00 1.829e+01 8.142e-01
6 53 5.640428e+01 0.000e+00 2.277e+01 8.831e-01
7 59 4.446661e+01 0.000e+00 2.729e+01 2.578e+00
8 65 3.106304e+01 0.000e+00 2.037e+01 3.292e+00
9 72 2.835120e+01 0.000e+00 8.090e+00 6.124e-01
10 78 2.596154e+01 0.000e+00 1.259e+00 1.105e+00
11 84 2.594904e+01 0.000e+00 2.985e-01 2.495e-02
12 90 2.594832e+01 0.000e+00 1.000e-01 5.350e-03
13 96 2.594832e+01 0.000e+00 1.995e-02 6.247e-04
14 102 2.594832e+01 0.000e+00 1.996e-04 3.078e-05
15 108 2.594832e+01 0.000e+00 3.789e-06 6.280e-06
16 114 2.594832e+01 0.000e+00 2.000e-06 2.072e-06
17 121 2.594832e+01 0.000e+00 1.780e-06 1.765e-07
18 127 2.594832e+01 0.000e+00 2.175e-06 5.074e-08
19 135 2.594832e+01 0.000e+00 1.263e-06 6.788e-08
20 147 2.594832e+01 0.000e+00 1.582e-06 3.423e-08
21 156 2.594832e+01 0.000e+00 1.780e-06 7.848e-09
Local minimum possible. Constraints satisfied.
fmincon stopped because the size of the current step is less than
the selected value of the step size tolerance and constraints are
satisfied to within the default value of the constraint tolerance.
So unless you give us the error message you saw, I regard that part of the question as answered.
For the second question: no, you cannot tell if there are other local minima by looking at the result of the first minimization run.
For more details, see Local Vs. Global Optima.
Alan Weiss
MATLAB mathematical toolbox documentation

More Answers (0)

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!