VariableFactory#

class pymc_extras.prior.VariableFactory(*args, **kwargs)[source]#

Protocol for something that works like a Prior class.

Sample with sample_prior().

Examples

Create a custom variable factory.

import pymc as pm

import pytensor.tensor as pt

from pymc_extras.prior import sample_prior, VariableFactory

class PowerSumDistribution:
    """Create a distribution that is the sum of powers of a base distribution."""

    def __init__(self, distribution: VariableFactory, n: int):
        self.distribution = distribution
        self.n = n

    @property
    def dims(self):
        return self.distribution.dims

    def create_variable(self, name: str) -> "TensorVariable":
        raw = self.distribution.create_variable(f"{name}_raw")
        return pm.Deterministic(
            name,
            pt.sum([raw**n for n in range(1, self.n + 1)], axis=0),
            dims=self.dims,
        )


cubic = PowerSumDistribution(Prior("Normal"), n=3)
samples = sample_prior(cubic)
__init__(*args, **kwargs)#

Methods

__init__(*args, **kwargs)

create_variable(name[, xdist])

Create a variable.

Attributes

dims

The dimensions of the variable to create.