From 4fcbff4caa78de60ae70426b78778aaa211e2d1c Mon Sep 17 00:00:00 2001 From: CamDavidsonPilon Date: Mon, 1 Jan 2024 19:59:29 -0500 Subject: [PATCH] just crank it up --- lifelines/fitters/__init__.py | 2 +- lifelines/fitters/generalized_gamma_fitter.py | 11 ++++++----- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/lifelines/fitters/__init__.py b/lifelines/fitters/__init__.py index 710764e37..a7b1952ba 100644 --- a/lifelines/fitters/__init__.py +++ b/lifelines/fitters/__init__.py @@ -550,7 +550,7 @@ def _fit_model(self, Ts, E, entry, weights, fit_options: dict, show_progress=Tru minimizing_results, previous_results, minimizing_ll = None, None, np.inf for method, option in zip( ["Nelder-Mead", self._scipy_fit_method], - [{"maxiter": 100}, {**{"disp": show_progress}, **self._scipy_fit_options, **fit_options}], + [{"maxiter": 200}, {**{"disp": show_progress}, **self._scipy_fit_options, **fit_options}], ): initial_value = self._initial_values if previous_results is None else utils._to_1d_array(previous_results.x) diff --git a/lifelines/fitters/generalized_gamma_fitter.py b/lifelines/fitters/generalized_gamma_fitter.py index 0eb13fcd9..cb3fcc831 100644 --- a/lifelines/fitters/generalized_gamma_fitter.py +++ b/lifelines/fitters/generalized_gamma_fitter.py @@ -105,6 +105,7 @@ class GeneralizedGammaFitter(KnownModelParametricUnivariateFitter): """ _scipy_fit_method = "SLSQP" + _scipy_fit_options = {"maxiter": 10_000, "maxfev": 10_000} _fitted_parameter_names = ["mu_", "ln_sigma_", "lambda_"] _bounds = [(None, None), (None, None), (None, None)] _compare_to_values = np.array([0.0, 0.0, 1.0]) @@ -117,14 +118,14 @@ def _create_initial_point(self, Ts, E, *args): elif CensoringType.is_interval_censoring(self): # this fails if Ts[1] == Ts[0], so we add a some fudge factors. log_data = log(Ts[1] - Ts[0] + 0.1) - return np.array([log_data.mean(), log(log_data.std() + 0.01), 0.1]) + return np.array([log_data.mean() * 1.5, log(log_data.std() + 0.1), 1.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 + ilambda_2 = 1 / lambda_**2 clipped_exp = np.clip(safe_exp(lambda_ * Z) * ilambda_2, 1e-300, 1e20) if lambda_ > 0: @@ -137,7 +138,7 @@ def _cumulative_hazard(self, params, times): def _log_hazard(self, params, times): mu_, ln_sigma_, lambda_ = params - ilambda_2 = 1 / lambda_ ** 2 + ilambda_2 = 1 / lambda_**2 Z = (log(times) - mu_) / safe_exp(ln_sigma_) clipped_exp = np.clip(safe_exp(lambda_ * Z) * ilambda_2, 1e-300, 1e20) if lambda_ > 0: @@ -171,5 +172,5 @@ def percentile(self, p): sigma_ = exp(self.ln_sigma_) if lambda_ > 0: - return exp(sigma_ * log(gammainccinv(1 / lambda_ ** 2, p) * lambda_ ** 2) / lambda_) * exp(self.mu_) - return exp(sigma_ * log(gammaincinv(1 / lambda_ ** 2, p) * lambda_ ** 2) / lambda_) * exp(self.mu_) + return exp(sigma_ * log(gammainccinv(1 / lambda_**2, p) * lambda_**2) / lambda_) * exp(self.mu_) + return exp(sigma_ * log(gammaincinv(1 / lambda_**2, p) * lambda_**2) / lambda_) * exp(self.mu_)