Does Benford’s law hold for the Poisson distribution?

85 Views Asked by At

According to the Wikipedia page of Benford’s Law:

Benford's law was empirically tested against the numbers (up to the 10th digit) generated by a number of important distributions, including the uniform distribution, the exponential distribution, the normal distribution, and others.

One of the most common distributions in Nature is the Poisson Distribution. However, this distribution is not mentioned in the Wikipedia article. Does the Poisson distribution satisfy Benford’s Law?

2

There are 2 best solutions below

4
On BEST ANSWER

No, it does not. The Wikipedia article states that "In short, Benford’s law requires that the numbers in the distribution being measured have a spread across at least an order of magnitude"; the source article states that "Roughly speaking, this means that small numbers have to be predominant. That is, when thinking of real-world data, conformity to the NBL necessitates a majority of small objects."

But the Poisson distribution doesn't behave this way. For large $\lambda$, $Poisson(\lambda)$ will have most of its mass within a few multiples of $\sqrt{\lambda}$ of the mean $\lambda$; in particular most draws from $Poisson(\lambda)$ will have the same first digit as $\lambda$ itself, or maybe one less or one more.

Furthermore the source article seems to only include continuous distributions and the Poisson is a discrete distribution. But I know of no reason that a discrete distribution couldn't follow Benford's law. One of the examples in Benford's original paper was street addresses, which are obviously discrete (although related to the continuous distribution of the lengths of the streets).

0
On

For small $\lambda$ a simulation in python shows that the leading digits of Poisson distributed integers $n$ do not satisfy Benford's law.

  • A lot of $n$ are zero thus having a zero as leading digit. Benford's law does not apply to that case.

  • For $\lambda=1$ the leading digit $2$ is reasonably well matched with Poisson, and for $\lambda=2$ the leading digit $4\,,$ but this is as good as it gets.

enter image description here

from numpy import random
import matplotlib.pyplot as plt

def get_leading_digit( s ):
    l = len(s)
    for i in range(0,l):
        if s[i] != '0' and s[i] != '.' and s[i] != '-':
           return( int(s[i]) )
    return( 0 )

x =    [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 ]
benf = [ 0, 301, 176, 125, 97, 79, 67, 58, 51, 46 ]
sim =  [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ]
ec = ['blue','red','black']
for lam in [1,2]:
    p = random.poisson(lam,1000)
    for i in range(len(p)):
        d = get_leading_digit(str(p[i]))
        sim[d] += 1
        if( d == 0 ):
            print( p[i], d )
        print( sim )
    plt.bar( x, sim, fill=False, label=r"$\lambda = ${:3.1f}".format(lam), edgecolor=ec[lam] )
plt.bar( x, benf, fill=False, label="Benford", edgecolor='blue' )
plt.xticks(x)
plt.legend()
plt.show()