Ich versuche, ein Beta-Binomialmodell in Matlab zu schätzen (der Datensatz ist verfügbar here).Optimierung in Matlab: wie man Beschränkungen für Parameter definiert
Meine Likelihood-Funktion:
function out= log_Lik(x,Data);
ms=Data(:,1);
xs=Data (:,2);
alpha=x(1)
beta=x(2)
P12=exp(gammaln(ms+1)-gammaln(xs+1)-gammaln(ms- xs+1)).*exp(gammaln(alpha+xs)+gammaln(beta+ms-xs)-gammaln(alpha+beta+ms));
P3= exp(gammaln(alpha+beta)-gammaln(alpha)-gammaln(beta));
P=P12.*P3;
Like=log(P);
out= -sum(Like);
Mein Maximum-Likelihood-Schätzcode:
Data=readtable('prob3.xls');
ms=Data.m_s;
xs=Data.x_s;
%% Data parsed to optimisation function
Data = [ms xs ];
f = @(x)log_Lik(x, Data);
%%
options = optimoptions('fminunc','Display','iter','Algorithm','quasi- newton','MaxIter',10000,'TolX',10^-30,'TolFun',10^-30);
alpha0 = 1;
beta0=1;
x0 = [alpha0 beta0];
[x,fval,exitflag,output,grad,hessian] = fminunc(f,x0,options)
Allerdings, wenn ich den obigen Code ausführen, erhalte ich eine Fehlermeldung, dass:
Error using gammaln
Input must be nonnegative.
was ich glaube, kommt von zufällig negativen Werten zu alpha
während optimisi ng der Likelihood-Funktion. Jetzt habe ich mich gefragt, ob es eine Möglichkeit gibt, eine Einschränkung für die Werte zu definieren, die als meine Parameter übergeben werden (alpha
und beta
), wenn der Optimierungsbefehl ausgeführt wird. Alle Hinweise würden sehr geschätzt werden.
Verwenden fmincon und fügen Sie eine Einschränkung alpha positive –
Dank Matthew zu halten Könntest du mich wissen lassen, wo in meinem Code und wie das möglich ist? Tut mir leid, ich bin sehr neu in Matlab – AliCivil