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
Esempio n. 4
0
    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
Esempio n. 5
0
 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
Esempio n. 6
0
    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))
Esempio n. 7
0
    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
Esempio n. 10
0
    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
Esempio n. 11
0
 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
def test_log_gamma():
    gammaincln(1., 1.)
    grad(gammaincln)(1., 1.)
    grad(gammaincln, argnum=1)(1., 1.)