Generating a binomial distribution around zero

▼魔方 西西 提交于 2019-12-10 10:04:52

问题


I'm looking to generate a binomial-esque distribution. I want a binomial distribution but I want it centred around zero (I know this doesn't make much sense with respect to the definition of binomial distributions but still, this is my goal.)

The only way I have found of doing this in python is:

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

Is there a real name for this distribution? Does this code actually give me what I want (and how can I tell)? Is there a cleaner / nicer / canonical / already implemented way of doing this?


回答1:


What you're doing is fine if you want a "discretized" normal distribution centered around 0. If you want integer values, you should round n*p before subtracting.

But the limit of the binomial distribution is just the normal distribution when n becomes large and with p bounded away from 0 or 1. since n*p is not going to be an integer except for certain values, why not just use the normal distribution?




回答2:


The probability distributions implemented in the scipy.stats module allow you to shift distributions arbitrarily by specifying the loc keyword in the constructor. To get a binomial distribution with mean shifted close to 0, you can call

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

(Be sure to use an integer value for loc with a discrete distribution.)

Here's an example:

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

Edit:

To generate the actual random numbers, use the rvs() method which comes with every random distribution in the scipy.stats module. For example:

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


来源:https://stackoverflow.com/questions/15572434/generating-a-binomial-distribution-around-zero

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!