Risk Distributions

class vivarium.risk_distributions.risk_distributions.BaseDistribution(parameters=None, mean=None, sd=None, computability_bound=0.001)[source]

Generic vectorized wrapper around scipy distributions.

Parameters:
  • parameters (Parameters | None)

  • mean (Parameter | None)

  • sd (Parameter | None)

  • computability_bound (float)

distribution: Any = None
expected_parameters: tuple[str, ...] = ()
classmethod get_parameters(parameters=None, mean=None, sd=None, computability_bound=0.001)[source]
Parameters:
  • parameters (Parameters | None)

  • mean (Parameter | None)

  • sd (Parameter | None)

  • computability_bound (float)

Return type:

pd.DataFrame

static computable_parameter_index(mean, sd)[source]
Parameters:
  • mean (pd.Series[Any])

  • sd (pd.Series[Any])

Return type:

pd.Index[Any]

classmethod get_computability_bounds(parameters, computability_bound)[source]

Compute the range of exposure values over which the distribution is reliably evaluable.

Exposure values outside this range fall in the numerically unstable tails and are masked out during pdf evaluation.

Parameters:
  • parameters (DataFrame) – Fitted distribution parameters, one row per draw.

  • computability_bound (float) – Tail probability defining the lower and upper quantile cutoffs.

Returns:

The computability_min and computability_max columns, indexed like parameters.

Return type:

pandas.DataFrame

process(data, parameters, process_type)[source]

Function called before and after distribution looks to handle pre- and post-processing.

This function should look like an if sieve on the process_type and fall back with a call to this method if no processing needs to be done.

Parameters:
  • data (pd.Series[Any]) – The data to be processed.

  • parameters (pd.DataFrame) – Parameter data to be used in the processing.

  • process_type (str) – One of pdf_preprocess, pdf_postprocess, ppf_preprocess, ppf_post_process.

Returns:

The processed data.

Return type:

pandas.Series

pdf(x)[source]
Parameters:

x (NumericInput)

Return type:

Numeric

ppf(q)[source]
Parameters:

q (NumericInput)

Return type:

Numeric

cdf(x)[source]
Parameters:

x (NumericInput)

Return type:

Numeric

class vivarium.risk_distributions.risk_distributions.MirroredDistribution(parameters=None, mean=None, sd=None, computability_bound=0.001)[source]
Parameters:
  • parameters (Parameters | None)

  • mean (Parameter | None)

  • sd (Parameter | None)

  • computability_bound (float)

static compute_mirror_point(mean, sd, computability_bound)[source]

Computes the point around which the distribution is mirrored.

NOTE: In the corresponding GBD code, this is called ‘x_max’.

Parameters:
  • mean (pd.Series[Any])

  • sd (pd.Series[Any])

  • computability_bound (float)

Return type:

pd.Series[Any]

classmethod get_computability_bounds(parameters, computability_bound)[source]

Compute the range of exposure values over which the distribution is reliably evaluable.

An exposure value x is evaluated via its reflection mirror_point - x, so the underlying quantile bounds (which live in the reflected space) must be mapped back with mirror_point - bound before the base pdf/cdf computability mask can compare them against x. The reflection also swaps the min and max.

Parameters:
  • parameters (DataFrame) – Fitted distribution parameters, one row per draw.

  • computability_bound (float) – Tail probability defining the lower and upper quantile cutoffs.

Returns:

The computability_min and computability_max columns, indexed like parameters.

Return type:

pandas.DataFrame

class vivarium.risk_distributions.risk_distributions.Beta(parameters=None, mean=None, sd=None, computability_bound=0.001)[source]
Parameters:
  • parameters (Parameters | None)

  • mean (Parameter | None)

  • sd (Parameter | None)

  • computability_bound (float)

distribution: Any = <scipy.stats._continuous_distns.beta_gen object>
expected_parameters: tuple[str, ...] = ('a', 'b', 'scale', 'loc')
static compute_scaling_bounds(mean, sd, computability_bound)[source]

