Mercurial > hg > python
changeset 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 | bb46148fab91 |
children | 9f40651f6080 |
files | distr_3.py |
diffstat | 1 files changed, 35 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/distr_3.py Wed Jul 28 17:55:36 2021 +0100 @@ -0,0 +1,35 @@ +#!/usr/bin/python3 +'''Simulate stats for showing segments are the same as the whole''' +# Simulate normal distributions of coin flips with slightly +# unfair coins +# Usage: distr_3.py segsize flipcount nsegs max-bias +# Requires python3.6 as of 2021-07-28 +# Runs nsegs*segsize experiments, each involving flipcount flips. +# Experiments in a given segment have a bias around 0.5, +# randomly chosen between 0 and max-bias (which must be < 0.5 + +import sys, random, signif +from nltk import FreqDist + +n=int(sys.argv[1]) +m=int(sys.argv[2]) +ss=int(sys.argv[3]) +b=float(sys.argv[4]) + +whole=FreqDist() + +def fd(n,m,bias): + global whole + f=FreqDist() + split=random.uniform(0.5-bias,0.5+bias) + for i in range(n): + res=sum(int(random.uniform(0,1)>split) for j in range(m)) + f[res]+=1 + whole[res]+=1 + return f + +segs=[fd(n,m,b) for s in range(ss)] + +whole.bell() + +