首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将numpy.random.beta( alpha,beta)和scipy.stats.beta(alpha,beta,loc,scale)之间的β分布的α和beta参数联系起来?

如何将numpy.random.beta( alpha,beta)和scipy.stats.beta(alpha,beta,loc,scale)之间的β分布的α和beta参数联系起来?
EN

Stack Overflow用户
提问于 2022-06-14 17:59:27
回答 2查看 265关注 0票数 0

我使用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堆栈

EN

回答 2

Stack Overflow用户

发布于 2022-06-14 23:44:39

如果您有beta发行版的参数ablocscale,并且希望使用NumPy从发行版生成n随机样本,则可以编写

代码语言:javascript
复制
sample = loc + scale*np.random.beta(a, b, size=n)  # Legacy random API

或者,使用更新的(和推荐的) API

代码语言:javascript
复制
rng = np.random.default_rng()
sample = loc + scale*rng.beta(a, b, size=n)

您还可以使用rvs()方法的scipy.stats.beta

代码语言:javascript
复制
sample = scipy.stats.beta.rvs(a, b, loc=loc, scale=scale, size=n)
票数 0
EN

Stack Overflow用户

发布于 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。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72621500

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档