1

我正在使用 MATLAB 将 beta 分布拟合到我的数据中。

为此,有几个选项,例如fitdist,它们提供了一组aand并且可以使用或简单地使用and命令b访问统计信息(均值和标准差) 。betastatmeanstd

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

有一个例子。我有一个可变大小的半直方图,其中定义了中心比率及其概率,如下所示:

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

现在我想为数据拟合一个“beta 分布”,范围在 [0,1] 之间,均值等于vul. 我现在需要的是最好的或std配对。ab

4

1 回答 1

0

fitdist对于 beta 分布,从 获取分布参数betafit,它为给定数据的分布设置适当的似然函数,一些启发式初始猜测ab然后使用 优化log(a)log(b)最大化似然性fminsearch

a您定义分布均值的约束在和之间建立了强制关系b从 Wikipedia 来看,平均值与以下mu内容有关:ab

mu = 1 / (1 + b/a)

这可以重新排列以给出一个分布参数给定另一个:

b = a * (1/mu - 1)

要检查 MATLAB 中可用的 beta 分布拟合的无约束实现,并且您正在寻求约束,您可以betafit使用以下命令查看源代码:

edit betafit

至少在 MATLAB R2018b 中,您会发现 和 的优化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函数,并从命令行声明新的似然函数。无论哪种方式,您都可以将参数替换为在此约束内最大化可能性的受约束参数:

loga = fminsearch(negloglike1,pstart(1),opts);
phat = exp(loga) * [1 (1/mu - 1)];

生成的 beta 分布参数phat将保证产生具有均值的分布mu,并在给定此约束的情况下局部最大化您的数据的似然函数。

于 2019-05-07T12:20:19.413 回答