view 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
line wrap: on
line source

#!/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()