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_)))
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)
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))
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)
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))