From 864f2e1b65525a77a8ba4419775f208c14c59dde Mon Sep 17 00:00:00 2001
From: Le Roux Erwan <erwan.le-roux@irstea.fr>
Date: Wed, 17 Jul 2019 13:40:04 +0200
Subject: [PATCH] [STRENGTH EVOLUTION] fix strength computation for the scale
 test.

---
 .../main1_good_stationary_gev_fit.py          |  2 +-
 ...main3_non_stationary_strength_evolution.py | 23 ++++++++++---------
 experiment/paper1_steps/utils.py              |  6 ++---
 .../abstract_gev_change_point_test.py         |  5 ++++
 .../margin_fits/gev/gev_params.py             |  3 ++-
 5 files changed, 23 insertions(+), 16 deletions(-)

diff --git a/experiment/paper1_steps/hard extreme evolution - annual maxima/main1_good_stationary_gev_fit.py b/experiment/paper1_steps/hard extreme evolution - annual maxima/main1_good_stationary_gev_fit.py
index 4bcf26cb..0cfb9bcb 100644
--- a/experiment/paper1_steps/hard extreme evolution - annual maxima/main1_good_stationary_gev_fit.py	
+++ b/experiment/paper1_steps/hard extreme evolution - annual maxima/main1_good_stationary_gev_fit.py	
@@ -6,7 +6,7 @@ from experiment.meteo_france_data.scm_models_data.visualization.study_visualizat
 
 
 def maxima_analysis():
-    save_to_file = True
+    save_to_file = False
     only_first_one = False
     durand_altitude = [900, 1500, 2100, 2700]
     altitudes = durand_altitude
diff --git a/experiment/paper1_steps/hard extreme evolution - annual maxima/main3_non_stationary_strength_evolution.py b/experiment/paper1_steps/hard extreme evolution - annual maxima/main3_non_stationary_strength_evolution.py
index eccbb692..4cbedf1e 100644
--- a/experiment/paper1_steps/hard extreme evolution - annual maxima/main3_non_stationary_strength_evolution.py	
+++ b/experiment/paper1_steps/hard extreme evolution - annual maxima/main3_non_stationary_strength_evolution.py	
@@ -2,6 +2,8 @@ import time
 
 from experiment.meteo_france_data.scm_models_data.visualization.hypercube_visualization.altitude_year_hypercube_visualizer import \
     Altitude_Hypercube_Year_Visualizer
