Skip to content

Instantly share code, notes, and snippets.

@arpruss
Last active February 19, 2019 19:24
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
Star You must be signed in to star a gist
Save arpruss/4d9a9d5c56312eec0f750fc2b9fbdc54 to your computer and use it in GitHub Desktop.
averaging priors vs averaging posteriors
from random import *
from math import *
def randomOpen():
while True:
r = random()
if 0 < r:
return r
class Grid(object):
def __init__(self, EH=None, NEH=None, ENH=None, NENH=None):
if EH is None:
EH = randomOpen()
NEH = randomOpen()
ENH = randomOpen()
NENH = randomOpen()
s = EH+NEH+ENH+NENH
EH /= s
NEH /= s
ENH /= s
NENH /= s
self.EH = EH
self.NEH = NEH
self.ENH = ENH
self.NENH = NENH
def average(self, a):
EH=self.EH+a.EH
NEH=self.NEH+a.NEH
ENH=self.ENH+a.ENH
NENH=self.NENH+a.NENH
s = EH+NEH+ENH+NENH
return Grid(EH=EH/s,NEH=NEH/s,ENH=ENH/s,NENH=NENH/s)
def posteriorH(self):
return self.EH/(self.EH+self.ENH)
maxDelta = 0
avgDelta = 0
N = 100000
for i in range(N):
g1 = Grid()
g2 = Grid()
p1 = g1.posteriorH()
p2 = g2.posteriorH()
p3 = g1.average(g2).posteriorH()
p4 = (p1+p2)/2
delta = abs(p4-p3)
maxDelta = max(maxDelta,delta)
avgDelta += delta
avgDelta /= N
print(maxDelta,avgDelta)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment