From cd3ddb91ba9568927763a6599a0ad64bffbc3a53 Mon Sep 17 00:00:00 2001 From: Le Roux Erwan <erwan.le-roux@irstea.fr> Date: Thu, 21 Feb 2019 16:07:36 +0100 Subject: [PATCH] [SCM] add covariance function display when using max stable models --- experiment/meteo_france_SCM_study/main_visualize.py | 11 ++++++----- .../safran/safran_visualizer.py | 11 +++++++++-- test/test_utils.py | 6 +++--- 3 files changed, 18 insertions(+), 10 deletions(-) diff --git a/experiment/meteo_france_SCM_study/main_visualize.py b/experiment/meteo_france_SCM_study/main_visualize.py index 0a96d042..fea9ed0d 100644 --- a/experiment/meteo_france_SCM_study/main_visualize.py +++ b/experiment/meteo_france_SCM_study/main_visualize.py @@ -19,7 +19,7 @@ def study_iterator(study_class, only_first_one=False, both_altitude=False, verbo if verbose: print('Loading studies....') for nb_day in nb_days: - for alti in AbstractStudy.ALTITUDES[::-1]: + for alti in AbstractStudy.ALTITUDES[::1]: if verbose: print('alti: {}, nb_day: {}'.format(alti, nb_day)) study = study_class(alti, nb_day) if is_safran_study else study_class(alti) @@ -41,11 +41,12 @@ def extended_visualization(): def normal_visualization(): + only_first_one = True for study_class in SCM_STUDIES[1:2]: - for study in study_iterator(study_class, only_first_one=True): + for study in study_iterator(study_class, only_first_one=only_first_one): study_visualizer = StudyVisualizer(study) # study_visualizer.visualize_independent_margin_fits(threshold=[None, 20, 40, 60][0]) - study_visualizer.visualize_linear_margin_fit() + study_visualizer.visualize_linear_margin_fit(only_first_max_stable=only_first_one) def complete_analysis(only_first_one=False): @@ -63,6 +64,6 @@ def complete_analysis(only_first_one=False): if __name__ == '__main__': - normal_visualization() + # normal_visualization() # extended_visualization() - # complete_analysis() + complete_analysis() diff --git a/experiment/meteo_france_SCM_study/safran/safran_visualizer.py b/experiment/meteo_france_SCM_study/safran/safran_visualizer.py index b147faa9..ae256286 100644 --- a/experiment/meteo_france_SCM_study/safran/safran_visualizer.py +++ b/experiment/meteo_france_SCM_study/safran/safran_visualizer.py @@ -11,6 +11,8 @@ from extreme_estimator.estimator.full_estimator.abstract_full_estimator import \ FullEstimatorInASingleStepWithSmoothMargin from extreme_estimator.estimator.margin_estimator.abstract_margin_estimator import SmoothMarginEstimator from extreme_estimator.extreme_models.margin_model.smooth_margin_model import LinearAllParametersAllDimsMarginModel +from extreme_estimator.extreme_models.max_stable_model.abstract_max_stable_model import CovarianceFunction, \ + AbstractMaxStableModelWithCovarianceFunction from extreme_estimator.extreme_models.max_stable_model.max_stable_models import Smith from extreme_estimator.margin_fits.gev.gev_params import GevParams from extreme_estimator.margin_fits.gev.gevmle_fit import GevMleFit @@ -96,9 +98,12 @@ class StudyVisualizer(object): assert len(x) == len(y) return x, y - def visualize_linear_margin_fit(self): + def visualize_linear_margin_fit(self, only_first_max_stable=False): plot_name = 'Full Likelihood with Linear marginals and max stable dependency structure' - max_stable_models = load_test_max_stable_models(only_one_covariance_function=True)[:1] + default_covariance_function = CovarianceFunction.cauchy + max_stable_models = load_test_max_stable_models(default_covariance_function=default_covariance_function) + if only_first_max_stable: + max_stable_models = max_stable_models[:1] fig, axes = plt.subplots(len(max_stable_models) + 1, len(GevParams.SUMMARY_NAMES), figsize=self.figsize) fig.subplots_adjust(hspace=1.0, wspace=1.0) margin_class = LinearAllParametersAllDimsMarginModel @@ -111,6 +116,8 @@ class StudyVisualizer(object): margin_model = margin_class(coordinates=self.coordinates) estimator = FullEstimatorInASingleStepWithSmoothMargin(self.dataset, margin_model, max_stable_model) title = get_display_name_from_object_type(type(max_stable_model)) + if isinstance(max_stable_model, AbstractMaxStableModelWithCovarianceFunction): + title += ' ' + str(default_covariance_function).split('.')[-1] self.fit_and_visualize_estimator(estimator, axes[i], title=title) self.show_or_save_to_file(plot_name) diff --git a/test/test_utils.py b/test/test_utils.py index 3cf6be93..36e1ea3a 100644 --- a/test/test_utils.py +++ b/test/test_utils.py @@ -46,13 +46,13 @@ def load_smooth_margin_models(coordinates): return [margin_class(coordinates=coordinates) for margin_class in TEST_MARGIN_TYPES] -def load_test_max_stable_models(only_one_covariance_function=False): - default_covariance_function = CovarianceFunction.cauchy +def load_test_max_stable_models(default_covariance_function=None): # Load all max stable model max_stable_models = [] for max_stable_class in TEST_MAX_STABLE_MODEL: if issubclass(max_stable_class, AbstractMaxStableModelWithCovarianceFunction): - if only_one_covariance_function: + if default_covariance_function is not None: + assert default_covariance_function in CovarianceFunction max_stable_models.append(max_stable_class(covariance_function=default_covariance_function)) else: max_stable_models.extend([max_stable_class(covariance_function=covariance_function) -- GitLab