Source code for chaospy.distributions.collection.burr

"""Burr Type III distribution."""
import numpy
from scipy import special

from ..baseclass import SimpleDistribution, ShiftScaleDistribution


class burr(SimpleDistribution):
    """Stadard Burr distribution."""

    def __init__(self, alpha=1.0, kappa=1.0):
        super(burr, self).__init__(dict(alpha=alpha, kappa=kappa))

    def _pdf(self, x, alpha, kappa):
        output = numpy.zeros(x.shape)
        indices = x > 0
        output[indices] = alpha * kappa * x[indices] ** (-alpha - 1.0)
        output[indices] /= (1 + x[indices] ** alpha) ** (kappa + 1)
        return output

    def _cdf(self, x, alpha, kappa):
        output = numpy.zeros(x.shape)
        indices = x > 0
        output[indices] = 1 - (1 + x[indices] ** alpha) ** -kappa
        return output

    def _ppf(self, q, alpha, kappa):
        return ((1 - q) ** (-1.0 / kappa) - 1) ** (1.0 / alpha)

    def _mom(self, k, alpha, kappa):
        return kappa * special.beta(1 - k * 1.0 / alpha, kappa + k * 1.0 / alpha)

    def _lower(self, alpha, kappa):
        del alpha
        del kappa
        return 0.0

    def _upper(self, alpha, kappa):
        return (1e12 ** (1.0 / kappa) - 1) ** (1.0 / alpha)


[docs]class Burr(ShiftScaleDistribution): """ Burr Type XII or Singh-Maddala distribution. Args: alpha (float, Distribution): First shape parameter kappa (float, Distribution): Second shape parameter loc (float, Distribution): Location parameter scale (float, Distribution): Scaling parameter Examples: >>> distribution = chaospy.Burr(5, 2) >>> distribution Burr(5, 2) >>> uloc = numpy.linspace(0, 1, 6) >>> uloc array([0. , 0.2, 0.4, 0.6, 0.8, 1. ]) >>> xloc = distribution.inv(uloc) >>> xloc.round(3) array([ 0. , 0.652, 0.781, 0.897, 1.043, 15.849]) >>> numpy.allclose(distribution.fwd(xloc), uloc) True >>> distribution.pdf(xloc).round(3) array([ 0. , 92.945, 20.444, 4.852, 0.694, 0. ]) >>> distribution.sample(4).round(3) array([0.931, 0.575, 1.284, 0.828]) >>> distribution.mom(1).round(3) 1.283 """
[docs] def __init__(self, alpha=1, kappa=1, scale=1, shift=0): super(Burr, self).__init__( dist=burr(alpha, kappa), scale=scale, shift=shift, repr_args=[alpha, kappa], )