view distr_3.py @ 30:9f40651f6080

works, but not quite right for cc simulation
author Henry S. Thompson <ht@inf.ed.ac.uk>
date Thu, 29 Jul 2021 10:21:51 +0100
parents 7d6bc790b213
children 1252f8100c6a
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)]
for s in segs:
  print("%6.3g %6.3g"%(s.mean(), s.sd()))

whole.bell(block=False)
segs[4].bell()