Commit cee0c1f7 authored by Le Roux Erwan's avatar Le Roux Erwan
Browse files

[contrasting project] move and rename TemporalMarginFitMethod

parent 678a4180
No related merge requests found
Showing with 21 additions and 18 deletions
+21 -18
...@@ -6,7 +6,8 @@ import pandas as pd ...@@ -6,7 +6,8 @@ import pandas as pd
from extreme_fit.distribution.exp_params import ExpParams from extreme_fit.distribution.exp_params import ExpParams
from extreme_fit.distribution.gev.gev_params import GevParams from extreme_fit.distribution.gev.gev_params import GevParams
from extreme_fit.model.margin_model.linear_margin_model.linear_margin_model import LinearMarginModel from extreme_fit.model.margin_model.linear_margin_model.linear_margin_model import LinearMarginModel
from extreme_fit.model.margin_model.utils import MarginFitMethod, fitmethod_to_str from extreme_fit.model.margin_model.utils import MarginFitMethod, fitmethod_to_str, FEVD_MARGIN_FIT_METHODS, \
FEVD_MARGIN_FIT_METHOD_TO_ARGUMENT_STR
from extreme_fit.model.result_from_model_fit.abstract_result_from_model_fit import AbstractResultFromModelFit from extreme_fit.model.result_from_model_fit.abstract_result_from_model_fit import AbstractResultFromModelFit
from extreme_fit.model.result_from_model_fit.result_from_extremes.result_from_bayesian_extremes import \ from extreme_fit.model.result_from_model_fit.result_from_extremes.result_from_bayesian_extremes import \
AbstractResultFromExtremes, ResultFromBayesianExtremes AbstractResultFromExtremes, ResultFromBayesianExtremes
...@@ -47,13 +48,8 @@ class AbstractTemporalLinearMarginModel(LinearMarginModel): ...@@ -47,13 +48,8 @@ class AbstractTemporalLinearMarginModel(LinearMarginModel):
if self.params_class is GevParams: if self.params_class is GevParams:
if self.fit_method == MarginFitMethod.is_mev_gev_fit: if self.fit_method == MarginFitMethod.is_mev_gev_fit:
return self.ismev_gev_fit(x, df_coordinates_temp) return self.ismev_gev_fit(x, df_coordinates_temp)
elif self.fit_method == MarginFitMethod.extremes_fevd_bayesian: elif self.fit_method in FEVD_MARGIN_FIT_METHODS:
return self.extremes_fevd_bayesian_fit(x, df_coordinates_temp) return self.extremes_fevd_fit(x, df_coordinates_temp)
elif self.fit_method in [MarginFitMethod.extremes_fevd_mle,
MarginFitMethod.extremes_fevd_gmle,
MarginFitMethod.extremes_fevd_l_moments,
]:
return self.extremes_fevd_mle_related_fit(x, df_coordinates_temp)
else: else:
raise NotImplementedError raise NotImplementedError
elif self.params_class is ExpParams: elif self.params_class is ExpParams:
...@@ -72,22 +68,20 @@ class AbstractTemporalLinearMarginModel(LinearMarginModel): ...@@ -72,22 +68,20 @@ class AbstractTemporalLinearMarginModel(LinearMarginModel):
# Gev fit with extRemes package # Gev fit with extRemes package
def extremes_fevd_mle_related_fit(self, x, df_coordinates_temp) -> AbstractResultFromExtremes: def extremes_fevd_fit(self, x, df_coordinates_temp) -> AbstractResultFromExtremes:
if self.fit_method == MarginFitMethod.extremes_fevd_mle: assert self.fit_method in FEVD_MARGIN_FIT_METHODS
method = "MLE" if self.fit_method == MarginFitMethod.extremes_fevd_bayesian:
elif self.fit_method == MarginFitMethod.extremes_fevd_gmle: return self.extremes_fevd_bayesian_fit(x, df_coordinates_temp)
method = "GMLE"
elif self.fit_method == MarginFitMethod.extremes_fevd_l_moments:
method = "Lmoments"
assert self.margin_function_start_fit.is_a_stationary_model
else: else:
raise ValueError('wrong method') return self.run_fevd_fixed(df_coordinates_temp=df_coordinates_temp,
return self.run_fevd_fixed(df_coordinates_temp, method, x) method=FEVD_MARGIN_FIT_METHOD_TO_ARGUMENT_STR[self.fit_method], x=x)
def extreme_fevd_mle_exp_fit(self, x, df_coordinates_temp): def extreme_fevd_mle_exp_fit(self, x, df_coordinates_temp):
return self.run_fevd_fixed(df_coordinates_temp, "Exponential", x) return self.run_fevd_fixed(df_coordinates_temp, "Exponential", x)
def run_fevd_fixed(self, df_coordinates_temp, method, x): def run_fevd_fixed(self, df_coordinates_temp, method, x):
if self.fit_method == MarginFitMethod.extremes_fevd_l_moments:
assert self.margin_function_start_fit.is_a_stationary_model
r_type_argument_kwargs, y = self.extreme_arguments(df_coordinates_temp) r_type_argument_kwargs, y = self.extreme_arguments(df_coordinates_temp)
res = safe_run_r_estimator(function=r('fevd_fixed'), res = safe_run_r_estimator(function=r('fevd_fixed'),
x=x, x=x,
......
...@@ -8,5 +8,14 @@ class MarginFitMethod(Enum): ...@@ -8,5 +8,14 @@ class MarginFitMethod(Enum):
extremes_fevd_gmle = 3 extremes_fevd_gmle = 3
extremes_fevd_l_moments = 4 extremes_fevd_l_moments = 4
FEVD_MARGIN_FIT_METHOD_TO_ARGUMENT_STR = {
MarginFitMethod.extremes_fevd_mle: "MLE",
MarginFitMethod.extremes_fevd_gmle: "GMLE",
MarginFitMethod.extremes_fevd_l_moments: "Lmoments",
MarginFitMethod.extremes_fevd_bayesian: "Bayesian"
}
FEVD_MARGIN_FIT_METHODS = set(FEVD_MARGIN_FIT_METHOD_TO_ARGUMENT_STR.keys())
def fitmethod_to_str(fit_method): def fitmethod_to_str(fit_method):
return str(fit_method).split('.')[-1] return str(fit_method).split('.')[-1]
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment