我正在使用MATLAB使Beta分布适合我的数据。
为此,有多个选项,例如fitdist
,它们提供一组a
和b
,并且可以使用betastat
访问统计信息(均值和标准差)或只是mean
和std
命令。
但是,如果我希望我的分布具有给定的均值,而只有std是未知的,该怎么办。
有一个例子。我有一个变量箱大小的半直方图,具有定义的中心比率,其概率如下:
central_ratios = [.005 .1 .4 .8 1];
probabilities = [.5 .3 .1 .08 .02];
vul = sum(central_ratios.*probabilities);
现在,我想对数据拟合'beta分布',其范围在[0,1]之间,均值等于vul
。我现在需要的是最好的std
或a
和b
对。
答案 0 :(得分:0)
fitdist
用于beta分布从betafit
获取分布参数,这为给定数据的分布,a
和{{ 1}},然后使用b
优化log(a)
和log(b)
以使可能性最大化。
您的定义分布均值的约束条件在fminsearch
和a
之间建立了强制关系。 From Wikipedia的均值b
与mu
和a
相关,因此:
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
的分布,并在此约束条件下使数据的似然函数局部最大化。