Mercurial > hg > python
annotate distr_3.py @ 29:7d6bc790b213
simulation of multi-segment coin flip with bias
author | Henry S. Thompson <ht@inf.ed.ac.uk> |
---|---|
date | Wed, 28 Jul 2021 17:55:36 +0100 |
parents | |
children | 9f40651f6080 |
rev | line source |
---|---|
29
7d6bc790b213
simulation of multi-segment coin flip with bias
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff
changeset
|
1 #!/usr/bin/python3 |
7d6bc790b213
simulation of multi-segment coin flip with bias
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff
changeset
|
2 '''Simulate stats for showing segments are the same as the whole''' |
7d6bc790b213
simulation of multi-segment coin flip with bias
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff
changeset
|
3 # Simulate normal distributions of coin flips with slightly |
7d6bc790b213
simulation of multi-segment coin flip with bias
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff
changeset
|
4 # unfair coins |
7d6bc790b213
simulation of multi-segment coin flip with bias
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff
changeset
|
5 # Usage: distr_3.py segsize flipcount nsegs max-bias |
7d6bc790b213
simulation of multi-segment coin flip with bias
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff
changeset
|
6 # Requires python3.6 as of 2021-07-28 |
7d6bc790b213
simulation of multi-segment coin flip with bias
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff
changeset
|
7 # Runs nsegs*segsize experiments, each involving flipcount flips. |
7d6bc790b213
simulation of multi-segment coin flip with bias
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff
changeset
|
8 # Experiments in a given segment have a bias around 0.5, |
7d6bc790b213
simulation of multi-segment coin flip with bias
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff
changeset
|
9 # randomly chosen between 0 and max-bias (which must be < 0.5 |
7d6bc790b213
simulation of multi-segment coin flip with bias
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff
changeset
|
10 |
7d6bc790b213
simulation of multi-segment coin flip with bias
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff
changeset
|
11 import sys, random, signif |
7d6bc790b213
simulation of multi-segment coin flip with bias
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff
changeset
|
12 from nltk import FreqDist |
7d6bc790b213
simulation of multi-segment coin flip with bias
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff
changeset
|
13 |
7d6bc790b213
simulation of multi-segment coin flip with bias
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff
changeset
|
14 n=int(sys.argv[1]) |
7d6bc790b213
simulation of multi-segment coin flip with bias
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff
changeset
|
15 m=int(sys.argv[2]) |
7d6bc790b213
simulation of multi-segment coin flip with bias
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff
changeset
|
16 ss=int(sys.argv[3]) |
7d6bc790b213
simulation of multi-segment coin flip with bias
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff
changeset
|
17 b=float(sys.argv[4]) |
7d6bc790b213
simulation of multi-segment coin flip with bias
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff
changeset
|
18 |
7d6bc790b213
simulation of multi-segment coin flip with bias
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff
changeset
|
19 whole=FreqDist() |
7d6bc790b213
simulation of multi-segment coin flip with bias
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff
changeset
|
20 |
7d6bc790b213
simulation of multi-segment coin flip with bias
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff
changeset
|
21 def fd(n,m,bias): |
7d6bc790b213
simulation of multi-segment coin flip with bias
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff
changeset
|
22 global whole |
7d6bc790b213
simulation of multi-segment coin flip with bias
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff
changeset
|
23 f=FreqDist() |
7d6bc790b213
simulation of multi-segment coin flip with bias
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff
changeset
|
24 split=random.uniform(0.5-bias,0.5+bias) |
7d6bc790b213
simulation of multi-segment coin flip with bias
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff
changeset
|
25 for i in range(n): |
7d6bc790b213
simulation of multi-segment coin flip with bias
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff
changeset
|
26 res=sum(int(random.uniform(0,1)>split) for j in range(m)) |
7d6bc790b213
simulation of multi-segment coin flip with bias
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff
changeset
|
27 f[res]+=1 |
7d6bc790b213
simulation of multi-segment coin flip with bias
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff
changeset
|
28 whole[res]+=1 |
7d6bc790b213
simulation of multi-segment coin flip with bias
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff
changeset
|
29 return f |
7d6bc790b213
simulation of multi-segment coin flip with bias
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff
changeset
|
30 |
7d6bc790b213
simulation of multi-segment coin flip with bias
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff
changeset
|
31 segs=[fd(n,m,b) for s in range(ss)] |
7d6bc790b213
simulation of multi-segment coin flip with bias
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff
changeset
|
32 |
7d6bc790b213
simulation of multi-segment coin flip with bias
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff
changeset
|
33 whole.bell() |
7d6bc790b213
simulation of multi-segment coin flip with bias
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff
changeset
|
34 |
7d6bc790b213
simulation of multi-segment coin flip with bias
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff
changeset
|
35 |