Gets the upper and lower bounds of the distribution support.

Parameters:
  • mean (pd.Series[Any])

  • sd (pd.Series[Any])

  • computability_bound (float)

Return type:

pd.DataFrame

class vivarium.risk_distributions.risk_distributions.Exponential(parameters=None, mean=None, sd=None, computability_bound=0.001)[source]
Parameters:
  • parameters (Parameters | None)

  • mean (Parameter | None)

  • sd (Parameter | None)

  • computability_bound (float)

distribution: Any = <scipy.stats._continuous_distns.expon_gen object>
expected_parameters: tuple[str, ...] = ('scale',)
class vivarium.risk_distributions.risk_distributions.Gamma(parameters=None, mean=None, sd=None, computability_bound=0.001)[source]
Parameters:
  • parameters (Parameters | None)

  • mean (Parameter | None)

  • sd (Parameter | None)

  • computability_bound (float)

distribution: Any = <scipy.stats._continuous_distns.gamma_gen object>
expected_parameters: tuple[str, ...] = ('a', 'scale')
class vivarium.risk_distributions.risk_distributions.Gumbel(parameters=None, mean=None, sd=None, computability_bound=0.001)[source]
Parameters:
  • parameters (Parameters | None)

  • mean (Parameter | None)

  • sd (Parameter | None)

  • computability_bound (float)

distribution: Any = <scipy.stats._continuous_distns.gumbel_r_gen object>
expected_parameters: tuple[str, ...] = ('loc', 'scale')
class vivarium.risk_distributions.risk_distributions.InverseGamma(parameters=None, mean=None, sd=None, computability_bound=0.001)[source]
Parameters:
  • parameters (Parameters | None)

  • mean (Parameter | None)

  • sd (Parameter | None)

  • computability_bound (float)

distribution: Any = <scipy.stats._continuous_distns.invgamma_gen object>
expected_parameters: tuple[str, ...] = ('a', 'scale')
class vivarium.risk_distributions.risk_distributions.InverseWeibull(parameters=None, mean=None, sd=None, computability_bound=0.001)[source]
Parameters:
  • parameters (Parameters | None)

  • mean (Parameter | None)

  • sd (Parameter | None)

  • computability_bound (float)

distribution: Any = <scipy.stats._continuous_distns.invweibull_gen object>
expected_parameters: tuple[str, ...] = ('c', 'scale')
class vivarium.risk_distributions.risk_distributions.LogLogistic(parameters=None, mean=None, sd=None, computability_bound=0.001)[source]
Parameters:
  • parameters (Parameters | None)

  • mean (Parameter | None)

  • sd (Parameter | None)

  • computability_bound (float)

distribution: Any = <scipy.stats._continuous_distns.burr12_gen object>
expected_parameters: tuple[str, ...] = ('c', 'd', 'scale')
class vivarium.risk_distributions.risk_distributions.LogNormal(parameters=None, mean=None, sd=None, computability_bound=0.001)[source]
Parameters:
  • parameters (Parameters | None)

  • mean (Parameter | None)

  • sd (Parameter | None)

  • computability_bound (float)

distribution: Any = <scipy.stats._continuous_distns.lognorm_gen object>
expected_parameters: tuple[str, ...] = ('s', 'scale')
class vivarium.risk_distributions.risk_distributions.MirroredGumbel(parameters=None, mean=None, sd=None, computability_bound=0.001)[source]
Parameters:
  • parameters (Parameters | None)

  • mean (Parameter | None)

  • sd (Parameter | None)

  • computability_bound (float)

distribution: Any = <scipy.stats._continuous_distns.gumbel_r_gen object>
expected_parameters: tuple[str, ...] = ('loc', 'scale')
process(data, parameters, process_type)[source]

Function called before and after distribution looks to handle pre- and post-processing.

This function should look like an if sieve on the process_type and fall back with a call to this method if no processing needs to be done.

