5

在 MATLAB 统计教程中,有一节名为“拟合更复杂的分布:两个正态的混合” http://www.mathworks.com/help/stats/examples/fitting-custom-univariate-distributions.html

pdf_normmixture = @(x,p,mu1,mu2,sigma1,sigma2) ...
                     p*normpdf(x,mu1,sigma1) + (1-p)*normpdf(x,mu2,sigma2);
lb = [0 -Inf -Inf 0 0];
ub = [1 Inf Inf Inf Inf];
start = [pStart muStart sigmaStart sigmaStart];
paramEsts = mle(x, 'pdf',pdf_normmixture, 'start',start, 'lower',lb, 'upper',ub)

我想应用相同的方法将两个或多个法线拟合到我拥有的一组单变量值,但在周期域内。也就是说,具有 0° 到 360° 值的角度链接在一起作为一个圆形范围。我不确定如何声明它以使 MATLAB 理解这种术语。

是否可以更改此实现以添加循环范围情况?

问候, 伊格纳西奥

4

1 回答 1

1

我正在使用 von Mises 分布http://en.wikipedia.org/wiki/Von_Mises_distribution,它被认为是包裹法线的近似值(请参阅“循环统计 S. Rao Jammalamadaka, A. SenGupta”中的主题中的条件')。不幸的是,我没有 matlab 来测试它,但我认为代码正在运行。因此,如果近似值有效,则可以执行以下操作:

主功能:

% 你应该提供列向量 theta 0-2pi

n=size(theta,1);

mu=0;

k=1;

theParameters=[mu;k];
options = optimset('TolFun',0.01);
outputPar = fminsearch('ml',theParameters,options,n,theta);

机器学习功能

function mLike=ml(theParameters,n,theta)

mu=theParameters(1,1);
k=theParameters(2,1);

theSum=0;
for i=1:n
   theSum=theSum+k*cos(theta(i,1)-mu);
end    
mLike=-n*log(2*pi*besselj(0,k)) + theSum;
mLike=-mLike;

我希望它有帮助!R 中还有一个工具箱可以处理这种估计http://cran.r-project.org/web/packages/circular/circular.pdf

如果您对 k 的积极性有疑问,为了避免处理约束优化,请执行 k=exp(kk) 并估计 kk。

于 2013-03-14T18:14:18.463 回答