如何使Beta分布适合具有给定均值的数据?

时间:2019-05-06 22:36:09

标签: matlab beta-distribution

我正在使用MATLAB使Beta分布适合我的数据。

为此,有多个选项,例如fitdist,它们提供一组ab,并且可以使用betastat访问统计信息(均值和标准差)或只是meanstd命令。

但是,如果我希望我的分布具有给定的均值,而只有std是未知的,该怎么办。

有一个例子。我有一个变量箱大小的半直方图,具有定义的中心比率,其概率如下:

central_ratios = [.005 .1 .4 .8   1]; 
probabilities  = [.5   .3 .1 .08 .02];
vul = sum(central_ratios.*probabilities);

现在,我想对数据拟合'beta分布',其范围在[0,1]之间,均值等于vul。我现在需要的是最好的stdab对。

1 个答案:

答案 0 :(得分:0)

fitdist用于beta分布从betafit获取分布参数,这为给定数据的分布,a和{{ 1}},然后使用b优化log(a)log(b)以使可能性最大化。

您的定义分布均值的约束条件在fminsearcha之间建立了强制关系。 From Wikipedia的均值bmua相关,因此:

b

可以将其重新排列以给出一个分配参数,而另一个分配参数:

mu = 1 / (1 + b/a)

要检查MATLAB中可用的Beta分布拟合的无约束实现,并且正在寻求约束,可以使用以下命令查看b = a * (1/mu - 1) 源代码:

betafit

至少在MATLAB R2018b中,您会发现edit betafit log(a)的优化发生在声明以下点:

log(b)

可以根据此处使用的优化目标函数来描述您的约束分布拟合问题,这可以使您重用phat = fminsearch(negloglike,pstart,opts); phat = exp(phat); 行为的其他方面:

betafit

您可以创建自己的negloglike1 = @(loga) negloglike([loga log(exp(loga) * (1/mu - 1))]); 副本,以在调用betafit之前进行此声明,也可以在调用该行之后在断点处停止内置fminsearch然后在命令行中声明新的似然函数。无论哪种方式,您都可以用受约束的参数替换,以在此约束内使可能性最大化:

betafit

将保证所得的beta分布参数loga = fminsearch(negloglike1,pstart(1),opts); phat = exp(loga) * [1 (1/mu - 1)]; 导致平均值为phat的分布,并在此约束条件下使数据的似然函数局部最大化。