微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为非标准 Beta 分布生成随机数

如何解决为非标准 Beta 分布生成随机数

我需要使用以下参数生成遵循 beta 分布的随机数。 X 在 [0.2,2] 之间,均值 = 0.60 和标准差 = 0.15。

我已经有了这段代码,但是当我总结生成向量的均值和标准差时,它们与输入参数不一致。恐怕有些东西不能正常工作,有人可以帮忙吗?

这是代码

ac,bc=0.2,2.0
mc,sc=0.6,0.15
mc = (mc-ac)/(bc-ac)
sc = (sc**2/(bc-ac)**2)**0.5
alpha_C_Crit = mc*(mc*(1-mc)/sc**2-1)
beta_C_Crit = (1-mc)*(mc*(1-mc)/sc**2-1)
C_crit= beta.rvs(alpha_C_Crit,beta_C_Crit,loc=0.2,scale=2.0,size=100000)

生成向量的汇总 C_crit.mean()=0.6445875200893583(不接近 0.60)和 C_crit.std()=0.16723411402825206 不接近 0.15。

解决方法

我没有发现您的错误(尽管您似乎在不必要地进行平方和平方根)。我继续使用 numpy 独立完成了我自己的实现,以下产生了具有目标均值和标准差的结果:

import numpy

my_min = 0.2
my_max = 2.0
mu = 0.6
sigma = 0.15

# Rescale distribution to range of std beta: (0,1)
scale_factor = my_max - my_min
std_mu = (mu - my_min) / scale_factor
std_sigma = sigma / scale_factor

# Convert mu/sigma to alpha/beta as used by numpy.random.beta()
nu = std_mu * (1.0 - std_mu) / (std_sigma * std_sigma) - 1.0
alpha_param = std_mu * nu
beta_param = (1.0 - std_mu) * nu

# Generate std betas,scale and translate back to original parameterization
ary = scale_factor * numpy.random.beta(alpha_param,beta_param,100000) + my_min

使用 JMP 统计软件分析结果产生以下直方图和汇总统计数据:

Histogram and summary stats for generated sample

这不会接近范围的上限,因为接近 2.0 的值将与平均值相差超过 9 个标准差。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。