2016-11-05 27 views
1

Matlabでベータ二項モデルを推定しようとしています(データセットはhereです)。Matlabの最適化:パラメータの制約を定義する方法

私の尤度関数:

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); 

私の最尤推定コード:

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) 

私は上記のコードを実行したときしかし、私はというエラーを取得:

Error using gammaln 
Input must be nonnegative. 

私は、ランダムな負の値をalphaに渡すことから来ていると信じています尤度関数。最適化コマンドを実行しているときに、パラメータ(alphabeta)として渡された値の制約を定義する方法があるかどうかは疑問でした。どんなヒントも高く評価されます。

+0

documentation for fminconは、私がここに書く時間を持っている何より明確になるだろう。使用のfminconを

を空の配列[]を渡し、アルファ正 –

+0

おかげでマシューを維持するための制約を追加あなたが私のコードでどのようにこれを収容することができるのか教えていただけますか?申し訳ありませんが、私はmatlab – AliCivil

答えて

1

fminunc(現在使用している関数)は、の制約がありません最適化の問題が見つかりました。

一方、fminconは、制約のある最適化問題の極小を検出します。

アルファが肯定的であるという制約があるようですので、fminconを使用して制約を渡す必要があります。

fminconはfminuncと同様に動作します。 "optimoptions( 'fminunc' ..."を読むには "optimoptions( 'fminunc' ...")を変更する必要があります。

[0; -inf]の下限を設定してアルファベットを非負に保つ必要があります。気にしない、単に

関連する問題