def __init__(self, alpha=1., beta=1., hyper_alpha=(4., 1.), hyper_beta=(2., 1.)): super(InvGammaPrior, self).__init__(alpha, beta) self._hyper_alpha = Gamma(*hyper_alpha) self._hyper_beta = Gamma(*hyper_beta) self.estimator = InvGammaPosteriorSampler()
def testLogProb(self): g = Gamma(1., 1.) self.assertAlmostEqual(g(1.), numpy.exp(-1.), delta=1e-5) self.assertAlmostEqual(g(2.), numpy.exp(-2.), delta=1e-5) g = Gamma(2., 1.) self.assertAlmostEqual(g(1.), 1. * numpy.exp(-1), delta=1e-5) self.assertAlmostEqual(g(2.), 2. * numpy.exp(-2), delta=1e-5)
def testRandom(self): gamma = Gamma(1., 1.) samples = gamma.random(10000) mu = numpy.mean(samples) var = numpy.var(samples) self.assertAlmostEqual(gamma.alpha / gamma.beta, mu, delta=1e-1) self.assertAlmostEqual(gamma.alpha / gamma.beta**2, var, delta=1e-1)
def testParameterEstimation(self): alpha = 0.1 beta = 0.1 data = numpy.random.gamma(alpha, 1. / beta, 10000) pdf = Gamma(1, 1) pdf.estimate(data) self.assertAlmostEqual(pdf.alpha, alpha, places=2) self.assertAlmostEqual(pdf.beta, beta, places=1)
def calculate_KL((posterior_distances, prior_distances, bins)): from csb.statistics.pdf import Gamma from csb.numeric import log g = Gamma() g.estimate(prior_distances) posterior_hist = np.histogram(posterior_distances, bins=bins, normed=True)[0] return np.trapz(posterior_hist * log(posterior_hist / g(bins[:-1])), bins[:-1])
def testParameters(self): pdf = Gamma(1, 1) pdf.alpha = 2 pdf.beta = 3 self.assertEqual(pdf.alpha, 2) self.assertEqual(pdf.beta, 3) self.assertEqual(pdf.beta, pdf['beta']) def propertyAssignment(): pdf.beta = -1 def directAssignment(p): pdf[p] = -1 self.assertRaises(ParameterValueError, propertyAssignment) self.assertRaises(ParameterValueError, directAssignment, 'alpha') self.assertRaises(ParameterValueError, directAssignment, 'beta')