From ea4fd9524de4d0a20d16d6d36e5e65840b502573 Mon Sep 17 00:00:00 2001 From: Le Roux Erwan <erwan.le-roux@irstea.fr> Date: Fri, 10 May 2019 14:38:10 +0200 Subject: [PATCH] [MAX STABLE] add starting point for non stationary full estimator. fix display in non stationary trends --- .../study_visualization/non_stationary_trends.py | 6 +----- .../full_estimator/abstract_full_estimator.py | 13 +++++++++++-- .../margin_estimator/abstract_margin_estimator.py | 1 + .../margin_model/parametric_margin_model.py | 3 --- .../test_extreme_models/test_max_stable_temporal.py | 8 -------- 5 files changed, 13 insertions(+), 18 deletions(-) diff --git a/experiment/meteo_france_SCM_study/visualization/study_visualization/non_stationary_trends.py b/experiment/meteo_france_SCM_study/visualization/study_visualization/non_stationary_trends.py index 4300cf2f..889fd80a 100644 --- a/experiment/meteo_france_SCM_study/visualization/study_visualization/non_stationary_trends.py +++ b/experiment/meteo_france_SCM_study/visualization/study_visualization/non_stationary_trends.py @@ -81,16 +81,12 @@ class AbstractNonStationaryTrendTest(object): mu1_trends = [self.get_mu1(starting_point=year) for year in years] ax2 = ax.twinx() color_mu1 = 'c' - ax.plot(years, mu1_trends, color_mu1 + 'o-') + ax2.plot(years, mu1_trends, color_mu1 + 'o-') ax2.set_ylabel('mu1 parameter', color=color_mu1) ax.set_xlabel('starting year for the linear trend of mu1') align_yaxis_on_zero(ax, ax2) title = self.display_name - first = mu1_trends[0] - last = mu1_trends[-1] - title += '\n mu1: first {}\nlast {}'.format(first, last) - title += '; equals? {}'.format(first == last) ax.set_title(title) ax.legend() diff --git a/extreme_estimator/estimator/full_estimator/abstract_full_estimator.py b/extreme_estimator/estimator/full_estimator/abstract_full_estimator.py index c3933c2c..1c472b1a 100644 --- a/extreme_estimator/estimator/full_estimator/abstract_full_estimator.py +++ b/extreme_estimator/estimator/full_estimator/abstract_full_estimator.py @@ -56,12 +56,21 @@ class FullEstimatorInASingleStepWithSmoothMargin(AbstractFullEstimator): def margin_function_start_fit(self): return self.linear_margin_model.margin_function_start_fit + @property + def df_coordinates_spat(self): + return self.dataset.coordinates.df_spatial_coordinates(self.train_split) + + @property + def df_coordinates_temp(self): + df_coordinates_temp = self.dataset.coordinates.df_temporal_coordinates(self.train_split) + return self.linear_margin_model.add_starting_temporal_point(df_coordinates_temp) + def _fit(self): # Estimate both the margin and the max-stable structure self._result_from_fit = self.max_stable_model.fitmaxstab( data_gev=self.dataset.maxima_gev_for_spatial_extremes_package(self.train_split), - df_coordinates_spat=self.dataset.coordinates.df_spatial_coordinates(self.train_split), - df_coordinates_temp=self.dataset.coordinates.df_temporal_coordinates(self.train_split), + df_coordinates_spat=self.df_coordinates_spat, + df_coordinates_temp=self.df_coordinates_temp, fit_marge=True, fit_marge_form_dict=self.linear_margin_model.margin_function_start_fit.form_dict, margin_start_dict=self.linear_margin_model.margin_function_start_fit.coef_dict diff --git a/extreme_estimator/estimator/margin_estimator/abstract_margin_estimator.py b/extreme_estimator/estimator/margin_estimator/abstract_margin_estimator.py index 38f8e5c3..3456cd45 100644 --- a/extreme_estimator/estimator/margin_estimator/abstract_margin_estimator.py +++ b/extreme_estimator/estimator/margin_estimator/abstract_margin_estimator.py @@ -32,6 +32,7 @@ class LinearMarginEstimator(AbstractMarginEstimator): maxima_gev_specialized = self.dataset.maxima_gev_for_spatial_extremes_package(self.train_split) df_coordinates_spat = self.dataset.coordinates.df_spatial_coordinates(self.train_split) df_coordinates_temp = self.dataset.coordinates.df_temporal_coordinates(self.train_split) + df_coordinates_temp = self.margin_model.add_starting_temporal_point(df_coordinates_temp) self._result_from_fit = self.margin_model.fitmargin_from_maxima_gev(data=maxima_gev_specialized, df_coordinates_spat=df_coordinates_spat, df_coordinates_temp=df_coordinates_temp) diff --git a/extreme_estimator/extreme_models/margin_model/parametric_margin_model.py b/extreme_estimator/extreme_models/margin_model/parametric_margin_model.py index 81abad9c..f589f6ee 100644 --- a/extreme_estimator/extreme_models/margin_model/parametric_margin_model.py +++ b/extreme_estimator/extreme_models/margin_model/parametric_margin_model.py @@ -38,9 +38,6 @@ class ParametricMarginModel(AbstractMarginModel, ABC): df_coordinates_temp: pd.DataFrame) -> ResultFromFit: assert data.shape[1] == len(df_coordinates_spat) - # Modify df_coordinates_temp - df_coordinates_temp = self.add_starting_temporal_point(df_coordinates_temp) - # Margin formula for fitspatgev fit_params = get_margin_formula(self.margin_function_start_fit.form_dict) diff --git a/test/test_extreme_estimator/test_extreme_models/test_max_stable_temporal.py b/test/test_extreme_estimator/test_extreme_models/test_max_stable_temporal.py index 27ceac3e..fa221e4b 100644 --- a/test/test_extreme_estimator/test_extreme_models/test_max_stable_temporal.py +++ b/test/test_extreme_estimator/test_extreme_models/test_max_stable_temporal.py @@ -99,14 +99,6 @@ class TestMaxStableTemporal(unittest.TestCase): # Create two different estimators estimator1 = self.fit_non_stationary_estimator(starting_point=3) estimator2 = self.fit_non_stationary_estimator(starting_point=20) - - for starting_point in range(3, 20): - estimator = self.fit_non_stationary_estimator(starting_point=starting_point) - print(estimator.margin_function_fitted.starting_point) - print(estimator.margin_function_fitted.coef_dict) - print(estimator.margin_function_fitted.mu0) - print(estimator.margin_function_fitted.mu1_temporal_trend) - mu1_estimator1 = estimator1.margin_function_fitted.mu1_temporal_trend mu1_estimator2 = estimator2.margin_function_fitted.mu1_temporal_trend self.assertNotEqual(mu1_estimator1, mu1_estimator2) -- GitLab