Ejemplo n.º 1
0
    def logp(self, value):
        r"""
        Calculate log-probability of ZeroInflatedNegativeBinomial distribution at specified value.

        Parameters
        ----------
        value: numeric
            Value(s) for which log-probability is calculated. If the log probabilities for multiple
            values are desired the values must be provided in a numpy array or theano tensor

        Returns
        -------
        TensorVariable
        """
        alpha = self.alpha
        mu = self.mu
        psi = self.psi

        logp_other = tt.log(psi) + self.nb.logp(value)
        logp_0 = logaddexp(
            tt.log1p(-psi),
            tt.log(psi) + alpha * (tt.log(alpha) - tt.log(alpha + mu)))

        logp_val = tt.switch(tt.gt(value, 0), logp_other, logp_0)

        return bound(logp_val, 0 <= value, 0 <= psi, psi <= 1, mu > 0,
                     alpha > 0)
Ejemplo n.º 2
0
    def logp(self, value):
        r"""
        Calculate log-probability of ZeroInflatedBinomial distribution at specified value.

        Parameters
        ----------
        value: numeric
            Value(s) for which log-probability is calculated. If the log probabilities for multiple
            values are desired the values must be provided in a numpy array or theano tensor

        Returns
        -------
        TensorVariable
        """
        psi = self.psi
        p = self.p
        n = self.n

        logp_val = tt.switch(
            tt.gt(value, 0),
            tt.log(psi) + self.bin.logp(value),
            logaddexp(tt.log1p(-psi),
                      tt.log(psi) + n * tt.log1p(-p)),
        )

        return bound(logp_val, 0 <= value, value <= n, 0 <= psi, psi <= 1,
                     0 <= p, p <= 1)
Ejemplo n.º 3
0
    def logp(self, value):
        psi = self.psi
        theta = self.theta

        logp_val = tt.switch(tt.gt(value, 0),
                             tt.log(psi) + self.pois.logp(value),
                             logaddexp(tt.log1p(-psi),
                                       tt.log(psi) - theta))

        return bound(logp_val, 0 <= value, 0 <= psi, psi <= 1, 0 <= theta)
Ejemplo n.º 4
0
    def logp(self, value):
        psi = self.psi
        p = self.p
        n = self.n

        logp_val = tt.switch(
            tt.gt(value, 0),
            tt.log(psi) + self.bin.logp(value),
            logaddexp(tt.log1p(-psi),
                      tt.log(psi) + n * tt.log1p(-p)))

        return bound(logp_val, 0 <= value, value <= n, 0 <= psi, psi <= 1,
                     0 <= p, p <= 1)
Ejemplo n.º 5
0
    def logp(self, value):
        alpha = self.alpha
        mu = self.mu
        psi = self.psi

        logp_other = tt.log(psi) + self.nb.logp(value)
        logp_0 = logaddexp(
            tt.log1p(-psi),
            tt.log(psi) + alpha * (tt.log(alpha) - tt.log(alpha + mu)))

        logp_val = tt.switch(tt.gt(value, 0), logp_other, logp_0)

        return bound(logp_val, 0 <= value, 0 <= psi, psi <= 1, mu > 0,
                     alpha > 0)
Ejemplo n.º 6
0
    def logp(self, value):
        psi = self.psi
        theta = self.theta

        logp_val = tt.switch(
            tt.gt(value, 0),
            tt.log(psi) + self.pois.logp(value),
            logaddexp(tt.log1p(-psi), tt.log(psi) - theta))

        return bound(
            logp_val,
            0 <= value,
            0 <= psi, psi <= 1,
            0 <= theta)
Ejemplo n.º 7
0
    def logp(self, value):
        psi = self.psi
        p = self.p
        n = self.n

        logp_val = tt.switch(
            tt.gt(value, 0),
            tt.log(psi) + self.bin.logp(value),
            logaddexp(tt.log1p(-psi), tt.log(psi) + n * tt.log1p(-p)))

        return bound(
            logp_val,
            0 <= value, value <= n,
            0 <= psi, psi <= 1,
            0 <= p, p <= 1)
Ejemplo n.º 8
0
    def logp(self, value):
        alpha = self.alpha
        mu = self.mu
        psi = self.psi

        logp_other = tt.log(psi) + self.nb.logp(value)
        logp_0 = logaddexp(
            tt.log1p(-psi),
            tt.log(psi) + alpha * (tt.log(alpha) - tt.log(alpha + mu)))

        logp_val = tt.switch(
            tt.gt(value, 0),
            logp_other,
            logp_0)

        return bound(
            logp_val,
            0 <= value,
            0 <= psi, psi <= 1,
            mu > 0, alpha > 0)