@@ -1062,7 +1062,7 @@ class Beta(UnitContinuous):
1062
1062
======== ==============================================================
1063
1063
1064
1064
Beta distribution can be parameterized either in terms of alpha and
1065
- beta or mean and standard deviation. The link between the two
1065
+ beta, mean and standard deviation or mean and sample size . The link between the three
1066
1066
parametrizations is given by
1067
1067
1068
1068
.. math::
@@ -1072,6 +1072,9 @@ class Beta(UnitContinuous):
1072
1072
1073
1073
\text{where } \kappa = \frac{\mu(1-\mu)}{\sigma^2} - 1
1074
1074
1075
+ \alpha = \mu * \nu
1076
+ \beta = (1 - \mu) * \nu
1077
+
1075
1078
Parameters
1076
1079
----------
1077
1080
alpha : tensor_like of float, optional
@@ -1081,7 +1084,9 @@ class Beta(UnitContinuous):
1081
1084
mu : tensor_like of float, optional
1082
1085
Alternative mean (0 < ``mu`` < 1).
1083
1086
sigma : tensor_like of float, optional
1084
- Alternative standard deviation (1 < ``sigma`` < sqrt(``mu`` * (1 - ``mu``))).
1087
+ Alternative standard deviation (0 < ``sigma`` < sqrt(``mu`` * (1 - ``mu``))).
1088
+ nu : tensor_like of float, optional
1089
+ Alternative "sample size" of a Beta distribution (``nu`` > 0).
1085
1090
1086
1091
Notes
1087
1092
-----
@@ -1092,8 +1097,8 @@ class Beta(UnitContinuous):
1092
1097
rv_op = pytensor .tensor .random .beta
1093
1098
1094
1099
@classmethod
1095
- def dist (cls , alpha = None , beta = None , mu = None , sigma = None , * args , ** kwargs ):
1096
- alpha , beta = cls .get_alpha_beta (alpha , beta , mu , sigma )
1100
+ def dist (cls , alpha = None , beta = None , mu = None , sigma = None , nu = None , * args , ** kwargs ):
1101
+ alpha , beta = cls .get_alpha_beta (alpha , beta , mu , sigma , nu )
1097
1102
alpha = at .as_tensor_variable (floatX (alpha ))
1098
1103
beta = at .as_tensor_variable (floatX (beta ))
1099
1104
@@ -1106,17 +1111,21 @@ def moment(rv, size, alpha, beta):
1106
1111
return mean
1107
1112
1108
1113
@classmethod
1109
- def get_alpha_beta (self , alpha = None , beta = None , mu = None , sigma = None ):
1114
+ def get_alpha_beta (self , alpha = None , beta = None , mu = None , sigma = None , nu = None ):
1110
1115
if (alpha is not None ) and (beta is not None ):
1111
1116
pass
1112
1117
elif (mu is not None ) and (sigma is not None ):
1113
1118
kappa = mu * (1 - mu ) / sigma ** 2 - 1
1114
1119
alpha = mu * kappa
1115
1120
beta = (1 - mu ) * kappa
1121
+ elif (mu is not None ) and (nu is not None ):
1122
+ alpha = mu * nu
1123
+ beta = (1 - mu ) * nu
1116
1124
else :
1117
1125
raise ValueError (
1118
1126
"Incompatible parameterization. Either use alpha "
1119
- "and beta, or mu and sigma to specify distribution."
1127
+ "and beta, mu and sigma or mu and nu to specify "
1128
+ "distribution."
1120
1129
)
1121
1130
1122
1131
return alpha , beta
0 commit comments