From 823d5c8bcdbd148d35af8f8fd36c858bc5fe5488 Mon Sep 17 00:00:00 2001
From: Le Roux Erwan <erwan.le-roux@irstea.fr>
Date: Mon, 25 Nov 2019 11:26:50 +0100
Subject: [PATCH] [PAPER 1] set starting year to None to avoid bug due to
 missing data for the year 1958 for instance

---
 .../eurocode_visualizer.py                      |  5 +++--
 .../main_result_trends_and_return_levels.py     | 17 ++++++++++++-----
 ...tudy_visualizer_for_non_stationary_trends.py |  9 ++++++++-
 .../eurocode_return_level_uncertainties.py      |  2 +-
 4 files changed, 24 insertions(+), 9 deletions(-)

diff --git a/experiment/paper_past_snow_loads/result_trends_and_return_levels/eurocode_visualizer.py b/experiment/paper_past_snow_loads/result_trends_and_return_levels/eurocode_visualizer.py
index 6b887c9c..78bd644d 100644
--- a/experiment/paper_past_snow_loads/result_trends_and_return_levels/eurocode_visualizer.py
+++ b/experiment/paper_past_snow_loads/result_trends_and_return_levels/eurocode_visualizer.py
@@ -37,8 +37,8 @@ def plot_uncertainty_massifs(altitude_to_visualizer: Dict[int, StudyVisualizerFo
     :return:
     """
     visualizer = list(altitude_to_visualizer.values())[0]
-    # Subdivide massif names in group of 5
-    m = 4
+    # Subdivide massif names in group of 3
+    m = 3
     uncertainty_massif_names = visualizer.uncertainty_massif_names
     n = (len(uncertainty_massif_names) // m) + 1
     for i in list(range(n))[:]:
@@ -140,6 +140,7 @@ def plot_single_uncertainty_massif_and_non_stationary_context(ax, massif_name, n
     title = '{} ({} Eurocodes area) with a {} model'.format(massif_name_str, eurocode_region_str,
                                                             non_stationary_context)
     ax.set_title(title)
+    ax.set_xticks(altitudes)
     ax.set_ylabel('50-year return level of SL (kN $m^-2$)')
     ax.set_xlabel('Altitude (m)')
     ax.grid()
diff --git a/experiment/paper_past_snow_loads/result_trends_and_return_levels/main_result_trends_and_return_levels.py b/experiment/paper_past_snow_loads/result_trends_and_return_levels/main_result_trends_and_return_levels.py
index 172b0396..8554af5c 100644
--- a/experiment/paper_past_snow_loads/result_trends_and_return_levels/main_result_trends_and_return_levels.py
+++ b/experiment/paper_past_snow_loads/result_trends_and_return_levels/main_result_trends_and_return_levels.py
@@ -67,9 +67,16 @@ def major_result():
 
 if __name__ == '__main__':
     # minor_result(altitude=1800)
-    intermediate_result(altitudes=[1500, 1800], massif_names=['Chartreuse'],
-                        uncertainty_methods=[ConfidenceIntervalMethodFromExtremes.ci_mle],
-                        non_stationary_uncertainty=[False])
+    # intermediate_result(altitudes=[1500, 1800], massif_names=['Chartreuse'],
+    #                     uncertainty_methods=[ConfidenceIntervalMethodFromExtremes.ci_mle],
+    #                     non_stationary_uncertainty=[False])
+    # intermediate_result(altitudes=[1500, 1800], massif_names=None,
+    #                     uncertainty_methods=[ConfidenceIntervalMethodFromExtremes.ci_mle],
+    #                     non_stationary_uncertainty=[False])
+    # intermediate_result(altitudes=[300, 600, 900, 1200, 1500, 1800], massif_names=None,
+    #                     uncertainty_methods=[ConfidenceIntervalMethodFromExtremes.ci_mle],
+    #                     non_stationary_uncertainty=[False])
     intermediate_result(altitudes=[300, 600, 900, 1200, 1500, 1800], massif_names=None,
-                        uncertainty_methods=[ConfidenceIntervalMethodFromExtremes.ci_mle],
-                        non_stationary_uncertainty=[False])
+                        uncertainty_methods=[ConfidenceIntervalMethodFromExtremes.ci_mle,
+                                             ConfidenceIntervalMethodFromExtremes.ci_bayes],
+                        non_stationary_uncertainty=[False, True])
diff --git a/experiment/paper_past_snow_loads/result_trends_and_return_levels/study_visualizer_for_non_stationary_trends.py b/experiment/paper_past_snow_loads/result_trends_and_return_levels/study_visualizer_for_non_stationary_trends.py
index e4f21054..b80f46ac 100644
--- a/experiment/paper_past_snow_loads/result_trends_and_return_levels/study_visualizer_for_non_stationary_trends.py
+++ b/experiment/paper_past_snow_loads/result_trends_and_return_levels/study_visualizer_for_non_stationary_trends.py
@@ -6,6 +6,7 @@ from typing import Dict, Tuple
 import numpy as np
 from cached_property import cached_property
 
+from experiment.eurocode_data.utils import EUROCODE_QUANTILE
 from experiment.meteo_france_data.scm_models_data.abstract_study import AbstractStudy
 from experiment.meteo_france_data.scm_models_data.visualization.study_visualization.study_visualizer import \
     StudyVisualizer
@@ -70,6 +71,12 @@ class StudyVisualizerForNonStationaryTrends(StudyVisualizer):
         return {m: np.count_nonzero(maxima) / len(maxima) for m, (_, maxima) in
                 self.massif_name_to_years_and_maxima.items()}
 
+    @cached_property
+    def massif_name_to_eurocode_quantile_in_practice(self):
+        """Due to missing data, the the eurocode quantile which 0.98 if we have all the data
+        correspond in practice to the quantile psnow x 0.98 of the data where there is snow"""
+        return {m: p * EUROCODE_QUANTILE for m, p in self.massif_name_to_psnow.items()}
+
     @cached_property
     def massif_name_to_non_null_years_and_maxima(self):
         d = {}
@@ -80,7 +87,7 @@ class StudyVisualizerForNonStationaryTrends(StudyVisualizer):
 
     @cached_property
     def massif_name_to_minimized_aic_non_stationary_trend_test(self) -> Dict[str, AbstractGevTrendTest]:
-        starting_year = 1958
+        starting_year = None
         massif_name_to_trend_test_that_minimized_aic = {}
         for massif_name, (x, y) in self.massif_name_to_non_null_years_and_maxima.items():
             non_stationary_trend_test = [t(x, y, starting_year) for t in self.non_stationary_trend_test]
diff --git a/extreme_fit/model/result_from_model_fit/result_from_extremes/eurocode_return_level_uncertainties.py b/extreme_fit/model/result_from_model_fit/result_from_extremes/eurocode_return_level_uncertainties.py
index 99599dca..71d7e183 100644
--- a/extreme_fit/model/result_from_model_fit/result_from_extremes/eurocode_return_level_uncertainties.py
+++ b/extreme_fit/model/result_from_model_fit/result_from_extremes/eurocode_return_level_uncertainties.py
@@ -49,7 +49,7 @@ class EurocodeConfidenceIntervalFromExtremes(object):
         else:
             fit_method = TemporalMarginFitMethod.extremes_fevd_mle
         # Fitted estimator
-        fitted_estimator = fitted_linear_margin_estimator(model_class, coordinates, dataset, starting_year=1958,
+        fitted_estimator = fitted_linear_margin_estimator(model_class, coordinates, dataset, starting_year=None,
                                                           fit_method=fit_method)
         # Load object from result from extremes
         return cls.from_estimator_extremes(fitted_estimator, ci_method, temporal_covariate)
-- 
GitLab