From 535d490c2b810366427bfd162ffcc81c3ef546e9 Mon Sep 17 00:00:00 2001
From: Le Roux Erwan <erwan.le-roux@irstea.fr>
Date: Fri, 28 Feb 2020 18:39:07 +0100
Subject: [PATCH] [paper 1] add extension of intensity plot with gev params.
 add inverse gumbel transformation.

---
 .../abstract_gev_trend_test.py                | 37 +++++++++++--------
 .../qqplot/main_qqplot_for_big_shapes.py      |  2 +-
 2 files changed, 22 insertions(+), 17 deletions(-)

diff --git a/experiment/trend_analysis/univariate_test/extreme_trend_test/abstract_gev_trend_test.py b/experiment/trend_analysis/univariate_test/extreme_trend_test/abstract_gev_trend_test.py
index 6111998b..295336f5 100644
--- a/experiment/trend_analysis/univariate_test/extreme_trend_test/abstract_gev_trend_test.py
+++ b/experiment/trend_analysis/univariate_test/extreme_trend_test/abstract_gev_trend_test.py
@@ -221,21 +221,26 @@ class AbstractGevTrendTest(AbstractUnivariateTest):
         ax.plot(standard_gumbel_quantiles, sorted_maxima, linestyle='None',
                 label='Empirical model', marker='o')
 
-        # Plot for the selected model
-        unconstrained_empirical_quantiles = self.compute_empirical_quantiles(self.unconstrained_estimator)
-        ax.plot(unconstrained_empirical_quantiles, sorted_maxima,
-                label='Selected model, which is ${}$'.format(self.label))
-        print(unconstrained_empirical_quantiles)
+
 
         ax_twiny = ax.twiny()
         return_periods = [10, 25, 50]
         quantiles = self.get_standard_quantiles_for_return_periods(return_periods, psnow)
-        print(quantiles)
         ax_twiny.plot(quantiles, [0 for _ in quantiles], linewidth=0)
         ax_twiny.set_xticks(quantiles)
         ax_twiny.set_xticklabels([return_period for return_period in return_periods])
         ax_twiny.set_xlabel('Return period w.r.t all annual maxima of GSL (years)', fontsize=size)
 
+        # Plot for the selected model with line break
+        unconstrained_empirical_quantiles = self.compute_empirical_quantiles(self.unconstrained_estimator)
+        # ax.plot(unconstrained_empirical_quantiles, sorted_maxima,
+        #         label='Selected model, which is ${}$'.format(self.label))
+        # Plot tor the selected model for different year
+
+        end_real_proba = 1 - (0.02 / psnow)
+        self.plot_model(ax, 1958, end_proba=end_real_proba, label='Selected model, which is ${}$'.format(self.label))
+        self.plot_model(ax, 2017, end_proba=end_real_proba, label='Selected model, which is ${}$'.format(self.label))
+
         # Plot for the discarded model
         # if 'Verdon' in massif_name and altitude == 300:
         #     q = [-1.4541688117485054, -1.2811308174310914, -1.216589300814509, -0.7635793791201918, -0.6298883422064275,
@@ -252,12 +257,7 @@ class AbstractGevTrendTest(AbstractUnivariateTest):
         #                   + 'with $\zeta_0=0.84$',
         #             color=color)
 
-        if self.unconstrained_estimator_gev_params.shape > 0.5:
-            # self.linear_extension(ax, unconstrained_empirical_quantiles, quantiles, sorted_maxima)
-            max_model_quantile = max(unconstrained_empirical_quantiles)
-            # print(sorted(unconstrained_empirical_quantiles))
-            # self.gev_param_extension(ax, 1958, max_model_quantile)
-            self.gev_param_extension(ax, 2017, max_model_quantile)
+
 
 
         all_quantiles = standard_gumbel_quantiles + unconstrained_empirical_quantiles + quantiles
@@ -273,14 +273,19 @@ class AbstractGevTrendTest(AbstractUnivariateTest):
         ax.set_ylabel("Non-zero annual maxima of GSL ({})".format(AbstractSnowLoadVariable.UNIT), fontsize=size)
         ax.legend(loc='upper left', prop={'size': 10})
 
-    def gev_param_extension(self, ax, year, max_model_quantile):
-        quantile_standard_gumbel = GevParams(0, 1, 0).quantile(0.98)
-        extended_quantiles = np.linspace(max_model_quantile, quantile_standard_gumbel, 50)
+    def plot_model(self, ax, year, start_proba=0.02, end_proba=0.98, label=''):
+        standard_gumbel = GevParams(0, 1, 0)
+        start_quantile = standard_gumbel.quantile(start_proba)
+        end_quantile = standard_gumbel.quantile(end_proba)
+        extended_quantiles = np.linspace(start_quantile, end_quantile, 500)
+        if year is None:
+            year = 2017
         gev_params_year = self.unconstrained_estimator.margin_function_from_fit.get_gev_params(
                 coordinate=np.array([year]),
                 is_transformed=False)
         extended_maxima = [gev_params_year.gumbel_inverse_standardization(q) for q in extended_quantiles]
-        ax.plot(extended_quantiles, extended_maxima, linestyle='--', label='{} extension'.format(year))
+        label = 'Y({})'.format(year) if year is not None else label
+        ax.plot(extended_quantiles, extended_maxima, linestyle='-', label=label)
 
     def linear_extension(self, ax, q, quantiles, sorted_maxima):
         # Extend the curve linear a bit if the return period 50 is not in the quantiles
diff --git a/papers/exceeding_snow_loads/check_mle_convergence_for_trends/qqplot/main_qqplot_for_big_shapes.py b/papers/exceeding_snow_loads/check_mle_convergence_for_trends/qqplot/main_qqplot_for_big_shapes.py
index f8efbe7a..4f89912a 100644
--- a/papers/exceeding_snow_loads/check_mle_convergence_for_trends/qqplot/main_qqplot_for_big_shapes.py
+++ b/papers/exceeding_snow_loads/check_mle_convergence_for_trends/qqplot/main_qqplot_for_big_shapes.py
@@ -99,7 +99,7 @@ for the worst example for -shape
 """
 
 if __name__ == '__main__':
-    fast = True
+    fast = False
     nb = 1 if fast else 5
     tuple_ordered_by_shape = get_tuple_ordered_by_shape(fast=fast)
     # plot_return_level_for_time_series_with_big_shape_parameters(tuple_ordered_by_shape, nb_worst_examples=nb)
-- 
GitLab