# integers following Normal distribution

Hello,

how can I produce positive integers, say in (1,n), which follow the normal distribution with parameters (m,sigma).

Thanks.

edit retag close merge delete

Sort by » oldest newest most voted

You could use the binomial distribution to approximate a normal distribution with only integer entries (because of the Central Limit Theorem). You will have to relate the mean of the binomial to the mean of the normal distribution. However, you can not get both the mean to be m and variance to be sigma exactly for any m and sigma, since for the binomial distribution they are closely related.

more

I think it is pretty self explanatory:

# Sample size (not counting negatives!)
sample_size = 10000

# Parameters of the distribution
mean = 10
sigma = 10
dist = RealDistribution('gaussian', sigma)

# Getting the elements (notice the 'mean' in 'event'!)
sample = []
while len(sample) < sample_size :
event = round(mean + dist.get_random_element())
if event >= 0 :
sample.append(event)

# Getting the frequencies and plotting
sample_range = range(min(sample),1+max(sample))
frequencies = [sample.count(i) for i in sample_range]
list_plot(zip(sample_range,frequencies),gridlines=[[mean,mean-sigma,mean+sigma],[]])

more

Thank you for your answer. If mean is integer then it is ok, you get integers following the normal distribution. If mean is not integer then the sampling set is not an integer vector.

( 2012-12-21 04:15:09 -0500 )edit

That's true, sorry! I edited and now it should be fine: "event = round(mean + ...)". Cheers!

( 2012-12-21 04:45:26 -0500 )edit