在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理解这种术语。
是否可以更改此实现以添加循环范围情况?
此致 伊格纳西奥
答案 0 :(得分: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);
ML功能
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。