def _log_hazard(self, params, times): # mu_, ln_sigma_, lambda_ = params # 変更前 mu_, lambda_ = params # 変更後 ilambda_2 = 1 / lambda_ ** 2 # Z = (log(times) - mu_) / safe_exp(ln_sigma_) # 変更前 Z = (log(times) - mu_) / lambda_ # 変更後 if lambda_ > 0: v = ( # log(lambda_) # 削除 - log(times) # - ln_sigma_ # 削除 - gammaln(ilambda_2) + (lambda_ * Z - safe_exp(lambda_ * Z) - 2 * log(lambda_)) * ilambda_2 - gammainccln(ilambda_2, safe_exp(lambda_ * Z - 2 * np.log(lambda_))) ) else: v = ( # log(-lambda_) # 削除 - log(times) # - ln_sigma_ # 削除 - gammaln(ilambda_2) + (lambda_ * Z - safe_exp(lambda_ * Z) - 2 * log(-lambda_)) * ilambda_2 - gammaincln(ilambda_2, safe_exp(lambda_ * Z - 2 * np.log(-lambda_))) ) return v
def _log_1m_sf(self, params, times): mu_, ln_sigma_, lambda_ = params sigma_ = safe_exp(ln_sigma_) Z = (log(times) - mu_) / sigma_ if lambda_ > 0: v = gammaincln(1 / lambda_ ** 2, safe_exp(lambda_ * Z - 2 * np.log(lambda_))) else: v = gammainccln(1 / lambda_ ** 2, safe_exp(lambda_ * Z - 2 * np.log(-lambda_))) return v
def _cumulative_hazard(self, params, times): mu_, ln_sigma_, lambda_ = params sigma_ = safe_exp(ln_sigma_) Z = (log(times) - mu_) / sigma_ ilambda_2 = 1 / lambda_ ** 2 if lambda_ > 0: v = -gammainccln(ilambda_2, safe_exp(lambda_ * Z - 2 * np.log(lambda_))) else: v = -gammaincln(ilambda_2, safe_exp(lambda_ * Z - 2 * np.log(-lambda_))) return v
def _log_1m_sf(self, params, times): mu_, ln_sigma_, lambda_ = params sigma_ = exp(ln_sigma_) Z = (log(times) - mu_) / sigma_ if lambda_ > 0: v = gammaincln(1 / lambda_**2, exp(lambda_ * Z) / lambda_**2) else: v = gammainccln(1 / lambda_**2, exp(lambda_ * Z) / lambda_**2) return v
def _cumulative_hazard(self, params, times): mu_, ln_sigma_, lambda_ = params sigma_ = exp(ln_sigma_) Z = (log(times) - mu_) / sigma_ ilambda_2 = 1 / lambda_**2 if lambda_ > 0: v = -gammainccln(ilambda_2, exp(lambda_ * Z) * ilambda_2) else: v = -gammaincln(ilambda_2, exp(lambda_ * Z) * ilambda_2) return v
def _cumulative_hazard(self, params, T, Xs): lambda_ = Xs["lambda_"] @ params["lambda_"] sigma_ = safe_exp(Xs["sigma_"] @ params["sigma_"]) mu_ = Xs["mu_"] @ params["mu_"] ilambda_2 = 1 / lambda_ ** 2 Z = (log(T) - mu_) / np.clip(sigma_, 1e-10, 1e20) exp_term = np.clip(safe_exp(lambda_ * Z - 2 * log(np.abs(lambda_))), 1e-300, np.inf) return -np.where(lambda_ > 0, gammainccln(ilambda_2, exp_term), gammaincln(ilambda_2, exp_term))
def _log_hazard(self, params, T, Xs): lambda_ = Xs["lambda_"] @ params["lambda_"] ln_sigma_ = Xs["sigma_"] @ params["sigma_"] mu_ = Xs["mu_"] @ params["mu_"] ilambda_2 = 1 / lambda_**2 Z = (log(T) - mu_) / np.clip(safe_exp(ln_sigma_), 0, 1e20) exp_term = np.clip(safe_exp(lambda_ * Z) * ilambda_2, 1e-300, 1e25) return (log(np.abs(lambda_)) - log(T) - ln_sigma_ - gammaln(ilambda_2) + (lambda_ * Z - 2 * log(np.abs(lambda_))) * ilambda_2 - exp_term - np.where(lambda_ > 0, gammainccln(ilambda_2, exp_term), gammaincln(ilambda_2, exp_term)))
def _log_1m_sf(self, params, times): mu_, ln_sigma_, lambda_ = params sigma_ = safe_exp(ln_sigma_) ilambda_2 = 1 / lambda_**2 Z = (log(times) - mu_) / sigma_ clipped_exp = np.clip(safe_exp(lambda_ * Z) * ilambda_2, 1e-15, 1e20) if lambda_ > 0: v = gammaincln(1 / lambda_**2, clipped_exp) elif lambda_ < 0: v = gammainccln(1 / lambda_**2, clipped_exp) else: v = norm.logcdf(Z) return v
def _log_hazard(self, params, times): mu_, ln_sigma_, lambda_ = params ilambda_2 = 1 / lambda_**2 Z = (log(times) - mu_) / safe_exp(ln_sigma_) if lambda_ > 0: v = (log(lambda_) - log(times) - ln_sigma_ - gammaln(ilambda_2) + (lambda_ * Z - safe_exp(lambda_ * Z) - 2 * log(lambda_)) * ilambda_2 - gammainccln( ilambda_2, safe_exp(lambda_ * Z - 2 * np.log(lambda_)))) else: v = (log(-lambda_) - log(times) - ln_sigma_ - gammaln(ilambda_2) + (lambda_ * Z - safe_exp(lambda_ * Z) - 2 * log(-lambda_)) * ilambda_2 - gammaincln( ilambda_2, safe_exp(lambda_ * Z - 2 * np.log(-lambda_)))) return v
def _cumulative_hazard(self, params, times): mu_, ln_sigma_, lambda_ = params sigma_ = safe_exp(ln_sigma_) Z = (log(times) - mu_) / sigma_ ilambda_2 = 1 / lambda_**2 clipped_exp = np.clip(safe_exp(lambda_ * Z) * ilambda_2, 1e-300, 1e20) if lambda_ > 0: v = -gammainccln(ilambda_2, clipped_exp) elif lambda_ < 0: v = -gammaincln(ilambda_2, clipped_exp) else: v = -norm.logsf(Z) return v
def _log_hazard(self, params, times): mu_, ln_sigma_, lambda_ = params ilambda_2 = 1 / lambda_**2 Z = (log(times) - mu_) / safe_exp(ln_sigma_) clipped_exp = np.clip(safe_exp(lambda_ * Z) * ilambda_2, 1e-15, 1e20) if lambda_ > 0: v = (log(lambda_) - log(times) - ln_sigma_ - gammaln(ilambda_2) + -2 * log(lambda_) * ilambda_2 - clipped_exp + Z / lambda_ - gammainccln(ilambda_2, clipped_exp)) elif lambda_ < 0: v = (log(-lambda_) - log(times) - ln_sigma_ - gammaln(ilambda_2) - 2 * log(-lambda_) * ilambda_2 - clipped_exp + Z / lambda_ - gammaincln(ilambda_2, clipped_exp)) else: v = norm.logpdf(Z, loc=0, scale=1) - ln_sigma_ - log(times) - norm.logsf(Z) return v