def testLogProb(self): fx = [ 2.7939e-24, 1.5305e-03, 2.3028e-02, 6.6302e-02, 1.1759e-01, 1.6810e-01, 2.1365e-01, 2.5255e-01, 2.8438e-01, 3.0937e-01, 3.2806e-01, 3.4111e-01, 3.4922e-01, 3.5307e-01, 3.5329e-01, 3.5048e-01, 3.4515e-01, 3.3778e-01, 3.2878e-01, 3.1850e-01, 3.0726e-01, 2.9531e-01, 2.8289e-01, 2.7018e-01, 2.5736e-01, 2.4454e-01, 2.3185e-01, 2.1937e-01, 2.0717e-01, 1.9532e-01, 1.8385e-01, 1.7280e-01, 1.6220e-01, 1.5205e-01, 1.4236e-01, 1.3315e-01, 1.2440e-01, 1.1611e-01, 1.0828e-01, 1.0088e-01, 9.3917e-02, 8.7363e-02, 8.1207e-02, 7.5432e-02, 7.0021e-02, 6.4958e-02, 6.0224e-02, 5.5804e-02 ] x = numpy.arange(0.01, 5., 0.1) a = 2. b = 1. p = 2 gig = GeneralizedInverseGaussian(a, b, p) fx2 = gig(x) for i in range(len(fx)): self.assertAlmostEqual(fx[i], fx2[i], delta=1e-1)
def testRandom(self): from scipy.special import kv from numpy import sqrt a = 2. b = 1. p = 1 gig = GeneralizedInverseGaussian(a, b, p) samples = gig.random(10000) mu_analytical = sqrt(b) * kv(p + 1, sqrt(a * b)) / (sqrt(a) * kv(p, sqrt(a * b))) var_analytical = b * kv(p + 2, sqrt(a * b)) / a / kv(p, sqrt(a * b)) - mu_analytical ** 2 mu = numpy.mean(samples) var = numpy.var(samples) self.assertAlmostEqual(mu_analytical, mu, delta=1e-1) self.assertAlmostEqual(var_analytical, var, delta=1e-1)
def testParameters(self): pdf = GeneralizedInverseGaussian(1, 1, 1) pdf.a = 2 pdf.b = 3 pdf.p = 4 self.assertEqual(pdf.a, 2) self.assertEqual(pdf.b, 3) self.assertEqual(pdf.p, 4) self.assertEqual(pdf.p, pdf['p']) def propertyAssignment(): pdf.a = -1 def directAssignment(p): pdf[p] = -1 self.assertRaises(ParameterValueError, propertyAssignment) self.assertRaises(ParameterValueError, directAssignment, 'a') self.assertRaises(ParameterValueError, directAssignment, 'b') self.assertRaises(ParameterValueError, directAssignment, 'p')
def testRandom(self): from scipy.special import kv from numpy import sqrt a = 2. b = 1. p = 1 gig = GeneralizedInverseGaussian(a, b, p) samples = gig.random(10000) mu_analytical = sqrt(b) * kv(p + 1, sqrt( a * b)) / (sqrt(a) * kv(p, sqrt(a * b))) var_analytical = b * kv(p + 2, sqrt(a * b)) / a / kv(p, sqrt( a * b)) - mu_analytical**2 mu = numpy.mean(samples) var = numpy.var(samples) self.assertAlmostEqual(mu_analytical, mu, delta=1e-1) self.assertAlmostEqual(var_analytical, var, delta=1e-1)