maximize a log-likelihood function

4 visualizzazioni (ultimi 30 giorni)
Isma
Isma il 2 Giu 2015
Risposto: Alan Weiss il 2 Giu 2015
Hi all,
I am looking for an advice in regards the following task:
I've set up a function
function proba = pdf(x,a,b,c,d);
where a,b,c,d are scalars and x a vector. So far I am happy with the output.
After defining the log-likelihood function in a separate function-m file such as:
%_llik.m
function loglik=_llik(theta,data);
loglik=-sum(log(pdf(data,theta1,theta2,theta3,theta4)));
I've run from a script file (optimization without constraints):
theta0=[1.3,0.89,0.034,0.0056]
[theta_eq,fval,exitflag,output,grad,hessian] = ...
fminunc(@(theta) _llik(theta,data),theta0)
that unfortunately returns:
Undefined function '_llik' for input arguments of type 'double'.
Error in @(theta) _llik(theta,data)
Error in fminunc (line 254)
f = feval(funfcn{3},x,varargin{:});
Caused by:
Failure in initial user-supplied objective function evaluation. FMINUNC cannot continue.
Error using edit (line 66)
Undefined function or variable 'theta'.
Hence my questions:
1/ are the errors due to my function proba which should be re-built in array terms such as:
function proba = pdf(data,theta(1),theta(2),theta(3),theta(4));
2/ Having read a bit of documentation on @fmincon, is it possible 'clearly' to illustrate how can I add constraints on
0<theta(1)<=2;
-1<=theta(2)<=1;
0<=theta(3)<=+inf;
-inf<=theta(4)<=+inf; % belongs to R not sure if it's worth constraining it to -inf;+inf
Actually I am not sure if i can set:
lb=[0,-1,0,-inf] and ub = [2,1,+inf,+inf]
Thanks in advance
  1 Commento
David Young
David Young il 2 Giu 2015
Might be a red herring, but I wonder about that initial underscore. Is it in the m-file name? If so, could there be a system problem with filenames beginning with underscore that stops their being found? Might be worth the experiment of renaming the file and the function.

Accedi per commentare.

Risposte (1)

Alan Weiss
Alan Weiss il 2 Giu 2015
You are quite right, the way to keep the function from stepping out of bounds is to set the bounds exactly as you guessed:
lb = [0,-1,0,-Inf];
ub = [2,1,Inf,Inf];
Make sure that you pass the bounds to fmincon correctly:
[x,fval,exitflag] = fmincon(@_llik,theta0,[],[],[],[],lb,ub)
Alan Weiss
MATLAB mathematical toolbox documentation

Categorie

Scopri di più su Problem-Based Optimization Setup in Help Center e File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by