Search code examples
matlabrandompoisson

MatLab:Generate N pseudo-random numbers with a Poisson distribution having mean M and total T where N,M, and T are user defined


I’d like to be able to generate in MatLab a sequence of N pseudo-random numbers with a Poisson distribution having mean M. The sum of the N numbers should be T. N, M, and T are always positive or zero and would be user specified parameters to any function.

Obviously, if T is small relative to N it is likely that there will be problems achieving a total of T. In that case the function could just return the values T and then N-1 zeros or an error code. However, it is highly likely that in most cases T>>N.

I have been trying variations based on the method of generating random numbers with a given distribution provided at http://matlabtricks.com/post-44/generate-random-numbers-with-a-given-distribution and trying various normalizations at each step but have not been successful.


Solution

  • You could try to approximate what you want by using multinomial distribution.

    If you use Wikipedia notation, then k=N, n=T and pi=M/T. Poisson distribution has distinctive property of mean equal to variance, but if your parameters are such that pi is small, then mean npi would be quite close to variance npi(1-pi). Sum would be automatically (by property of multinomial) equal of T.

    Multinomial sampling in Matlab is done using mnrmd function.

    UPDATE

    Wrt comment, lets consider N sampled values vi, and write their sum

    Sum(i=1...N) vi = T

    Lets compute mean value of the left and right side of this equation.

    Sum(i=1...N) E(vi) = E(T) = T

    On the right side, mean value of constant is constant itself. On the left side we have

    Sum(i=1...N) E(vi) = Sum(i=1...N) M = N*M = T

    Therefore, M=T/N and pi=M/T=1/N.