PyMC中随机变量的上界

2024-05-16 17:53:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个变量A,它是Bernoulli分布的,A = pymc.Bernoulli('A', p_A),但是我没有{}的硬值,所以我想对它进行采样。我知道它应该很小,所以我想用指数分布p_A = pymc.Exponential('p_A', 10)。在

但是,指数分布可以返回大于1的值,这将抛出A。有没有一种方法可以绑定p_A的输出,而不必在我自己的@pymc.stochastic修饰函数中重新实现Bernoulli或指数分布?在


Tags: 方法函数pymcbernoullistochasticexponential指数分布硬值
3条回答

PyMC提供边界。以下措施也应起作用:

p_A = pymc.Bound(pymc.Exponential, upper=1)('p_A', lam=10)

对于任何其他遇到这种情况的迷失灵魂:

我认为对于我的目的来说,最好的解决方案是使用β函数来代替(即,我只使用指数分布,因为我希望生成的概率可能很小,而不是出于数学上的方便)。在

对于certain parameter values,它近似于指数函数的形状(对于二项式和法线也可以这样做),但有界于[01]。可能只对数值计算有用,因为我想做任何分析都很痛苦。在

可以使用确定性函数截断指数分布。就我个人而言,我认为最好是使用一个介于0和1之间的分布,但要确切地解决您的问题,可以执行以下操作:

import pymc as pm
p_A = pm.Exponential('p_A',10)

@pm.deterministic
def p_B(p=p_A):
    return min(1, p)

A = pm.Bernoulli('A', p_B)

model = dict(p_A=p_A, p_B=p_B, A=A)
S = pm.MCMC(model)
S.sample(1000)
p_B_trace = S.trace('p_B')[:]

相关问题 更多 >