view distr_3.py @ 58:a3aaf6c085f4 simple

pass0, initial display working with Run and Space
author Henry Thompson <ht@markup.co.uk>
date Thu, 01 Jun 2023 19:02:22 +0100
parents 1252f8100c6a
children
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)]

print(whole[1],whole.mean(), whole.sd(),sep='\t')
print()

for s in segs:
  print(s[1],s.mean(), s.sd(),sep='\t')

exit()

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