@@ -38,23 +38,24 @@ def __init__(self, transform=transforms.logodds, *args, **kwargs):
38
38
super (UnitContinuous , self ).__init__ (
39
39
transform = transform , * args , ** kwargs )
40
40
41
- def assert_nonpos_support (var , label , distname ):
41
+ def assert_negative_support (var , label , distname , value = 1e-6 ):
42
42
# Checks for evidence of positive support for a variable
43
43
if var is None :
44
44
return
45
45
try :
46
46
# Transformed distribution
47
- support = np .isfinite (var .transformed .distribution .dist .logp (0 ).tag .test_value )
47
+ support = np .isfinite (var .transformed .distribution .dist
48
+ .logp (value ).tag .test_value )
48
49
except AttributeError :
49
50
try :
50
51
# Untransformed distribution
51
- support = np .isfinite (var .distribution .logp (0 ).tag .test_value )
52
+ support = np .isfinite (var .distribution .logp (value ).tag .test_value )
52
53
except AttributeError :
53
54
# Otherwise no direct evidence of non-positive support
54
55
support = False
55
56
56
57
if np .any (support ):
57
- msg = "The variable specified for {0} has non-positive support for {1}, " .format (label , distname )
58
+ msg = "The variable specified for {0} has negative support for {1}, " .format (label , distname )
58
59
msg += "likely making it unsuitable for this parameter."
59
60
warnings .warn (msg )
60
61
@@ -226,8 +227,8 @@ def __init__(self, *args, **kwargs):
226
227
self .tau , self .sd = get_tau_sd (tau = tau , sd = sd )
227
228
self .variance = 1. / self .tau
228
229
229
- assert_nonpos_support (sd , 'sd' , 'Normal' )
230
- assert_nonpos_support (tau , 'tau' , 'Normal' )
230
+ assert_negative_support_support (sd , 'sd' , 'Normal' )
231
+ assert_negative_support_support (tau , 'tau' , 'Normal' )
231
232
232
233
super (Normal , self ).__init__ (** kwargs )
233
234
@@ -276,8 +277,8 @@ def __init__(self, sd=None, tau=None, *args, **kwargs):
276
277
self .mean = tt .sqrt (2 / (np .pi * self .tau ))
277
278
self .variance = (1. - 2 / np .pi ) / self .tau
278
279
279
- assert_nonpos_support (tau , 'tau' , 'HalfNormal' )
280
- assert_nonpos_support (sd , 'sd' , 'HalfNormal' )
280
+ assert_negative_support_support (tau , 'tau' , 'HalfNormal' )
281
+ assert_negative_support_support (sd , 'sd' , 'HalfNormal' )
281
282
282
283
def random (self , point = None , size = None , repeat = None ):
283
284
sd = draw_values ([self .sd ], point = point )
@@ -358,9 +359,9 @@ def __init__(self, mu=None, lam=None, phi=None, alpha=0., *args, **kwargs):
358
359
- 1.5 * self .mu / self .lam ) + alpha
359
360
self .variance = (self .mu ** 3 ) / self .lam
360
361
361
- assert_nonpos_support (phi , 'phi' , 'Wald' )
362
- assert_nonpos_support (mu , 'mu' , 'Wald' )
363
- assert_nonpos_support (lam , 'lam' , 'Wald' )
362
+ assert_negative_support_support (phi , 'phi' , 'Wald' )
363
+ assert_negative_support_support (mu , 'mu' , 'Wald' )
364
+ assert_negative_support_support (lam , 'lam' , 'Wald' )
364
365
365
366
def get_mu_lam_phi (self , mu , lam , phi ):
366
367
if mu is None :
@@ -464,8 +465,8 @@ def __init__(self, alpha=None, beta=None, mu=None, sd=None,
464
465
self .variance = alpha * beta / (
465
466
(alpha + beta )** 2 * (alpha + beta + 1 ))
466
467
467
- assert_nonpos_support (alpha , 'alpha' , 'Beta' )
468
- assert_nonpos_support (beta , 'beta' , 'Beta' )
468
+ assert_negative_support_support (alpha , 'alpha' , 'Beta' )
469
+ assert_negative_support_support (beta , 'beta' , 'Beta' )
469
470
470
471
def get_alpha_beta (self , alpha = None , beta = None , mu = None , sd = None ):
471
472
if (alpha is not None ) and (beta is not None ):
@@ -526,7 +527,7 @@ def __init__(self, lam, *args, **kwargs):
526
527
527
528
self .variance = lam ** - 2
528
529
529
- assert_nonpos_support (lam , 'lam' , 'Exponential' )
530
+ assert_negative_support_support (lam , 'lam' , 'Exponential' )
530
531
531
532
def random (self , point = None , size = None , repeat = None ):
532
533
lam = draw_values ([self .lam ], point = point )
@@ -569,7 +570,7 @@ def __init__(self, mu, b, *args, **kwargs):
569
570
570
571
self .variance = 2 * b ** 2
571
572
572
- assert_nonpos_support (b , 'b' , 'Laplace' )
573
+ assert_negative_support_support (b , 'b' , 'Laplace' )
573
574
574
575
def random (self , point = None , size = None , repeat = None ):
575
576
mu , b = draw_values ([self .mu , self .b ], point = point )
@@ -624,8 +625,8 @@ def __init__(self, mu=0, sd=None, tau=None, *args, **kwargs):
624
625
self .mode = tt .exp (mu - 1. / self .tau )
625
626
self .variance = (tt .exp (1. / self .tau ) - 1 ) * tt .exp (2 * mu + 1. / self .tau )
626
627
627
- assert_nonpos_support (tau , 'tau' , 'Lognormal' )
628
- assert_nonpos_support (sd , 'sd' , 'Lognormal' )
628
+ assert_negative_support_support (tau , 'tau' , 'Lognormal' )
629
+ assert_negative_support_support (sd , 'sd' , 'Lognormal' )
629
630
630
631
def _random (self , mu , tau , size = None ):
631
632
samples = np .random .normal (size = size )
@@ -685,8 +686,8 @@ def __init__(self, nu, mu=0, lam=None, sd=None, *args, **kwargs):
685
686
(1 / self .lam ) * (nu / (nu - 2 )),
686
687
np .inf )
687
688
688
- assert_nonpos_support (lam , 'lam (sd)' , 'StudentT' )
689
- assert_nonpos_support (nu , 'nu' , 'StudentT' )
689
+ assert_negative_support_support (lam , 'lam (sd)' , 'StudentT' )
690
+ assert_negative_support_support (nu , 'nu' , 'StudentT' )
690
691
691
692
def random (self , point = None , size = None , repeat = None ):
692
693
nu , mu , lam = draw_values ([self .nu , self .mu , self .lam ],
@@ -746,8 +747,8 @@ def __init__(self, alpha, m, *args, **kwargs):
746
747
(alpha * m ** 2 ) / ((alpha - 2. ) * (alpha - 1. )** 2 ),
747
748
np .inf )
748
749
749
- assert_nonpos_support (alpha , 'alpha' , 'Pareto' )
750
- assert_nonpos_support (m , 'm' , 'Pareto' )
750
+ assert_negative_support_support (alpha , 'alpha' , 'Pareto' )
751
+ assert_negative_support_support (m , 'm' , 'Pareto' )
751
752
752
753
753
754
def _random (self , alpha , m , size = None ):
@@ -800,7 +801,7 @@ def __init__(self, alpha, beta, *args, **kwargs):
800
801
self .median = self .mode = self .alpha = alpha
801
802
self .beta = beta
802
803
803
- assert_nonpos_support (beta , 'beta' , 'Cauchy' )
804
+ assert_negative_support_support (beta , 'beta' , 'Cauchy' )
804
805
805
806
def _random (self , alpha , beta , size = None ):
806
807
u = np .random .uniform (size = size )
@@ -848,7 +849,7 @@ def __init__(self, beta, *args, **kwargs):
848
849
self .median = beta
849
850
self .beta = beta
850
851
851
- assert_nonpos_support (beta , 'beta' , 'HalfCauchy' )
852
+ assert_negative_support_support (beta , 'beta' , 'HalfCauchy' )
852
853
853
854
def _random (self , beta , size = None ):
854
855
u = np .random .uniform (size = size )
@@ -916,8 +917,8 @@ def __init__(self, alpha=None, beta=None, mu=None, sd=None,
916
917
self .mode = tt .maximum ((alpha - 1 ) / beta , 0 )
917
918
self .variance = alpha / beta ** 2
918
919
919
- assert_nonpos_support (alpha , 'alpha' , 'Gamma' )
920
- assert_nonpos_support (beta , 'beta' , 'Gamma' )
920
+ assert_negative_support_support (alpha , 'alpha' , 'Gamma' )
921
+ assert_negative_support_support (beta , 'beta' , 'Gamma' )
921
922
922
923
def get_alpha_beta (self , alpha = None , beta = None , mu = None , sd = None ):
923
924
if (alpha is not None ) and (beta is not None ):
@@ -985,8 +986,8 @@ def __init__(self, alpha, beta=1, *args, **kwargs):
985
986
self .variance = tt .switch (tt .gt (alpha , 2 ),
986
987
(beta ** 2 ) / (alpha * (alpha - 1. )** 2 ),
987
988
np .inf )
988
- assert_nonpos_support (alpha , 'alpha' , 'InverseGamma' )
989
- assert_nonpos_support (beta , 'beta' , 'InverseGamma' )
989
+ assert_negative_support_support (alpha , 'alpha' , 'InverseGamma' )
990
+ assert_negative_support_support (beta , 'beta' , 'InverseGamma' )
990
991
991
992
def _calculate_mean (self ):
992
993
m = self .beta / (self .alpha - 1. )
@@ -1070,8 +1071,8 @@ def __init__(self, alpha, beta, *args, **kwargs):
1070
1071
self .variance = (beta ** 2 ) * \
1071
1072
tt .exp (gammaln (1 + 2. / alpha - self .mean ** 2 ))
1072
1073
1073
- assert_nonpos_support (alpha , 'alpha' , 'Weibull' )
1074
- assert_nonpos_support (beta , 'beta' , 'Weibull' )
1074
+ assert_negative_support_support (alpha , 'alpha' , 'Weibull' )
1075
+ assert_negative_support_support (beta , 'beta' , 'Weibull' )
1075
1076
1076
1077
def random (self , point = None , size = None , repeat = None ):
1077
1078
alpha , beta = draw_values ([self .alpha , self .beta ],
@@ -1259,8 +1260,8 @@ def __init__(self, mu, sigma, nu, *args, **kwargs):
1259
1260
self .mean = mu + nu
1260
1261
self .variance = (sigma ** 2 ) + (nu ** 2 )
1261
1262
1262
- assert_nonpos_support (sigma , 'sigma' , 'ExGaussian' )
1263
- assert_nonpos_support (nu , 'nu' , 'ExGaussian' )
1263
+ assert_negative_support_support (sigma , 'sigma' , 'ExGaussian' )
1264
+ assert_negative_support_support (nu , 'nu' , 'ExGaussian' )
1264
1265
1265
1266
def random (self , point = None , size = None , repeat = None ):
1266
1267
mu , sigma , nu = draw_values ([self .mu , self .sigma , self .nu ],
@@ -1320,7 +1321,7 @@ def __init__(self, mu=0.0, kappa=None, transform='circular',
1320
1321
if transform == 'circular' :
1321
1322
self .transform = transforms .Circular ()
1322
1323
1323
- assert_nonpos_support (kappa , 'kappa' , 'VonMises' )
1324
+ assert_negative_support_support (kappa , 'kappa' , 'VonMises' )
1324
1325
1325
1326
def random (self , point = None , size = None , repeat = None ):
1326
1327
mu , kappa = draw_values ([self .mu , self .kappa ],
@@ -1377,8 +1378,8 @@ def __init__(self, mu=0.0, sd=None, tau=None, alpha=1, *args, **kwargs):
1377
1378
self .mean = mu + self .sd * (2 / np .pi )** 0.5 * alpha / (1 + alpha ** 2 )** 0.5
1378
1379
self .variance = self .sd ** 2 * (1 - (2 * alpha ** 2 ) / ((1 + alpha ** 2 ) * np .pi ))
1379
1380
1380
- assert_nonpos_support (tau , 'tau' , 'SkewNormal' )
1381
- assert_nonpos_support (sd , 'sd' , 'SkewNormal' )
1381
+ assert_negative_support_support (tau , 'tau' , 'SkewNormal' )
1382
+ assert_negative_support_support (sd , 'sd' , 'SkewNormal' )
1382
1383
1383
1384
def random (self , point = None , size = None , repeat = None ):
1384
1385
mu , tau , sd , alpha = draw_values (
0 commit comments