2013-03-22 24 views
3

我正在寻找生成二项式的分布。我想要一个二项式分布,但我希望它以零为中心(我知道这对于二项分布的定义没什么意义,但仍然是,这是我的目标。)在零附近生成二项分布

我发现的唯一方法是在Python中这样做是:

def zeroed_binomial(n,p,size=None): 
    return numpy.random.binomial(n,p,size) - n*p 

是否有这个分布的真名?这段代码是否真的给了我想要的东西(以及我怎么说)?是否有更清洁/更好/经典/已经实现的方式?

+0

我只能看到感觉在这样的分配,如果P = 0.5(否则为中心的概念似乎牵强) – njzk2 2013-03-22 14:28:21

+0

或许中心是打错字了,我的意思是,最常见的元素应该为零。 – jhoyla 2013-03-22 14:29:56

+0

所以基本上是一个二项式,如f(0)= max(f(x))。你在做什么? – njzk2 2013-03-22 14:32:03

回答

2

如果你想要一个以“0”为中心的“离散化”正态分布,你正在做的事情很好。如果你想要整数值,你应该在减去前舍入n*p

limit of the binomial distribution is just the normal distributionn变大,与p界从0或1,因为n*p远不会是除了某些值的整数,为什么不直接使用正态分布?

+1

这对大N来说都是如此,但是操作可能需要一个小N的二项式,在这种情况下,正态分布不会是一个好的近似值。 – 2013-03-22 16:19:34

+0

对'n * p'四舍五入的好的呼叫。 – jhoyla 2013-03-22 17:28:43

+0

@AndrewMao你可以详细谈一下你的意思吗?四舍五入$ n * p $在减去之前为了得到“离散化”的正态分布? – Alex 2017-07-22 11:46:30

2

scipy.stats模块中实现的概率分布允许您通过在构造函数中指定loc关键字来任意移动分布。要获得平均二项分布转移接近0时,您可以拨打

p = stats.binom(N, p, loc=-round(N*p)) 

(请务必使用一个整数值loc与离散分布。)

下面是一个例子:

p = stats.binom(20, 0.1, loc=-2) 
x = numpy.arange(-3,5) 
bar(x, p.pmf(x)) 

bar plot

编辑:

要生成实际的随机数,请使用scipy.stats模块中随机分布随附的rvs()方法。例如:

>>> stats.binom(20,0.1,loc=-2).rvs(10) 
array([-2, 0, 0, 1, 1, 1, -1, 1, 2, 0]) 
+0

我实际上是在寻找符合分布的随机数列表,而不仅仅是分布的样子。我想我可以从分配中产生数字,但不会感觉干净。 – jhoyla 2013-03-24 00:21:54

+0

@jhoyla'scipy.stats'中的每个分发当然都有一个生成随机数的方法。看我的编辑。你为什么觉得它不干净? – silvado 2013-03-24 18:43:36