pcntoolkit.math_functions.shash

Sinh-Arcsinh (SHASH) Distribution Implementation Module.

This module implements the Sinh-Arcsinh (SHASH) distribution and its variants as described in Jones and Pewsey (2009) [1]. The SHASH distribution is a flexible distribution family that can model skewness and kurtosis through separate parameters.

The module provides:

  1. Basic SHASH transformations (S, S_inv, C)

  2. SHASH distribution (base implementation)

  3. SHASHo distribution (location-scale variant)

  4. SHASHo2 distribution (alternative parameterization)

  5. SHASHb distribution (standardized variant)

References

Notes

The implementation uses PyMC and PyTensor for probabilistic programming capabilities. All distributions support random sampling and log-probability calculations.

Attributes

CONST1

CONST2

KV_GRADIENT_DP

kv

shash

shashb

shasho

shasho2

Classes

Kv

SHASH

SHASHb

SHASHbRV

SHASHo

SHASHo2

SHASHo2RV

SHASHoRV

SHASHrv

Functions

K(p, x[, chunks])

P(→ numpy.typing.NDArray[numpy.float64])

The P function as given in Jones et al.

S(→ numpy.typing.NDArray[numpy.float64])

Sinh arcsinh transformation.

S_inv(→ numpy.typing.NDArray[numpy.float64])

Inverse sinh arcsinh transformation.

m(→ numpy.typing.NDArray[numpy.float64])

The r'th uncentered moment as given in Jones et al.

m1m2(→ Tuple[float, float])

Module Contents

class Kv

Bases: pytensor.scalar.basic.BinaryScalarOp

grad(inputs: Sequence[pytensor.graph.basic.Variable[Any, Any]], output_gradients: Sequence[pytensor.graph.basic.Variable[Any, Any]]) List[pytensor.graph.basic.Variable]
impl(p: float | int, x: float | int) float
static st_impl(p: float | int, x: float | int) float
nfunc_spec = ('scipy.special.kv', 2, 1)
class SHASH

Bases: pymc.distributions.Continuous

static P(q: float) float
classmethod dist(epsilon: pytensor.tensor.TensorLike, delta: pytensor.tensor.TensorLike, **kwargs: Any) Any
logp(epsilon: float, delta: float) float
static m1(epsilon: float, delta: float) float
static m1m2(epsilon: float, delta: float) Tuple[float, float]
static m2(epsilon: float, delta: float) float
my_K
rv_op
class SHASHb

Bases: pymc.distributions.Continuous

classmethod dist(mu: pytensor.tensor.TensorLike, sigma: pytensor.tensor.TensorLike, epsilon: pytensor.tensor.TensorLike, delta: pytensor.tensor.TensorLike, **kwargs: Any) Any
logp(mu: float, sigma: float, epsilon: float, delta: float) float
rv_op
class SHASHbRV

Bases: pytensor.tensor.random.op.RandomVariable

classmethod rng_fn(rng: numpy.random.Generator, mu: float, sigma: float, epsilon: float, delta: float, size: int | Tuple[int, Ellipsis] | None = None) numpy.typing.NDArray[numpy.float64]
dtype = 'floatX'
name = 'shashb'
signature = '(),(),(),()->()'
class SHASHo

Bases: pymc.distributions.Continuous

classmethod dist(mu: pytensor.tensor.TensorLike, sigma: pytensor.tensor.TensorLike, epsilon: pytensor.tensor.TensorLike, delta: pytensor.tensor.TensorLike, **kwargs: Any) Any
logp(mu: float, sigma: float, epsilon: float, delta: float) float
rv_op
class SHASHo2

Bases: pymc.distributions.Continuous

classmethod dist(mu: pytensor.tensor.TensorLike, sigma: pytensor.tensor.TensorLike, epsilon: pytensor.tensor.TensorLike, delta: pytensor.tensor.TensorLike, **kwargs: Any) Any
logp(mu: float, sigma: float, epsilon: float, delta: float) float
rv_op
class SHASHo2RV

Bases: pytensor.tensor.random.op.RandomVariable

classmethod rng_fn(rng: numpy.random.Generator, mu: pytensor.tensor.TensorLike, sigma: pytensor.tensor.TensorLike, epsilon: pytensor.tensor.TensorLike, delta: pytensor.tensor.TensorLike, size: int | Tuple[int, Ellipsis] | None = None) numpy.typing.NDArray[numpy.float64]
dtype = 'floatX'
name = 'shasho2'
signature = '(),(),(),()->()'
class SHASHoRV

Bases: pytensor.tensor.random.op.RandomVariable

classmethod rng_fn(rng: numpy.random.Generator, mu: pytensor.tensor.TensorLike, sigma: pytensor.tensor.TensorLike, epsilon: pytensor.tensor.TensorLike, delta: pytensor.tensor.TensorLike, size: int | Tuple[int, Ellipsis] | None = None) numpy.typing.NDArray[numpy.float64]
dtype = 'floatX'
name = 'shasho'
signature = '(),(),(),()->()'
class SHASHrv

Bases: pytensor.tensor.random.op.RandomVariable

classmethod rng_fn(rng: numpy.random.Generator, epsilon: float, delta: float, size: int | Tuple[int, Ellipsis] | None = None) numpy.typing.NDArray[numpy.float64]
dtype = 'floatX'
name = 'shash'
signature = '(),()->()'
K(p, x, chunks=None)
P(q: numpy.typing.NDArray[numpy.float64]) numpy.typing.NDArray[numpy.float64]

The P function as given in Jones et al.

S(x: numpy.typing.NDArray[numpy.float64], e: numpy.typing.NDArray[numpy.float64], d: numpy.typing.NDArray[numpy.float64]) numpy.typing.NDArray[numpy.float64]

Sinh arcsinh transformation.

S_inv(x: numpy.typing.NDArray[numpy.float64], e: numpy.typing.NDArray[numpy.float64], d: numpy.typing.NDArray[numpy.float64]) numpy.typing.NDArray[numpy.float64]

Inverse sinh arcsinh transformation.

m(epsilon: numpy.typing.NDArray[numpy.float64], delta: numpy.typing.NDArray[numpy.float64], r: int) numpy.typing.NDArray[numpy.float64]

The r’th uncentered moment as given in Jones et al.

m1m2(epsilon: float, delta: float) Tuple[float, float]
CONST1
CONST2
KV_GRADIENT_DP = 1e-08
kv
shash
shashb
shasho
shasho2