-
Notifications
You must be signed in to change notification settings - Fork 2
/
centrallimittheorem.py
50 lines (40 loc) · 1.56 KB
/
centrallimittheorem.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#! /usr/bin/env python3
import scipy
p = 0.5
n = 10000
k = 1000
coinFlips = scipy.random.random((n,k))<= p
# Note Booleans True for Heads and False for Tails
headsTotal = scipy.sum(coinFlips, axis = 0) # 0..n binomial r.v. sample, size k
# Note how Booleans act as 0 (False) and 1 (True)
mu = p
sigma = scipy.sqrt( p * ( 1-p ) )
a = 0.5
Zn = (headsTotal - n*mu)/(sigma * scipy.sqrt(n))
prob = (scipy.sum( Zn < a )).astype('float')/k
# Note the casting of integer type to float to get float
from scipy.stats import norm
theoretical = norm.cdf(a)
print( "Empirical probability: ", prob)
print( "Central Limit Theorem estimate:", theoretical)
## NAME: centrallimittheorem.py
## USAGE: From shell prompt: python3 centrallimittheorem.py
## or within interactive python3 environment, import filename
## REQUIRED ARGUMENTS: none
## OPTIONS: none
## DESCRIPTION: Experiment of flipping a coin n times
## and repeat the experiment k times
## Compare probability of normalized binomial
## to standard normal cdf
## DIAGNOSTICS: none
## CONFIGURATION AND ENVIRONMENT: none
## DEPENDENCIES: none
## INCOMPATIBILITIES: none known
## PROVENANCE: Created Tue Dec 18, 2012 5:33 AM
## BUGS AND LIMITATIONS: None known
## FEATURES AND POTENTIAL IMPROVEMENTS: None at this time
## AUTHOR: Steve Dunbar
## VERSION: Version 1.0 as of Tue Dec 18, 2012 5:34 AM
## Version 1.1, fixed output labeling, Fri Mar 18, 2016 5:22 AM
## KEYWORDS: Coin flips, binomial random variable
## DeMoivre-Laplace Central Limit Theorem