在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)
Run Code Online (Sandbox Code Playgroud)
我想应用相同的方法来将两个或多个法线拟合到我所拥有的单变量值集,但是在周期域内.也就是说,具有0°至360°的值的角度连接在一起作为圆形范围.我不知道如何声明它以使MATLAB理解这种术语.
是否可以更改此实现以添加循环范围案例?
此致,伊格纳西奥
我正在使用 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);
Run Code Online (Sandbox Code Playgroud)
机器学习功能
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;
Run Code Online (Sandbox Code Playgroud)
我希望它有帮助!R 中还有一个工具箱可以处理这种估计http://cran.r-project.org/web/packages/circular/circular.pdf。
如果您对 k 的正性有疑问,为了避免处理约束优化,请执行 k=exp(kk) 并估计 kk 。