Parameters:
  • data (pd.Series[Any]) – The data to be processed.

  • parameters (pd.DataFrame) – Parameter data to be used in the processing.

  • process_type (str) – One of pdf_preprocess, pdf_postprocess, ppf_preprocess, ppf_post_process.

Returns:

The processed data.

Return type:

pandas.Series

class vivarium.risk_distributions.risk_distributions.MirroredGamma(parameters=None, mean=None, sd=None, computability_bound=0.001)[source]
Parameters:
  • parameters (Parameters | None)

  • mean (Parameter | None)

  • sd (Parameter | None)

  • computability_bound (float)

distribution: Any = <scipy.stats._continuous_distns.gamma_gen object>
expected_parameters: tuple[str, ...] = ('a', 'scale')
process(data, parameters, process_type)[source]

Function called before and after distribution looks to handle pre- and post-processing.

This function should look like an if sieve on the process_type and fall back with a call to this method if no processing needs to be done.

Parameters:
  • data (pd.Series[Any]) – The data to be processed.

  • parameters (pd.DataFrame) – Parameter data to be used in the processing.

  • process_type (str) – One of pdf_preprocess, pdf_postprocess, ppf_preprocess, ppf_post_process.

Returns:

The processed data.

Return type:

pandas.Series

class vivarium.risk_distributions.risk_distributions.Normal(parameters=None, mean=None, sd=None, computability_bound=0.001)[source]
Parameters:
  • parameters (Parameters | None)

  • mean (Parameter | None)

  • sd (Parameter | None)

  • computability_bound (float)

distribution: Any = <scipy.stats._continuous_distns.norm_gen object>
expected_parameters: tuple[str, ...] = ('loc', 'scale')
class vivarium.risk_distributions.risk_distributions.Weibull(parameters=None, mean=None, sd=None, computability_bound=0.001)[source]
Parameters:
  • parameters (Parameters | None)

  • mean (Parameter | None)

  • sd (Parameter | None)

  • computability_bound (float)

distribution: Any = <scipy.stats._continuous_distns.weibull_min_gen object>
expected_parameters: tuple[str, ...] = ('c', 'scale')
class vivarium.risk_distributions.risk_distributions.EnsembleDistribution(weights, parameters=None, mean=None, sd=None, computability_bound=0.001)[source]

Represents an arbitrary distribution as a weighted sum of several concrete distribution types.

Parameters:
  • weights (Parameters)

  • parameters (dict[str, Parameters] | None)

  • mean (Parameter | None)

  • sd (Parameter | None)

  • computability_bound (float)

classmethod get_parameters(weights, parameters=None, mean=None, sd=None, computability_bound=0.001)[source]
Parameters:
  • weights (Parameters)

  • parameters (dict[str, Parameters] | None)

  • mean (Parameter | None)

  • sd (Parameter | None)

  • computability_bound (float)

Return type:

tuple[pd.DataFrame, dict[str, pd.DataFrame]]

classmethod get_expected_parameters(distribution_name)[source]

Get the expected parameters for a given distribution in the ensemble.

Parameters:

distribution_name (str)

Return type:

list[str]

static fill_missing_weights(weights, expected_columns)[source]
Parameters:
  • weights (Parameters)

  • expected_columns (list[str])

Return type:

Parameters

pdf(x)[source]
Parameters:

x (NumericInput)

Return type:

Numeric

ppf(q, q_dist)[source]

Quantile function using 2 propensities.

Parameters:
  • q (NumericInput) – value propensity

  • q_dist (NumericInput) – propensity for picking the distribution

Returns:

Sample from the ensembled distribution.

Return type:

Union[pandas.Series, numpy.ndarray, float]

cdf(x)[source]
Parameters:

x (NumericInput)

Return type:

Numeric

exception vivarium.risk_distributions.risk_distributions.NonConvergenceError(message, dist)[source]

Raised when the optimization fails to converge

Parameters:
Return type:

None