In [1]:
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
import sympy
Deriving the CDF
$PMF=(1-\theta)^x\theta$
In [3]:
p=sympy.Symbol(“p”,positive=True)
x=sympy.Symbol(“x”)
PMF=(1-p)**x*p
CDF=sympy.Sum(PMF,(x,0,x)).doit()
CDF
Out[3]:
$\displaystyle 1 – \left(1 – p\right)^{x + 1}$
In [18]:
# upper bound
u=sympy.Symbol(“u”)
sympy.solve(CDF.subs({x:x-1})-u,x)[0]
Out[18]:
$\displaystyle \frac{\log{\left(1 – u \right)}}{\log{\left(1 – p \right)}}$
In [20]:
# lower bound
u=sympy.Symbol(“u”)
sympy.solve(CDF-u,x)[0]
Out[20]:
$\displaystyle \frac{\log{\left(\frac{u – 1}{p – 1} \right)}}{\log{\left(1 – p \right)}}$
In [22]:
u=np.random.rand(1000)
p=0.1
np.floor(np.log(1-u)/np.log(1-p))
Out[22]:
array([ 2., 14., 11., 17., 11., 10., 20., 10., 1., 3., 7., 11., 15.,
2., 6., 4., 20., 32., 12., 12., 6., 13., 1., 1., 9., 23.,
0., 15., 10., 34., 29., 12., 6., 18., 4., 5., 3., 4., 10.,
1., 0., 5., 22., 4., 10., 2., 22., 15., 6., 5., 3., 6.,
16., 10., 0., 18., 16., 7., 1., 7., 46., 29., 0., 7., 5.,
16., 20., 52., 5., 7., 1., 11., 0., 6., 7., 6., 14., 4.,
2., 5., 12., 12., 4., 6., 1., 8., 11., 0., 57., 29., 5.,
3., 6., 11., 15., 7., 2., 27., 1., 9., 1., 1., 4., 38.,
9., 4., 4., 4., 12., 8., 0., 2., 26., 27., 0., 11., 10.,
42., 9., 1., 0., 19., 12., 1., 15., 9., 2., 35., 0., 3.,
1., 3., 21., 6., 40., 10., 13., 25., 23., 0., 5., 12., 3.,
7., 20., 1., 3., 39., 12., 1., 2., 7., 24., 9., 0., 0.,
0., 1., 10., 22., 12., 5., 0., 18., 0., 22., 3., 7., 2.,
16., 32., 8., 2., 9., 7., 1., 3., 1., 4., 4., 6., 8.,
10., 18., 12., 0., 1., 6., 4., 6., 3., 2., 3., 3., 7.,
36., 5., 3., 1., 6., 25., 5., 0., 2., 15., 7., 6., 21.,
14., 18., 2., 4., 2., 0., 2., 3., 0., 13., 3., 27., 5.,
8., 6., 3., 0., 21., 10., 2., 0., 13., 9., 1., 5., 37.,
2., 2., 1., 5., 17., 0., 9., 8., 9., 25., 3., 7., 3.,
22., 6., 14., 0., 14., 15., 7., 6., 9., 3., 7., 12., 8.,
13., 2., 9., 1., 9., 1., 31., 2., 9., 9., 49., 22., 2.,
28., 3., 12., 16., 17., 1., 0., 7., 3., 3., 2., 3., 34.,
0., 12., 0., 6., 0., 5., 8., 6., 0., 11., 3., 8., 2.,
6., 16., 1., 9., 4., 0., 4., 4., 5., 5., 13., 2., 40.,
9., 0., 0., 13., 0., 18., 0., 11., 9., 10., 1., 3., 13.,
1., 0., 6., 1., 14., 3., 18., 1., 5., 0., 0., 14., 1.,
14., 8., 1., 14., 1., 2., 0., 9., 36., 5., 14., 16., 25.,
2., 5., 1., 1., 10., 10., 10., 9., 0., 21., 0., 1., 10.,
2., 11., 6., 5., 0., 15., 10., 3., 4., 1., 11., 5., 4.,
2., 19., 12., 10., 7., 8., 1., 5., 7., 8., 3., 19., 5.,
18., 9., 18., 0., 0., 5., 0., 47., 7., 4., 0., 4., 17.,
5., 47., 2., 4., 1., 7., 5., 1., 4., 13., 3., 0., 2.,
7., 11., 7., 7., 5., 1., 16., 18., 11., 34., 12., 14., 17.,
47., 9., 6., 1., 8., 1., 1., 11., 5., 5., 5., 13., 3.,
2., 8., 0., 9., 12., 9., 4., 6., 25., 3., 12., 17., 0.,
5., 2., 14., 0., 0., 1., 6., 10., 8., 5., 6., 13., 28.,
6., 10., 9., 4., 7., 10., 8., 3., 27., 14., 3., 3., 15.,
10., 18., 4., 1., 18., 65., 2., 0., 14., 3., 11., 2., 1.,
31., 22., 4., 0., 5., 3., 16., 8., 2., 14., 1., 21., 18.,
22., 4., 1., 0., 8., 8., 0., 4., 0., 9., 0., 24., 30.,
3., 5., 8., 7., 16., 8., 1., 6., 5., 10., 4., 2., 8.,
3., 8., 19., 8., 2., 1., 16., 8., 20., 26., 4., 3., 0.,
5., 6., 38., 7., 0., 2., 4., 17., 3., 14., 1., 12., 0.,
3., 3., 0., 4., 1., 16., 14., 31., 5., 1., 7., 25., 1.,
12., 34., 12., 4., 13., 15., 5., 1., 3., 8., 9., 12., 7.,
10., 2., 6., 8., 7., 19., 3., 4., 4., 13., 12., 11., 4.,
2., 0., 2., 1., 0., 0., 2., 8., 3., 6., 25., 15., 5.,
7., 4., 0., 2., 6., 16., 14., 5., 2., 15., 11., 3., 8.,
1., 0., 10., 3., 14., 0., 7., 8., 16., 7., 0., 5., 25.,
10., 13., 19., 0., 32., 11., 1., 1., 3., 0., 5., 4., 16.,
13., 11., 4., 0., 1., 2., 0., 1., 16., 23., 0., 0., 27.,
0., 0., 0., 6., 22., 0., 9., 7., 27., 3., 8., 11., 13.,
1., 11., 7., 3., 4., 4., 0., 6., 0., 8., 2., 6., 6.,
4., 18., 7., 1., 9., 0., 10., 7., 3., 9., 1., 3., 3.,
3., 6., 9., 0., 0., 3., 11., 23., 9., 21., 18., 24., 4.,
2., 5., 4., 0., 0., 5., 8., 25., 36., 8., 6., 28., 17.,
24., 1., 5., 12., 6., 0., 14., 17., 2., 24., 3., 1., 6.,
1., 17., 13., 30., 8., 4., 5., 2., 5., 6., 24., 16., 6.,
0., 3., 6., 36., 4., 7., 7., 45., 9., 8., 7., 21., 17.,
1., 2., 12., 13., 24., 4., 6., 19., 4., 3., 5., 3., 10.,
5., 14., 1., 4., 3., 47., 3., 6., 10., 4., 2., 5., 4.,
5., 5., 5., 2., 12., 4., 2., 7., 14., 1., 9., 17., 2.,
0., 21., 4., 22., 17., 7., 7., 0., 28., 14., 4., 5., 25.,
6., 34., 17., 2., 28., 12., 7., 10., 3., 48., 3., 0., 3.,
8., 5., 52., 2., 3., 8., 11., 9., 11., 9., 3., 7., 3.,
2., 7., 0., 4., 0., 8., 15., 0., 20., 24., 15., 16., 24.,
20., 1., 2., 9., 4., 3., 0., 2., 3., 7., 20., 7., 5.,
23., 1., 7., 20., 20., 2., 2., 14., 7., 4., 15., 9., 16.,
3., 10., 13., 3., 1., 3., 3., 13., 11., 1., 1., 8., 14.,
8., 18., 5., 6., 4., 14., 5., 3., 0., 15., 0., 3., 19.,
0., 5., 8., 8., 2., 11., 7., 7., 16., 14., 7., 5., 7.,
9., 0., 4., 5., 51., 4., 12., 15., 6., 0., 18., 5., 2.,
0., 0., 48., 3., 4., 5., 14., 5., 0., 0., 7., 4., 4.,
25., 0., 6., 4., 40., 13., 4., 11., 8., 2., 23., 3., 13.,
2., 5., 17., 20., 9., 4., 13., 6., 14., 8., 19., 13., 3.,
2., 13., 7., 1., 1., 32., 18., 16., 6., 4., 1., 43., 11.,
12., 3., 5., 29., 3., 0., 9., 14., 15., 5., 1., 4.])
In [0]: