ApproximateBayesianComputation
In [1]:
import numpy as np
import matplotlib.pyplot as pl
%matplotlib inline
In [14]:
data = 5.0 + 2.0 * np.random.randn(10)
meanD = np.mean(data)
stdD = np.std(data)
In [28]:
def abcAcceptance(pars):
if (pars[1] < 0):
return False
samples = pars[0] + pars[1]*np.random.randn(10)
diffMean = np.abs(meanD - np.mean(samples))
diffStd = np.abs(stdD - np.std(samples))
if ((diffMean < 0.1) and (diffStd < 0.2)):
return True
else:
return False
In [29]:
start = np.asarray([4.0,2.3])
chain = np.zeros((2,25001))
chain[:,0] = start
for i in range(25000):
proposal = chain[:,i] + 0.7 * np.random.randn(2)
if (abcAcceptance(proposal)):
chain[:,i+1] = proposal
else:
chain[:,i+1] = chain[:,i]
In [30]:
pl.plot(chain[0,:],'.')
Out[30]:
In [31]:
pl.plot(chain[1,:],'.')
Out[31]:
In [32]:
print "{0} - {1}".format(np.mean(chain[0,:]),np.std(chain[0,:]))
In [33]:
print "{0} - {1}".format(np.mean(chain[1,:]),np.std(chain[1,:]))
In [ ]: