pymixef.families module¶
Probability families and link functions used by PyMixEF.
The module follows one likelihood convention throughout: Family.log_prob()
returns a normalized log density or log mass, including constants that depend
on the observation. Consequently log likelihoods from these families can be
used for AIC and compared with other implementations after matching the stated
parameterization.
All random methods accept either a numpy.random.Generator or a seed through
rng=. The implementations are NumPy/SciPy reference implementations; they
are intentionally independent of any automatic-differentiation framework.
- pymixef.families.NB1¶
alias of
NegativeBinomial1
- pymixef.families.NB2¶
alias of
NegativeBinomial2
- class pymixef.families.Bernoulli(*, link=None, **predictors)[source]¶
Bases:
FamilyBernoulli family with success probability
mu.- Parameters:
link (str | Link | None)
predictors (Any)
- name = 'bernoulli'¶
- support = '{0, 1}'¶
- parameter_names: tuple[str, ...] = ('mu',)¶
- default_link = Link(name='logit', _link=<function <lambda>>, _inverse=<function <lambda>>, _derivative=<function <lambda>>)¶
- Parameters:
mean (ArrayLike)
- Return type:
float | NDArray[np.float64]
- discrete = True¶
- class pymixef.families.Beta(*, link=None, **predictors)[source]¶
Bases:
FamilyBeta family parameterized by mean
muand precisionprecision.- Parameters:
link (str | Link | None)
predictors (Any)
- name = 'beta'¶
- support = 'open unit interval'¶
- parameter_names: tuple[str, ...] = ('mu', 'precision')¶
- default_link = Link(name='logit', _link=<function <lambda>>, _inverse=<function <lambda>>, _derivative=<function <lambda>>)¶
- Parameters:
mean (ArrayLike)
- Return type:
float | NDArray[np.float64]
- class pymixef.families.Binomial(trials=None, *, link=None, **predictors)[source]¶
Bases:
FamilyBinomial family; observations are successes and
trialsis explicit.- Parameters:
trials (ArrayLike | None)
predictors (Any)
- name = 'binomial'¶
- support = 'integers from zero through trials'¶
- parameter_names: tuple[str, ...] = ('mu', 'trials')¶
- default_link = Link(name='logit', _link=<function <lambda>>, _inverse=<function <lambda>>, _derivative=<function <lambda>>)¶
- Parameters:
mean (ArrayLike)
- Return type:
float | NDArray[np.float64]
- discrete = True¶
- class pymixef.families.COMPoisson(*, link=None, max_terms=100_000, tolerance=1e-13, **predictors)[source]¶
Bases:
FamilyConway–Maxwell–Poisson with rate
rateand exponentdispersion.P(Y=y) = rate**y / (y!)**dispersion / Z(rate, dispersion). Therateparameter is not generally the arithmetic mean. Normalizing constants are evaluated by an adaptive log-series and an error is raised if the configured term limit is insufficient.- Parameters:
max_terms (int)
tolerance (float)
- name = 'com-poisson'¶
- support = 'nonnegative integers'¶
- parameter_names: tuple[str, ...] = ('rate', 'dispersion')¶
- default_link = Link(name='log', _link=<ufunc 'log'>, _inverse=<ufunc 'exp'>, _derivative=<function <lambda>>)¶
- Parameters:
mean (ArrayLike)
- Return type:
float | NDArray[np.float64]
- discrete = True¶
- class pymixef.families.Censored(conditional)[source]¶
Bases:
FamilyExact likelihood contributions for exact and censored observations.
kindmay be"exact","left","right", or"interval". Left censoring usesupper(ory), right censoring useslower(ory), and interval censoring uses both endpoints.- Parameters:
conditional (Family)
- name = 'censored'¶
- pymixef.families.ConwayMaxwellPoisson¶
alias of
COMPoisson
- class pymixef.families.Exponential(*, link=None, **predictors)[source]¶
Bases:
SurvivalFamilyExponential survival distribution with positive hazard
rate.- Parameters:
link (str | Link | None)
predictors (Any)
- name = 'exponential'¶
- parameter_names: tuple[str, ...] = ('rate',)¶
- default_link = Link(name='log', _link=<ufunc 'log'>, _inverse=<ufunc 'exp'>, _derivative=<function <lambda>>)¶
- Parameters:
mean (ArrayLike)
- Return type:
float | NDArray[np.float64]
- pymixef.families.ExponentialSurvival¶
alias of
Exponential
- class pymixef.families.Family(*, link=None, **predictors)[source]¶
Bases:
objectBase class for normalized probability families.
- Parameters:
link (str | Link | None)
predictors (Any)
- name = 'family'¶
- support = 'declared by subclass'¶
- parameter_names: tuple[str, ...] = ()¶
- default_link = Link(name='identity', _link=<function <lambda>>, _inverse=<function <lambda>>, _derivative=<function <lambda>>)¶
- Parameters:
mean (ArrayLike)
- Return type:
float | NDArray[np.float64]
- discrete = False¶
- normalized = True¶
- log_prob(y, **parameters)[source]¶
- Parameters:
y (ArrayLike)
parameters (Any)
- Return type:
float | NDArray[float64]
- log_probability(y, **parameters)[source]¶
Long-form alias for
log_prob()used by plugin protocols.- Parameters:
y (ArrayLike)
parameters (Any)
- Return type:
float | NDArray[float64]
- logpdf(y, **parameters)[source]¶
SciPy-style alias; valid for both density and mass families.
- Parameters:
y (ArrayLike)
parameters (Any)
- Return type:
float | NDArray[float64]
- logpmf(y, **parameters)¶
SciPy-style alias; valid for both density and mass families.
- Parameters:
y (ArrayLike)
parameters (Any)
- Return type:
float | NDArray[float64]
- cdf(y, **parameters)[source]¶
- Parameters:
y (ArrayLike)
parameters (Any)
- Return type:
float | NDArray[float64]
- logcdf(y, **parameters)[source]¶
- Parameters:
y (ArrayLike)
parameters (Any)
- Return type:
float | NDArray[float64]
- sf(y, **parameters)[source]¶
- Parameters:
y (ArrayLike)
parameters (Any)
- Return type:
float | NDArray[float64]
- logsf(y, **parameters)[source]¶
- Parameters:
y (ArrayLike)
parameters (Any)
- Return type:
float | NDArray[float64]
- rvs(size=None, *, rng=None, **parameters)[source]¶
- Parameters:
size (int | tuple[int, ...] | None)
rng (Generator | int | None)
parameters (Any)
- Return type:
NDArray[Any] | generic
- moments(**parameters)[source]¶
Return the common first two moments.
- Parameters:
parameters (Any)
- Return type:
dict[str, float | NDArray[float64]]
- class pymixef.families.Gamma(*, link=None, **predictors)[source]¶
Bases:
FamilyGamma family in mean-dispersion form.
E(Y)=muandVar(Y)=dispersion * mu**2. Thus shape is1 / dispersionand scale ismu * dispersion.- Parameters:
link (str | Link | None)
predictors (Any)
- name = 'gamma'¶
- support = 'positive real'¶
- parameter_names: tuple[str, ...] = ('mu', 'dispersion')¶
- default_link = Link(name='log', _link=<ufunc 'log'>, _inverse=<ufunc 'exp'>, _derivative=<function <lambda>>)¶
- Parameters:
mean (ArrayLike)
- Return type:
float | NDArray[np.float64]
- class pymixef.families.Gaussian(*, link=None, **predictors)[source]¶
Bases:
FamilyGaussian
N(mu, sigma**2)family.- Parameters:
link (str | Link | None)
predictors (Any)
- name = 'gaussian'¶
- support = 'real'¶
- parameter_names: tuple[str, ...] = ('mu', 'sigma')¶
- default_link = Link(name='identity', _link=<function <lambda>>, _inverse=<function <lambda>>, _derivative=<function <lambda>>)¶
- Parameters:
mean (ArrayLike)
- Return type:
float | NDArray[np.float64]
- log_prob(y, *, mu=0.0, sigma=1.0, **_)[source]¶
- Parameters:
y (ArrayLike)
mu (ArrayLike)
sigma (ArrayLike)
_ (Any)
- cdf(y, *, mu=0.0, sigma=1.0, **_)[source]¶
- Parameters:
y (ArrayLike)
mu (ArrayLike)
sigma (ArrayLike)
_ (Any)
- logcdf(y, *, mu=0.0, sigma=1.0, **_)[source]¶
- Parameters:
y (ArrayLike)
mu (ArrayLike)
sigma (ArrayLike)
_ (Any)
- pymixef.families.GenPoisson¶
alias of
GeneralizedPoisson
- class pymixef.families.GeneralizedPoisson(*, link=None, **predictors)[source]¶
Bases:
FamilyConsul–Jain generalized Poisson in mean-dispersion form.
The underlying parameters are
lambda = mu * (1-dispersion)andtheta = dispersion. The mass islambda * (lambda + theta*y)**(y-1) * exp(-(lambda+theta*y))/y!. This gives arithmetic meanmufor the regular infinite-support case0 <= theta < 1. Negative theta has finite support.- Parameters:
link (str | Link | None)
predictors (Any)
- name = 'generalized-poisson'¶
- support = 'nonnegative integers subject to lambda + dispersion*y > 0'¶
- parameter_names: tuple[str, ...] = ('mu', 'dispersion')¶
- default_link = Link(name='log', _link=<ufunc 'log'>, _inverse=<ufunc 'exp'>, _derivative=<function <lambda>>)¶
- Parameters:
mean (ArrayLike)
- Return type:
float | NDArray[np.float64]
- discrete = True¶
- class pymixef.families.Gompertz(*, link=None, **predictors)[source]¶
Bases:
SurvivalFamilyGompertz distribution with hazard
rate * exp(shape*time).- Parameters:
link (str | Link | None)
predictors (Any)
- name = 'gompertz'¶
- parameter_names: tuple[str, ...] = ('rate', 'shape')¶
- default_link = Link(name='log', _link=<ufunc 'log'>, _inverse=<ufunc 'exp'>, _derivative=<function <lambda>>)¶
- Parameters:
mean (ArrayLike)
- Return type:
float | NDArray[np.float64]
- class pymixef.families.Hurdle(conditional, **kwargs)[source]¶
Bases:
MixtureFamilyZero hurdle plus the conditional distribution truncated above zero.
- Parameters:
conditional (Family)
- name = 'hurdle'¶
- pymixef.families.InverseGauss¶
alias of
InverseGaussian
- class pymixef.families.InverseGaussian(*, link=None, **predictors)[source]¶
Bases:
FamilyInverse-Gaussian family with
E(Y)=muandVar(Y)=phi*mu**3.- Parameters:
link (str | Link | None)
predictors (Any)
- name = 'inverse-gaussian'¶
- support = 'positive real'¶
- parameter_names: tuple[str, ...] = ('mu', 'dispersion')¶
- default_link = Link(name='log', _link=<ufunc 'log'>, _inverse=<ufunc 'exp'>, _derivative=<function <lambda>>)¶
- Parameters:
mean (ArrayLike)
- Return type:
float | NDArray[np.float64]
- class pymixef.families.Link(name, _link, _inverse, _derivative)[source]¶
Bases:
objectA differentiable scalar response link.
- Parameters:
name (str)
_link (Callable[[NDArray[float64]], NDArray[float64]])
_inverse (Callable[[NDArray[float64]], NDArray[float64]])
_derivative (Callable[[NDArray[float64]], NDArray[float64]])
- name: str¶
- class pymixef.families.LogLogistic(*, link=None, **predictors)[source]¶
Bases:
SurvivalFamilyLog-logistic survival distribution with positive shape and scale.
- Parameters:
link (str | Link | None)
predictors (Any)
- name = 'log-logistic'¶
- parameter_names: tuple[str, ...] = ('shape', 'scale')¶
- default_link = Link(name='log', _link=<ufunc 'log'>, _inverse=<ufunc 'exp'>, _derivative=<function <lambda>>)¶
- Parameters:
mean (ArrayLike)
- Return type:
float | NDArray[np.float64]
- pymixef.families.LogLogisticSurvival¶
alias of
LogLogistic
- class pymixef.families.LogNormal(*, link=None, **predictors)[source]¶
Bases:
FamilyLognormal family parameterized by log-median
meanlogandsigma.exp(meanlog)is the median. The arithmetic mean isexp(meanlog + sigma**2 / 2).- Parameters:
link (str | Link | None)
predictors (Any)
- name = 'lognormal'¶
- support = 'positive real'¶
- parameter_names: tuple[str, ...] = ('meanlog', 'sigma')¶
- default_link = Link(name='log', _link=<ufunc 'log'>, _inverse=<ufunc 'exp'>, _derivative=<function <lambda>>)¶
- Parameters:
mean (ArrayLike)
- Return type:
float | NDArray[np.float64]
- class pymixef.families.LogNormalSurvival(*, link=None, **predictors)[source]¶
Bases:
SurvivalFamilyLognormal accelerated-failure-time distribution.
meanlogis the location of log time andsigmaits standard deviation. The event likelihood uses the density while a right-censored observation uses the survival probability.- Parameters:
link (str | Link | None)
predictors (Any)
- name = 'lognormal-survival'¶
- parameter_names: tuple[str, ...] = ('meanlog', 'sigma')¶
- default_link = Link(name='identity', _link=<function <lambda>>, _inverse=<function <lambda>>, _derivative=<function <lambda>>)¶
- Parameters:
mean (ArrayLike)
- Return type:
float | NDArray[np.float64]
- class pymixef.families.Multinomial(*, link=None, **predictors)[source]¶
Bases:
FamilyCategorical/multinomial-one-trial family.
Supply either normalized
probabilitiesor categorylogits. When logits hasK-1columns, a zero baseline logit is appended.- Parameters:
link (str | Link | None)
predictors (Any)
- name = 'multinomial'¶
- support = 'categories 0, ..., K-1'¶
- parameter_names: tuple[str, ...] = ('probabilities',)¶
- default_link = Link(name='logit', _link=<function <lambda>>, _inverse=<function <lambda>>, _derivative=<function <lambda>>)¶
- Parameters:
mean (ArrayLike)
- Return type:
float | NDArray[np.float64]
- discrete = True¶
- pymixef.families.NegativeBinomial¶
alias of
NegativeBinomial2
- class pymixef.families.NegativeBinomial1(dispersion=None, *, link=None, **predictors)[source]¶
Bases:
NegativeBinomial2NB1 family with
Var(Y)=mu * (1 + dispersion).- Parameters:
dispersion (Any)
predictors (Any)
- name = 'negative-binomial-1'¶
- class pymixef.families.NegativeBinomial2(dispersion=None, *, link=None, **predictors)[source]¶
Bases:
FamilyNB2 family with
Var(Y)=mu + mu**2 / dispersion.dispersionis the conventional positive size/shape parameter.- Parameters:
dispersion (Any)
predictors (Any)
- name = 'negative-binomial-2'¶
- support = 'nonnegative integers'¶
- parameter_names: tuple[str, ...] = ('mu', 'dispersion')¶
- default_link = Link(name='log', _link=<ufunc 'log'>, _inverse=<ufunc 'exp'>, _derivative=<function <lambda>>)¶
- Parameters:
mean (ArrayLike)
- Return type:
float | NDArray[np.float64]
- discrete = True¶
- class pymixef.families.Ordinal(*, link=None, thresholds=None, **predictors)[source]¶
Bases:
FamilyCumulative-link ordinal family with ordered zero-based categories.
- Parameters:
link (str | Link | None)
thresholds (ArrayLike | None)
- name = 'ordinal'¶
- support = 'ordered categories 0, ..., len(thresholds)'¶
- parameter_names: tuple[str, ...] = ('eta', 'thresholds')¶
- default_link = Link(name='logit', _link=<function <lambda>>, _inverse=<function <lambda>>, _derivative=<function <lambda>>)¶
- Parameters:
mean (ArrayLike)
- Return type:
float | NDArray[np.float64]
- discrete = True¶
- class pymixef.families.PiecewiseExponential(*, link=None, **predictors)[source]¶
Bases:
SurvivalFamilyPiecewise-constant hazard with explicit interval break points.
- Parameters:
link (str | Link | None)
predictors (Any)
- name = 'piecewise-exponential'¶
- parameter_names: tuple[str, ...] = ('rates', 'breaks')¶
- default_link = Link(name='log', _link=<ufunc 'log'>, _inverse=<ufunc 'exp'>, _derivative=<function <lambda>>)¶
- Parameters:
mean (ArrayLike)
- Return type:
float | NDArray[np.float64]
- class pymixef.families.Poisson(*, link=None, **predictors)[source]¶
Bases:
FamilyPoisson family with mean/rate
mu.- Parameters:
link (str | Link | None)
predictors (Any)
- name = 'poisson'¶
- support = 'nonnegative integers'¶
- parameter_names: tuple[str, ...] = ('mu',)¶
- default_link = Link(name='log', _link=<ufunc 'log'>, _inverse=<ufunc 'exp'>, _derivative=<function <lambda>>)¶
- Parameters:
mean (ArrayLike)
- Return type:
float | NDArray[np.float64]
- discrete = True¶
- class pymixef.families.StudentT(df=None, *, link=None, **predictors)[source]¶
Bases:
FamilyStudent-t location-scale family with degrees of freedom
df.- Parameters:
df (float | None)
predictors (Any)
- name = 'student-t'¶
- support = 'real'¶
- parameter_names: tuple[str, ...] = ('mu', 'sigma', 'df')¶
- default_link = Link(name='identity', _link=<function <lambda>>, _inverse=<function <lambda>>, _derivative=<function <lambda>>)¶
- Parameters:
mean (ArrayLike)
- Return type:
float | NDArray[np.float64]
- class pymixef.families.Truncated(conditional, *, lower=-np.inf, upper=np.inf)[source]¶
Bases:
FamilyFamily conditioned on
lower < Y <= upper.For continuous families the distinction between open and closed endpoints is immaterial. For discrete families
loweris excluded andupperis included, which makes one-sided zero truncationlower=0explicit.- Parameters:
conditional (Family)
- name = 'truncated'¶
- class pymixef.families.Tweedie(power=1.5, *, link=None, max_terms=100_000, **predictors)[source]¶
Bases:
FamilyTweedie exponential-dispersion family.
Exact normalized reference likelihood and RNG are implemented for
1 < power < 2(compound Poisson–Gamma), and for the canonical limits power 0 (Gaussian), 1 (Poisson), 2 (Gamma), and 3 (inverse Gaussian). Other powers are rejected rather than evaluated with an unnormalized quasi-likelihood. Compound-series evaluation is intentionally capped; very large Poisson intensities raise a stableRuntimeError.- Parameters:
power (float)
max_terms (int)
- name = 'tweedie'¶
- support = 'depends on power'¶
- parameter_names: tuple[str, ...] = ('mu', 'dispersion', 'power')¶
- default_link = Link(name='log', _link=<ufunc 'log'>, _inverse=<ufunc 'exp'>, _derivative=<function <lambda>>)¶
- Parameters:
mean (ArrayLike)
- Return type:
float | NDArray[np.float64]
- class pymixef.families.Weibull(*, link=None, **predictors)[source]¶
Bases:
SurvivalFamilyWeibull survival distribution with shape and scale.
- Parameters:
link (str | Link | None)
predictors (Any)
- name = 'weibull'¶
- parameter_names: tuple[str, ...] = ('shape', 'scale')¶
- default_link = Link(name='log', _link=<ufunc 'log'>, _inverse=<ufunc 'exp'>, _derivative=<function <lambda>>)¶
- Parameters:
mean (ArrayLike)
- Return type:
float | NDArray[np.float64]
- class pymixef.families.ZeroInflated(conditional, *, probability=None, link=None, **predictors)[source]¶
Bases:
MixtureFamilyPoint-mass-at-zero mixture with a normalized conditional family.
- Parameters:
conditional (Family)
probability (Any)
- name = 'zero-inflated'¶
- pymixef.families.ZeroInflatedFamily¶
alias of
ZeroInflated
- pymixef.families.get_link(value, default=IDENTITY)[source]¶
Resolve a link name or return an existing
Link.
- class pymixef.families.links[source]¶
Bases:
objectNamespace containing built-in
Linkobjects.- identity = Link(name='identity', _link=<function <lambda>>, _inverse=<function <lambda>>, _derivative=<function <lambda>>)¶
- Parameters:
mean (ArrayLike)
- Return type:
float | NDArray[np.float64]
- log = Link(name='log', _link=<ufunc 'log'>, _inverse=<ufunc 'exp'>, _derivative=<function <lambda>>)¶
- Parameters:
mean (ArrayLike)
- Return type:
float | NDArray[np.float64]
- logit = Link(name='logit', _link=<function <lambda>>, _inverse=<function <lambda>>, _derivative=<function <lambda>>)¶
- Parameters:
mean (ArrayLike)
- Return type:
float | NDArray[np.float64]
- probit = Link(name='probit', _link=<function <lambda>>, _inverse=<function <lambda>>, _derivative=<function <lambda>>)¶
- Parameters:
mean (ArrayLike)
- Return type:
float | NDArray[np.float64]
- cloglog = Link(name='cloglog', _link=<function <lambda>>, _inverse=<function <lambda>>, _derivative=<function <lambda>>)¶
- Parameters:
mean (ArrayLike)
- Return type:
float | NDArray[np.float64]
- cauchit = Link(name='cauchit', _link=<function <lambda>>, _inverse=<function <lambda>>, _derivative=<function <lambda>>)¶
- Parameters:
mean (ArrayLike)
- Return type:
float | NDArray[np.float64]
- inverse = Link(name='inverse', _link=<function <lambda>>, _inverse=<function <lambda>>, _derivative=<function <lambda>>)¶
- Parameters:
mean (ArrayLike)
- Return type:
float | NDArray[np.float64]
- inverse_squared = Link(name='inverse-squared', _link=<function <lambda>>, _inverse=<function <lambda>>, _derivative=<function <lambda>>)¶
- Parameters:
mean (ArrayLike)
- Return type:
float | NDArray[np.float64]