def _survival_function(self, params, times):
     mu_, ln_sigma_, lambda_ = params
     sigma_ = safe_exp(ln_sigma_)
     Z = (log(times) - mu_) / sigma_
     if lambda_ > 0:
         return gammaincc(1 / lambda_ ** 2, safe_exp(lambda_ * Z - 2 * np.log(lambda_)))
     else:
         return gammainc(1 / lambda_ ** 2, safe_exp(lambda_ * Z - 2 * np.log(-lambda_)))
示例#2
0
 def _survival_function(self, params, times):
     mu_, ln_sigma_, lambda_ = params
     sigma_ = exp(ln_sigma_)
     Z = (log(times) - mu_) / sigma_
     if lambda_ > 0:
         return gammaincc(1 / lambda_**2, exp(lambda_ * Z) / lambda_**2)
     else:
         return gammainc(1 / lambda_**2, exp(lambda_ * Z) / lambda_**2)
示例#3
0
    def _survival_function(self, params, T, Xs):
        lambda_ = np.clip(Xs["lambda_"] @ params["lambda_"], 1e-25, 1e10)
        sigma_ = safe_exp(Xs["sigma_"] @ params["sigma_"])
        mu_ = Xs["mu_"] @ params["mu_"]

        Z = (log(T) - mu_) / sigma_
        ilambda_2 = 1 / lambda_ ** 2
        exp_term = safe_exp(lambda_ * Z - 2 * log(np.abs(lambda_)))

        return np.where(lambda_ > 0, gammaincc(ilambda_2, exp_term), gammainc(ilambda_2, exp_term))
示例#4
0
    def _survival_function(self, params, T, Xs):
        lambda_ = Xs["lambda_"] @ params["lambda_"]
        sigma_ = safe_exp(Xs["sigma_"] @ params["sigma_"])
        mu_ = Xs["mu_"] @ params["mu_"]

        Z = (log(T) - mu_) / sigma_
        ilambda_2 = 1 / lambda_**2
        exp_term = np.clip(safe_exp(lambda_ * Z) * ilambda_2, 1e-300, 1e25)

        return np.where(lambda_ > 0, gammaincc(ilambda_2, exp_term),
                        gammainc(ilambda_2, exp_term))
    def _survival_function(self, params, times):
        mu_, ln_sigma_, lambda_ = params
        sigma_ = safe_exp(ln_sigma_)
        Z = (log(times) - mu_) / sigma_
        clipped_exp = np.clip(safe_exp(lambda_ * Z) / lambda_**2, 1e-15, 1e20)
        ilambda_2 = 1 / lambda_**2

        if lambda_ > 0:
            v = gammaincc(ilambda_2, clipped_exp)
        elif lambda_ < 0:
            v = gammainc(ilambda_2, clipped_exp)
        else:
            v = norm.sf(Z)

        # never return a 0
        return np.clip(v, 1e-50, 1 - 1e-50)
示例#6
0
def test_a_special_case_of_the_derivative():
    """
    We know a specific to test against:

    dUIG(s, x) / ds at (s=1, x) = ln(x) * UIG(1, x) + E_1(x)

    where E_1(x) is the exponential integral
    """

    # incomplete upper gamma
    IUG = lambda s, x: gammaincc(s, x) * gamma(s)

    def analytical_derivative(x):
        dIUG = np.log(x) * IUG(1., x) - expi(-x)
        return dIUG

    def approx_derivative(x):
        return jacobian(IUG, argnum=0)(1., x)

    x = np.linspace(1, 12)
    npt.assert_allclose(analytical_derivative(x), approx_derivative(x))

    x = np.logspace(-25, 25, 100)
    npt.assert_allclose(analytical_derivative(x), approx_derivative(x))