我使用numpy分布来生成montecarlo模拟的随机数,使用更合适的库来拟合结果的分布。问题是,相应地,拟合的参数作为4个参数(a,b,loc,scale)返回到枕库,我需要找到numpy (a,b)的等效参数。
如果拟合scipy.stats.beta(a,b,loc=0,scale=1)(蓝线),则等于numpy.random.beta(a,b)(条形)

我尝试将它们与scify.stats.beta.fit(x、floc=0、fscale=1)相匹配,并得到以下错误:
scipy.stats._continuous_distns.FitDataError:data中的无效值。最大似然估计与‘β’要求0< (x - loc)/scale <1的每x在data。
如果不将floc设置为0,fscale设置为1,则返回的结果如下: 147.1,147.06,-23.56,137.13,即a,b,loc,scale。
如何将它们转换为a、b、loc=0、scale=1?
我的问题是,我正在创建一个软件,在这个软件中,用户按照概率分布创建输入变量,执行Monte模拟,并得到输出变量的结果。我正在对这些变量的分布执行拟合,并且需要以相同的格式将拟合的参数返回给用户,最初输入它们。如果用户使用alpha和beta参数在beta发行版之后创建变量,则不能返回4个参数来模拟Beta分布。我已经能够用我需要的其他发行版来完成它,但我正在与Beta堆栈
发布于 2022-06-14 23:44:39
如果您有beta发行版的参数a、b、loc和scale,并且希望使用NumPy从发行版生成n随机样本,则可以编写
sample = loc + scale*np.random.beta(a, b, size=n) # Legacy random API或者,使用更新的(和推荐的) API
rng = np.random.default_rng()
sample = loc + scale*rng.beta(a, b, size=n)您还可以使用rvs()方法的scipy.stats.beta
sample = scipy.stats.beta.rvs(a, b, loc=loc, scale=scale, size=n)发布于 2022-09-13 14:01:04
我有个概念上的问题。要强制loc和scale为0和1,就像在numpy中一样,您可以这样做:
betafun =scipy.stats.beta.fit(值、floc=0、fscale=1)
问题是,如果值大于1或小于0,则不能以这种方式调整一系列数字,因为我正用loc和scale值精确地设置这些限制,代码将返回一个错误。如果我需要调整不在0到1范围内的一系列数字,则loc和scale的值不能是0和1。
https://stackoverflow.com/questions/72621500
复制相似问题