Attempts to reduce expression distributions to closed-form distributions when mathematical identities apply. Supported rules include:

# S3 method for class 'edist'
simplify(x, ...)

Arguments

x

The edist object to simplify

...

Additional arguments to pass (not used)

Value

The simplified distribution, or unchanged edist if no rule applies

Details

Single-variable:

  • c * Normal(mu, v) -> Normal(cmu, c^2v)

  • c * Gamma(a, r) -> Gamma(a, r/c) for c > 0

  • c * Exponential(r) -> Gamma(1, r/c) for c > 0

  • c * Uniform(a, b) -> Uniform(min(ca,cb), max(ca,cb)) for c != 0

  • c * Weibull(k, lam) -> Weibull(k, c*lam) for c > 0

  • c * ChiSq(df) -> Gamma(df/2, 1/(2c)) for c > 0

  • c * LogNormal(ml, sl) -> LogNormal(ml + log(c), sl) for c > 0

  • Normal(mu, v) + c -> Normal(mu + c, v)

  • Normal(mu, v) - c -> Normal(mu - c, v)

  • Uniform(a, b) + c -> Uniform(a + c, b + c)

  • Uniform(a, b) - c -> Uniform(a - c, b - c)

  • Normal(0, 1) ^ 2 -> ChiSquared(1)

  • exp(Normal(mu, v)) -> LogNormal(mu, sqrt(v))

  • log(LogNormal(ml, sl)) -> Normal(ml, sl^2)

Two-variable:

  • Normal + Normal -> Normal

  • Normal - Normal -> Normal

  • Gamma + Gamma (same rate) -> Gamma

  • Exponential + Exponential (same rate) -> Gamma(2, rate)

  • Gamma + Exponential (same rate) -> Gamma(a+1, rate)

  • ChiSquared + ChiSquared -> ChiSquared

  • Poisson + Poisson -> Poisson

  • LogNormal * LogNormal -> LogNormal

Examples

# Normal + Normal simplifies to a Normal
z <- normal(0, 1) + normal(2, 3)
is_normal(z)  # TRUE
#> [1] TRUE
z             # Normal(mu = 2, var = 4)
#> Normal distribution (mu = 2, var = 4) 

# exp(Normal) simplifies to LogNormal
w <- exp(normal(0, 1))
is_lognormal(w)  # TRUE
#> [1] TRUE