2016-06-13 12 views
1

MATLABには最尤推定のパッケージがありますが、教育目的のために私は自分自身でアルゴリズムを作成しています。さて、私は(私は負の対数尤度を使用しているので)最小化しようとしている関数を書いた。ここでは、次のとおりです。MATLABにおける最尤推定のアルゴリズムの記述

function ml = two_var(param, data) 
mu = param(1); 
sigma = param(2); 
n=numel(data); 
sumto = 0; 
for i=1:n 
    c = data(i)- mu; 
    sumto = sumto + c; 
    ml = n/2*log(2*pi)+n/2*log(sigma^2)+1/(2*sigma^2)*sumto^2; 
end 

このコードは、ガウスdistibutionの推定に関するものです。今、私が持っている問題は、この関数が有効なfminunc入力ではないようです...どのように問題を回避できますか?私は間違って何をしていますか?助けたい人に感謝;)

+1

私の論文はかなり似た段階で立ち往生しています。 ;) –

+0

なぜそれは有効な入力ではありませんか?問題を回避する方法は、matlabs inbuiltを使用するのではなく、独自の最小化関数を書くことです。 –

+0

fminunc(@(param)two_var(param、data)、param0) 'でfminuncを呼び出しましたか? – Jommy

答えて

0

質問にコメントしてくれた皆様に感謝します。さて、コードを改善するためにあなたの役に立つコメントをすべて使用しました。ここに私の最終結果があります。

function ml = t_var(param) 
rng default; 
data = random('norm',0,1,[400,1]); 
z = (data - param(1)) ./ param(2); 
L = -.5.*z.*z - log(sqrt(2.*pi).*param(2)); 
ml = -sum(numel(data).*L); 

このコードは間違いなく読みやすいです。さらに、MATLABで許可されている高速ベクトル演算を使用します。この関数を定義した後、

x0 =[0 0] 
[x,fval] = fminsearch(@t_var,x0,optimset('TolX',1e-19,'MaxFunEvals',1000,'MaxIter',1000)) 

でそれを呼び出すそして、あなたがそうでなければ得ることができるものと一致しているML推定値を得ることが容易です。

私にいくつかのヒントをくれた皆様に感謝します! ;)

関連する問題