+from experiment.trend_analysis.univariate_test.abstract_gev_change_point_test import GevLocationChangePointTest, \
+    GevScaleChangePointTest
 
 """
 Visualize the 0.99 quantile initial value and its evolution
@@ -12,25 +14,24 @@ from experiment.paper1_steps.utils import get_full_altitude_visualizer, FULL_ALT
 def main_fast_spatial_risk_evolution():
     for altitude in FULL_ALTITUDES[-1:]:
         vizualiser = get_full_altitude_visualizer(Altitude_Hypercube_Year_Visualizer, altitude=altitude,
-                                                  exact_starting_year=1958, reduce_strength_array=True)
+                                                  exact_starting_year=1958, reduce_strength_array=True,
+                                                  trend_test_class=GevScaleChangePointTest)
         vizualiser.save_to_file = False
         vizualiser.visualize_massif_trend_test_one_altitude()
 
 
-def main_full_spatial_repartition():
+def main_full_spatial_risk_evolution():
     for altitude in FULL_ALTITUDES[:]:
-        # Compute for the most likely starting year
-        # vizualiser = get_full_altitude_visualizer(Altitude_Hypercube_Year_Visualizer, altitude=altitude)
-        # vizualiser.visualize_massif_trend_test_one_altitude()
-        # Compute the trend for a linear trend
-        vizualiser = get_full_altitude_visualizer(Altitude_Hypercube_Year_Visualizer, altitude=altitude,
-                                                  exact_starting_year=1958)
-        vizualiser.visualize_massif_trend_test_one_altitude()
+        for trend_test_class in [GevLocationChangePointTest, GevScaleChangePointTest][1:]:
+            vizualiser = get_full_altitude_visualizer(Altitude_Hypercube_Year_Visualizer, altitude=altitude,
+                                                      exact_starting_year=1958, reduce_strength_array=True,
+                                                      trend_test_class=trend_test_class)
+            vizualiser.visualize_massif_trend_test_one_altitude()
 
 
 def main_run():
-    # main_full_spatial_repartition()
-    main_fast_spatial_risk_evolution()
+    main_full_spatial_risk_evolution()
+    # main_fast_spatial_risk_evolution()
 
 
 if __name__ == '__main__':
diff --git a/experiment/paper1_steps/utils.py b/experiment/paper1_steps/utils.py
index 699d710f..3aa74c75 100644
--- a/experiment/paper1_steps/utils.py
+++ b/experiment/paper1_steps/utils.py
@@ -14,13 +14,13 @@ FULL_ALTITUDES = [900, 1200, 1500, 1800, 2100, 2400, 2700, 3000]
 
 
 def get_full_altitude_visualizer(altitude_hypercube_class, exact_starting_year=None, altitude=900,
-                                           reduce_strength_array=False):
-    altitudes, first_starting_year, last_starting_year, nb_data_reduced_for_speed, only_first_one, save_to_file, trend_test_class = get_full_parameters(
+                                 reduce_strength_array=False,
+                                 trend_test_class = GevLocationChangePointTest):
+    altitudes, first_starting_year, last_starting_year, nb_data_reduced_for_speed, only_first_one, save_to_file, _ = get_full_parameters(
         altitude=altitude)
     if exact_starting_year is not None:
         first_starting_year, last_starting_year = None, None
     study_classes = [CrocusRecentSwe]
-    trend_test_class = GevLocationChangePointTest
     visualizer = load_altitude_visualizer(altitude_hypercube_class, altitudes, last_starting_year,
                                           nb_data_reduced_for_speed, only_first_one, save_to_file, study_classes,
                                           trend_test_class, first_starting_year=first_starting_year,
diff --git a/experiment/trend_analysis/univariate_test/abstract_gev_change_point_test.py b/experiment/trend_analysis/univariate_test/abstract_gev_change_point_test.py
index f7acb27e..6417491e 100644
--- a/experiment/trend_analysis/univariate_test/abstract_gev_change_point_test.py
+++ b/experiment/trend_analysis/univariate_test/abstract_gev_change_point_test.py
@@ -169,6 +169,11 @@ class GevScaleChangePointTest(AbstractGevChangePointTest):
         super().__init__(years, maxima, starting_year,
                          NonStationaryScaleStationModel, GevParams.SCALE)
 
+    def _slope_strength(self):
+        return self.non_stationary_constant_gev_params.quantile_strength_evolution_ratio(
+            p=self.quantile_for_strength,
+            sigma1=self.non_stationary_linear_coef)
+
 
 class GevShapeChangePointTest(AbstractGevChangePointTest):
 
diff --git a/extreme_estimator/margin_fits/gev/gev_params.py b/extreme_estimator/margin_fits/gev/gev_params.py
index 90f6f946..650d4dca 100644
--- a/extreme_estimator/margin_fits/gev/gev_params.py
+++ b/extreme_estimator/margin_fits/gev/gev_params.py
@@ -58,7 +58,8 @@ class GevParams(ExtremeParams):
         initial_quantile = self.quantile(p)
         quantity_increased = mu1
         if sigma1 != 0:
-            quantity_increased += (sigma1 / self.shape) * (1 - (- np.float_power(np.log(p), -self.shape)))
+            power = np.float_power(- np.log(p), -self.shape)
+            quantity_increased -= (sigma1 / self.shape) * (1 - power)
         return quantity_increased / initial_quantile
 
     # Compute some indicators (such as the mean and the variance)
-- 
GitLab