Distributions

The distributions module provides probability distributions used for shocks and initial conditions. Continuous distributions support both drawing random samples and discretization into point-mass approximations.

Note

Normal and Lognormal are parameterized by the distribution’s mean and standard deviation in levels, not by the log-space parameters \((\mu, \sigma)\) familiar from other libraries. A standard deviation of zero produces a degenerate point mass at the mean argument.

Distribution classes that provide compatibility with scipy.stats and torch.distributions for better integration with neural network methods while maintaining API compatibility.

class skagent.distributions.Bernoulli(p=0.5, backend='scipy', rng=None)

Bernoulli distribution compatible with skagent.distributions.Bernoulli

Parameters:
discretize(**kwargs)

Bernoulli is already discrete

Return type:

DiscreteDistribution

property mean: float

Mean of the distribution

property std: float

Standard deviation of the distribution

class skagent.distributions.DiscreteDistribution(points, weights, var_names=None, rng=None)

A discrete distribution representation for labeled discrete distributions

Parameters:
draw(n=1)

Draw samples from the discrete distribution

Parameters:

n (int)

Return type:

ndarray

class skagent.distributions.DiscreteDistributionLabeled(points, weights, var_names=None, rng=None)

Labeled discrete distribution with variable names

Parameters:
classmethod from_unlabeled(unlabeled_dist, var_names)

Create labeled distribution from unlabeled one

Parameters:

var_names (list[str])

class skagent.distributions.Distribution(backend='scipy', rng=None)

Base class for all distributions, providing a common interface that works with both scipy and torch backends.

Parameters:
abstractmethod discretize(**kwargs)

Discretize the distribution

Return type:

DiscreteDistribution

draw(n=1)

Draw n samples from the distribution

Parameters:

n (int)

Return type:

ndarray

abstract property mean: float

Mean of the distribution

abstract property std: float

Standard deviation of the distribution

class skagent.distributions.IndexDistribution(dist_class, params_dict, rng=None)

Distribution that varies by index (like age), compatible with skagent.distributions.IndexDistribution

Parameters:
draw(conditions)

Draw samples based on conditions (typically ages)

Parameters:

conditions (ndarray)

Return type:

ndarray

class skagent.distributions.Lognormal(mean=1.0, std=1.0, backend='scipy', rng=None)

Lognormal distribution compatible with skagent.distributions.Lognormal

Parameters:
discretize(n_points=7, N=None, **kwargs)

Discretize the distribution

Parameters:
Return type:

DiscreteDistribution

draw(n=1)

Draw n samples from the distribution

Parameters:

n (int)

Return type:

ndarray

property mean: float

Mean of the distribution

property std: float

Standard deviation of the distribution

class skagent.distributions.MeanOneLogNormal(sigma=1.0, backend='scipy', rng=None)

Lognormal distribution with mean normalized to 1.0

Parameters:
class skagent.distributions.Normal(mu=0.0, sigma=1.0, backend='scipy', rng=None)

Normal distribution compatible with skagent.distributions.Normal

Parameters:
discretize(n_points=7, sigma_range=3.0, N=None, **kwargs)

Discretize using Gauss-Hermite quadrature or uniform grid

Parameters:
Return type:

DiscreteDistribution

property mean: float

Mean of the distribution

property std: float

Standard deviation of the distribution

class skagent.distributions.TimeVaryingDiscreteDistribution(distributions)

Time-varying discrete distribution for compatibility

Parameters:

distributions (list[DiscreteDistribution])

draw(conditions)

Draw samples based on time conditions

Parameters:

conditions (ndarray)

Return type:

ndarray

class skagent.distributions.Uniform(low=0.0, high=1.0, backend='scipy', rng=None)

Uniform distribution

Parameters:
discretize(n_points=7, N=None, **kwargs)

Discretize using Gauss-Hermite quadrature or uniform grid

Parameters:
Return type:

DiscreteDistribution

property mean: float

Mean of the distribution

property std: float

Standard deviation of the distribution

skagent.distributions.combine_indep_dstns(*distributions)

Combine independent discrete distributions into a joint distribution Compatible with skagent.distributions.combine_indep_dstns

Return type:

DiscreteDistribution

skagent.distributions.expected(func, dist)

Compute expected value of a function over a discrete distribution Compatible with skagent.distributions.expected

Parameters:

dist (DiscreteDistribution)

Return type:

float