Matlab 如何使贝塔分布适合具有给定平均值的数据?
我正在使用MATLAB将beta分布拟合到我的数据中 为此,有几个选项,如Matlab 如何使贝塔分布适合具有给定平均值的数据?,matlab,beta-distribution,Matlab,Beta Distribution,我正在使用MATLAB将beta分布拟合到我的数据中 为此,有几个选项,如fitdist,它们提供一组a和b,可以使用betastat或简单的mean和std命令访问统计数据(平均值和标准值) 但是如果我希望我的分布有一个给定的平均值,并且只有性病是未知的,我该怎么办呢 有一个例子。我有一个可变的仓位大小半直方图,定义了中心比率,其概率如下: central_ratios = [.005 .1 .4 .8 1]; probabilities = [.5 .3 .1 .08 .02];
fitdist
,它们提供一组a
和b
,可以使用betastat
或简单的mean
和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
对。fitdist
对于beta分布,从betafit
获取分布参数,它为给定数据的分布设置适当的似然函数,对a
和b
进行一些启发式初始猜测,然后使用fminsearch
优化log(a)
和log(b)
以最大化可能性
定义分布平均值的约束在a
和b
之间建立了强制关系。平均值mu
与a
和b
相关,因此:
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)];
由此产生的贝塔分布参数
phat
将保证产生均值mu
的分布,并在给定此约束的情况下局部最大化数据的似然函数。fitdist
贝塔分布从betafit
获取分布参数,它为给定数据的分布设置适当的似然函数,对a
和b
进行一些启发式初始猜测,然后使用fminsearch
优化log(a)
和log(b)
以最大化似然
定义分布平均值的约束在a
和b
之间建立了强制关系。平均值mu
与a
和b
相关,因此:
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)];
由此产生的贝塔分布参数
phat
将保证产生均值mu
的分布,并在给定此约束的情况下局部最大化数据的似然函数。谢谢,但步骤不清楚。。我相信是“negloglik”。如果你能用一个完整的执行样本编辑答案,我将不胜感激。我已经试着澄清一下答案negloglike
是在betafit
中内部使用的一个函数句柄,您可以按说明检查它。这与negloglik
不同,后者是一种分布对象的方法,不在内部用于betafit
。或者,您可以创建一个目标函数,使用试用参数调用makedist
,然后调用negloglik
,但在makedist
中每次迭代都会产生大量开销。如果您希望答案包含完整的执行示例,您的问题需要一个完整的执行示例作为参考。谢谢,但步骤不清楚。。我相信是“negloglik”。如果你能用一个完整的执行样本编辑答案,我将不胜感激。我已经试着澄清一下答案negloglike
是在betafit
中内部使用的一个函数句柄,您可以按说明检查它。这与negloglik
不同,后者是一种分布对象的方法,不在内部用于betafit
。或者,您也可以使用试验参数和t调用目标函数makedist