Search code examples
pythonnumpyscipypoisson

Bivariate Poisson Distribution in Python


I would like to draw N times from a bivariate Possion distribution. Is there a Python module similar to the package bivpois in R?

In Python, I only know the libraries scipy.stats.poisson and numpy.random.possion which allow me to make draws from a univariate Poisson distribution depending on a single parameter lambda, but not from a bivariate or multivariate.


Solution

  • You can do it by yourself pretty easily since I don't see any built-in method:

    https://en.wikipedia.org/wiki/Poisson_distribution#Bivariate_Poisson_distribution

    Steps:

    1. Generate 3 independent Poisson variables Z_i with parameters lambda_i
    2. Generate two P_i = Z_i + Z_3 for i = 1, 2 which follows Poi(lambda_i + lambda_3)

    Code:

    import numpy
    lam1 = 1
    lam2 = 2
    lam3 = 3
    #wrap next part in a loop to generate more than 1 sample
    a = np.random.poisson(lam1)
    b = np.random.poisson(lam2)
    c = np.random.poisson(lam3)
    bivariate1 = a + c #follows Poi(lam1+lam3)
    bivariate2 = b + c #follows Poi(lam2+lam3)