在 MATLAB 中编写最大似然估计算法

Writing an Algorithm for maximum likelihood estimation in 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

此代码涉及高斯分布的估计。现在,我遇到的问题是此函数似乎不是有效的 fminunc 输入...我该如何解决这个问题?我究竟做错了什么?感谢任何愿意提供帮助的人 ;)

感谢所有帮助评论问题的人。好吧,我已经使用了您所有有用的评论来改进我的代码。这是我的最终结果。

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 估计值。

非常感谢所有给我一些提示的人! ;)