Commit cdcbd7e6 authored by Le Roux Erwan's avatar Le Roux Erwan
Browse files

[GEV TREND TEST] rename and refactor the code for one parameter gev trend test...

[GEV TREND TEST] rename and refactor the code for one parameter gev trend test (to prepare the introduction of tests with two parameters)
parent 22e10d5d
No related merge requests found
Showing with 107 additions and 106 deletions
+107 -106
...@@ -9,7 +9,7 @@ from experiment.meteo_france_data.scm_models_data.visualization.study_visualizat ...@@ -9,7 +9,7 @@ from experiment.meteo_france_data.scm_models_data.visualization.study_visualizat
SCM_STUDY_NAME_TO_COLOR, SCM_STUDY_NAME_TO_ABBREVIATION, SCM_STUDY_CLASS_TO_ABBREVIATION, SCM_STUDIES_NAMES SCM_STUDY_NAME_TO_COLOR, SCM_STUDY_NAME_TO_ABBREVIATION, SCM_STUDY_CLASS_TO_ABBREVIATION, SCM_STUDIES_NAMES
from experiment.meteo_france_data.scm_models_data.visualization.study_visualization.study_visualizer import \ from experiment.meteo_france_data.scm_models_data.visualization.study_visualization.study_visualizer import \
StudyVisualizer StudyVisualizer
from experiment.trend_analysis.univariate_test.abstract_gev_change_point_test import AbstractGevChangePointTest from experiment.trend_analysis.univariate_test.abstract_gev_trend_test import AbstractGevTrendTest
from experiment.trend_analysis.univariate_test.abstract_univariate_test import AbstractUnivariateTest from experiment.trend_analysis.univariate_test.abstract_univariate_test import AbstractUnivariateTest
from extreme_estimator.margin_fits.gev.gev_params import GevParams from extreme_estimator.margin_fits.gev.gev_params import GevParams
from utils import get_display_name_from_object_type from utils import get_display_name_from_object_type
...@@ -320,7 +320,7 @@ class AltitudeHypercubeVisualizer(AbstractHypercubeVisualizer): ...@@ -320,7 +320,7 @@ class AltitudeHypercubeVisualizer(AbstractHypercubeVisualizer):
int(massif_to_constant[m]), int(massif_to_constant[m]),
"+" if massif_to_strength[m] > 0 else "", "+" if massif_to_strength[m] > 0 else "",
round(massif_to_strength[m] * massif_to_constant[m], 1), round(massif_to_strength[m] * massif_to_constant[m], 1),
AbstractGevChangePointTest.nb_years_for_quantile_evolution) AbstractGevTrendTest.nb_years_for_quantile_evolution)
for m in massif_to_strength} for m in massif_to_strength}
else: else:
massif_name_to_value = massif_to_year massif_name_to_value = massif_to_year
...@@ -342,8 +342,8 @@ class AltitudeHypercubeVisualizer(AbstractHypercubeVisualizer): ...@@ -342,8 +342,8 @@ class AltitudeHypercubeVisualizer(AbstractHypercubeVisualizer):
title += ' until starting_year={}'.format(self.last_starting_year) title += ' until starting_year={}'.format(self.last_starting_year)
title += ' with {} test'.format(get_display_name_from_object_type(self.trend_test_class)) title += ' with {} test'.format(get_display_name_from_object_type(self.trend_test_class))
if self.reduce_strength_array: if self.reduce_strength_array:
title += '\nEvolution of the quantile {} every {} years'.format(AbstractGevChangePointTest.quantile_for_strength, title += '\nEvolution of the quantile {} every {} years'.format(AbstractGevTrendTest.quantile_for_strength,
AbstractGevChangePointTest.nb_years_for_quantile_evolution) AbstractGevTrendTest.nb_years_for_quantile_evolution)
if set: if set:
plt.suptitle(title) plt.suptitle(title)
return title return title
......
...@@ -12,7 +12,7 @@ from experiment.meteo_france_data.scm_models_data.visualization.hypercube_visual ...@@ -12,7 +12,7 @@ from experiment.meteo_france_data.scm_models_data.visualization.hypercube_visual
load_altitude_visualizer, load_quantity_visualizer load_altitude_visualizer, load_quantity_visualizer
from experiment.meteo_france_data.scm_models_data.visualization.study_visualization.main_study_visualizer import \ from experiment.meteo_france_data.scm_models_data.visualization.study_visualization.main_study_visualizer import \
ALL_ALTITUDES, SCM_STUDIES ALL_ALTITUDES, SCM_STUDIES
from experiment.trend_analysis.univariate_test.abstract_gev_change_point_test import GevLocationChangePointTest from experiment.trend_analysis.univariate_test.gev_trend_test_one_parameter import GevLocationTrendTest
def get_fast_parameters(altitude=1800): def get_fast_parameters(altitude=1800):
...@@ -21,7 +21,7 @@ def get_fast_parameters(altitude=1800): ...@@ -21,7 +21,7 @@ def get_fast_parameters(altitude=1800):
nb_data_reduced_for_speed = 4 nb_data_reduced_for_speed = 4
altitudes = [altitude] altitudes = [altitude]
last_starting_year = None last_starting_year = None
trend_test_class = GevLocationChangePointTest trend_test_class = GevLocationTrendTest
return altitudes, last_starting_year, nb_data_reduced_for_speed, only_first_one, save_to_file, trend_test_class return altitudes, last_starting_year, nb_data_reduced_for_speed, only_first_one, save_to_file, trend_test_class
......
...@@ -11,7 +11,7 @@ from experiment.meteo_france_data.scm_models_data.visualization.hypercube_visual ...@@ -11,7 +11,7 @@ from experiment.meteo_france_data.scm_models_data.visualization.hypercube_visual
load_altitude_visualizer, load_quantity_visualizer load_altitude_visualizer, load_quantity_visualizer
from experiment.meteo_france_data.scm_models_data.visualization.study_visualization.main_study_visualizer import \ from experiment.meteo_france_data.scm_models_data.visualization.study_visualization.main_study_visualizer import \
ALL_ALTITUDES, SCM_STUDIES ALL_ALTITUDES, SCM_STUDIES
from experiment.trend_analysis.univariate_test.abstract_gev_change_point_test import GevLocationChangePointTest from experiment.trend_analysis.univariate_test.gev_trend_test_one_parameter import GevLocationTrendTest
def get_fast_parameters(altitude=None): def get_fast_parameters(altitude=None):
...@@ -23,7 +23,7 @@ def get_fast_parameters(altitude=None): ...@@ -23,7 +23,7 @@ def get_fast_parameters(altitude=None):
else: else:
altitudes = [ALL_ALTITUDES[3], ALL_ALTITUDES[-7]] altitudes = [ALL_ALTITUDES[3], ALL_ALTITUDES[-7]]
last_starting_year = None last_starting_year = None
trend_test_class = GevLocationChangePointTest trend_test_class = GevLocationTrendTest
return altitudes, last_starting_year, nb_data_reduced_for_speed, only_first_one, save_to_file, trend_test_class return altitudes, last_starting_year, nb_data_reduced_for_speed, only_first_one, save_to_file, trend_test_class
......
...@@ -11,7 +11,7 @@ from experiment.meteo_france_data.scm_models_data.visualization.hypercube_visual ...@@ -11,7 +11,7 @@ from experiment.meteo_france_data.scm_models_data.visualization.hypercube_visual
load_altitude_visualizer, load_quantity_visualizer load_altitude_visualizer, load_quantity_visualizer
from experiment.meteo_france_data.scm_models_data.visualization.study_visualization.main_study_visualizer import \ from experiment.meteo_france_data.scm_models_data.visualization.study_visualization.main_study_visualizer import \
ALL_ALTITUDES, SCM_STUDIES ALL_ALTITUDES, SCM_STUDIES
from experiment.trend_analysis.univariate_test.abstract_gev_change_point_test import GevLocationChangePointTest from experiment.trend_analysis.univariate_test.gev_trend_test_one_parameter import GevLocationTrendTest
def get_full_parameters(altitude=None): def get_full_parameters(altitude=None):
...@@ -24,7 +24,7 @@ def get_full_parameters(altitude=None): ...@@ -24,7 +24,7 @@ def get_full_parameters(altitude=None):
altitudes = ALL_ALTITUDES[3:-6] altitudes = ALL_ALTITUDES[3:-6]
first_starting_year = 1958 + 10 first_starting_year = 1958 + 10
last_starting_year = 2017 - 10 last_starting_year = 2017 - 10
trend_test_class = GevLocationChangePointTest trend_test_class = GevLocationTrendTest
return altitudes, first_starting_year, last_starting_year, nb_data_reduced_for_speed, only_first_one, save_to_file, trend_test_class return altitudes, first_starting_year, last_starting_year, nb_data_reduced_for_speed, only_first_one, save_to_file, trend_test_class
......
import time import time
from experiment.trend_analysis.abstract_score import MannKendall, WeigthedScore, MeanScore, MedianScore from experiment.trend_analysis.abstract_score import MannKendall, WeigthedScore, MeanScore, MedianScore
from experiment.trend_analysis.univariate_test.abstract_gev_change_point_test import GevLocationChangePointTest, \ from experiment.trend_analysis.univariate_test.abstract_gev_trend_test import GevLocationChangePointTest, \
GevScaleChangePointTest, GevShapeChangePointTest GevScaleChangePointTest, GevShapeChangePointTest
from experiment.trend_analysis.univariate_test.abstract_univariate_test import MannKendallTrendTest from experiment.trend_analysis.univariate_test.abstract_univariate_test import MannKendallTrendTest
from experiment.meteo_france_data.scm_models_data.safran.safran import ExtendedSafranTotalPrecip from experiment.meteo_france_data.scm_models_data.safran.safran import ExtendedSafranTotalPrecip
......
...@@ -13,7 +13,7 @@ from experiment.meteo_france_data.scm_models_data.safran.safran import SafranSno ...@@ -13,7 +13,7 @@ from experiment.meteo_france_data.scm_models_data.safran.safran import SafranSno
from collections import OrderedDict from collections import OrderedDict
from experiment.trend_analysis.univariate_test.abstract_gev_change_point_test import GevLocationChangePointTest from experiment.trend_analysis.univariate_test.gev_trend_test_one_parameter import GevLocationTrendTest
from spatio_temporal_dataset.coordinates.transformed_coordinates.transformation.uniform_normalization import \ from spatio_temporal_dataset.coordinates.transformed_coordinates.transformation.uniform_normalization import \
BetweenZeroAndOneNormalization, BetweenMinusOneAndOneNormalization BetweenZeroAndOneNormalization, BetweenMinusOneAndOneNormalization
from utils import get_display_name_from_object_type from utils import get_display_name_from_object_type
...@@ -209,7 +209,7 @@ def trend_analysis(): ...@@ -209,7 +209,7 @@ def trend_analysis():
complete_non_stationary_trend_analysis=True) complete_non_stationary_trend_analysis=True)
# study_visualizer.visualize_all_independent_temporal_trend() # study_visualizer.visualize_all_independent_temporal_trend()
# study_visualizer.visualize_temporal_trend_relevance() # study_visualizer.visualize_temporal_trend_relevance()
study_visualizer.df_trend_spatio_temporal(GevLocationChangePointTest, study_visualizer.df_trend_spatio_temporal(GevLocationTrendTest,
starting_years=[1958, 1980], nb_massif_for_fast_mode=2) starting_years=[1958, 1980], nb_massif_for_fast_mode=2)
......
...@@ -15,7 +15,7 @@ import seaborn as sns ...@@ -15,7 +15,7 @@ import seaborn as sns
from experiment.meteo_france_data.scm_models_data.abstract_extended_study import AbstractExtendedStudy from experiment.meteo_france_data.scm_models_data.abstract_extended_study import AbstractExtendedStudy
from experiment.trend_analysis.abstract_score import MeanScore, AbstractTrendScore from experiment.trend_analysis.abstract_score import MeanScore, AbstractTrendScore
from experiment.meteo_france_data.scm_models_data.abstract_study import AbstractStudy from experiment.meteo_france_data.scm_models_data.abstract_study import AbstractStudy
from experiment.trend_analysis.univariate_test.abstract_gev_change_point_test import AbstractGevChangePointTest from experiment.trend_analysis.univariate_test.abstract_gev_trend_test import AbstractGevTrendTest
from experiment.trend_analysis.univariate_test.abstract_univariate_test import AbstractUnivariateTest from experiment.trend_analysis.univariate_test.abstract_univariate_test import AbstractUnivariateTest
from experiment.trend_analysis.non_stationary_trends import \ from experiment.trend_analysis.non_stationary_trends import \
ConditionalIndedendenceLocationTrendTest, MaxStableLocationTrendTest, IndependenceLocationTrendTest ConditionalIndedendenceLocationTrendTest, MaxStableLocationTrendTest, IndependenceLocationTrendTest
......
...@@ -2,7 +2,7 @@ from experiment.meteo_france_data.scm_models_data.visualization.study_visualizat ...@@ -2,7 +2,7 @@ from experiment.meteo_france_data.scm_models_data.visualization.study_visualizat
ALL_ALTITUDES_WITH_20_STATIONS_AT_LEAST ALL_ALTITUDES_WITH_20_STATIONS_AT_LEAST
from experiment.meteo_france_data.stations_data.visualization.comparisons_visualization.comparisons_visualization import \ from experiment.meteo_france_data.stations_data.visualization.comparisons_visualization.comparisons_visualization import \
ComparisonsVisualization, path_backup_csv_file ComparisonsVisualization, path_backup_csv_file
from experiment.trend_analysis.univariate_test.abstract_gev_change_point_test import GevLocationChangePointTest, \ from experiment.trend_analysis.univariate_test.abstract_gev_trend_test import GevLocationChangePointTest, \
GevScaleChangePointTest, GevShapeChangePointTest GevScaleChangePointTest, GevShapeChangePointTest
......
from experiment.meteo_france_data.scm_models_data.visualization.study_visualization.main_study_visualizer import \ from experiment.meteo_france_data.scm_models_data.visualization.study_visualization.main_study_visualizer import \
ALL_ALTITUDES_WITH_20_STATIONS_AT_LEAST, ALL_ALTITUDES ALL_ALTITUDES
from experiment.meteo_france_data.stations_data.visualization.comparisons_visualization.comparisons_visualization import \ from experiment.meteo_france_data.stations_data.visualization.comparisons_visualization.comparisons_visualization import \
ComparisonsVisualization, path_backup_csv_file ComparisonsVisualization
from experiment.trend_analysis.univariate_test.abstract_gev_change_point_test import GevLocationChangePointTest, \
GevScaleChangePointTest, GevShapeChangePointTest
# Create the map with the average error per massif # Create the map with the average error per massif
......
...@@ -14,7 +14,7 @@ from experiment.meteo_france_data.scm_models_data.visualization.study_visualizat ...@@ -14,7 +14,7 @@ from experiment.meteo_france_data.scm_models_data.visualization.study_visualizat
VisualizationParameters VisualizationParameters
from experiment.meteo_france_data.stations_data.comparison_analysis import ComparisonAnalysis, MASSIF_COLUMN_NAME, \ from experiment.meteo_france_data.stations_data.comparison_analysis import ComparisonAnalysis, MASSIF_COLUMN_NAME, \
REANALYSE_STR, ALTITUDE_COLUMN_NAME, STATION_COLUMN_NAME REANALYSE_STR, ALTITUDE_COLUMN_NAME, STATION_COLUMN_NAME
from experiment.trend_analysis.univariate_test.abstract_gev_change_point_test import GevLocationChangePointTest from experiment.trend_analysis.univariate_test.abstract_gev_trend_test import GevLocationChangePointTest
from experiment.trend_analysis.univariate_test.abstract_univariate_test import AbstractUnivariateTest from experiment.trend_analysis.univariate_test.abstract_univariate_test import AbstractUnivariateTest
from experiment.trend_analysis.univariate_test.utils import compute_gev_change_point_test_results from experiment.trend_analysis.univariate_test.utils import compute_gev_change_point_test_results
from extreme_estimator.extreme_models.result_from_fit import ResultFromIsmev from extreme_estimator.extreme_models.result_from_fit import ResultFromIsmev
......
...@@ -2,8 +2,8 @@ import time ...@@ -2,8 +2,8 @@ import time
from experiment.meteo_france_data.scm_models_data.visualization.hypercube_visualization.altitude_year_hypercube_visualizer import \ from experiment.meteo_france_data.scm_models_data.visualization.hypercube_visualization.altitude_year_hypercube_visualizer import \
Altitude_Hypercube_Year_Visualizer Altitude_Hypercube_Year_Visualizer
from experiment.trend_analysis.univariate_test.abstract_gev_change_point_test import GevLocationChangePointTest, \ from experiment.trend_analysis.univariate_test.gev_trend_test_one_parameter import GevScaleTrendTest, \
GevScaleChangePointTest GevLocationTrendTest
""" """
Visualize the 0.99 quantile initial value and its evolution Visualize the 0.99 quantile initial value and its evolution
...@@ -15,14 +15,14 @@ def main_fast_spatial_risk_evolution(): ...@@ -15,14 +15,14 @@ def main_fast_spatial_risk_evolution():
for altitude in FULL_ALTITUDES[-1:]: for altitude in FULL_ALTITUDES[-1:]:
vizualiser = get_full_altitude_visualizer(Altitude_Hypercube_Year_Visualizer, altitude=altitude, 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) trend_test_class=GevScaleTrendTest)
# vizualiser.save_to_file = False # vizualiser.save_to_file = False
vizualiser.visualize_massif_trend_test_one_altitude() vizualiser.visualize_massif_trend_test_one_altitude()
def main_full_spatial_risk_evolution(): def main_full_spatial_risk_evolution():
for altitude in FULL_ALTITUDES[:]: for altitude in FULL_ALTITUDES[:]:
for trend_test_class in [GevLocationChangePointTest, GevScaleChangePointTest][:]: for trend_test_class in [GevLocationTrendTest, GevScaleTrendTest][:]:
vizualiser = get_full_altitude_visualizer(Altitude_Hypercube_Year_Visualizer, altitude=altitude, 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=trend_test_class) trend_test_class=trend_test_class)
......
...@@ -7,7 +7,7 @@ from experiment.meteo_france_data.scm_models_data.visualization.hypercube_visual ...@@ -7,7 +7,7 @@ from experiment.meteo_france_data.scm_models_data.visualization.hypercube_visual
get_full_parameters get_full_parameters
from experiment.meteo_france_data.scm_models_data.visualization.hypercube_visualization.utils_hypercube import \ from experiment.meteo_france_data.scm_models_data.visualization.hypercube_visualization.utils_hypercube import \
load_altitude_visualizer load_altitude_visualizer
from experiment.trend_analysis.univariate_test.abstract_gev_change_point_test import GevScaleChangePointTest, \ from experiment.trend_analysis.univariate_test.abstract_gev_trend_test import GevScaleChangePointTest, \
GevLocationChangePointTest GevLocationChangePointTest
FULL_ALTITUDES = [900, 1200, 1500, 1800, 2100, 2400, 2700, 3000] FULL_ALTITUDES = [900, 1200, 1500, 1800, 2100, 2400, 2700, 3000]
......
...@@ -19,7 +19,7 @@ from spatio_temporal_dataset.spatio_temporal_observations.abstract_spatio_tempor ...@@ -19,7 +19,7 @@ from spatio_temporal_dataset.spatio_temporal_observations.abstract_spatio_tempor
AbstractSpatioTemporalObservations AbstractSpatioTemporalObservations
class AbstractGevChangePointTest(AbstractUnivariateTest): class AbstractGevTrendTest(AbstractUnivariateTest):
RRunTimeError_TREND = 'R RunTimeError trend' RRunTimeError_TREND = 'R RunTimeError trend'
# I should use the quantile from the Eurocode for the buildings # I should use the quantile from the Eurocode for the buildings
quantile_for_strength = 0.98 quantile_for_strength = 0.98
...@@ -34,15 +34,11 @@ class AbstractGevChangePointTest(AbstractUnivariateTest): ...@@ -34,15 +34,11 @@ class AbstractGevChangePointTest(AbstractUnivariateTest):
self.coordinates = AbstractTemporalCoordinates.from_df(df, self.coordinates = AbstractTemporalCoordinates.from_df(df,
transformation_class=CenteredScaledNormalization) # type: AbstractTemporalCoordinates transformation_class=CenteredScaledNormalization) # type: AbstractTemporalCoordinates
self.dataset = AbstractDataset(observations=observations, coordinates=self.coordinates) self.dataset = AbstractDataset(observations=observations, coordinates=self.coordinates)
# For the moment, we chose:
# -the 0.99 quantile (even if for building maybe we should use the 1/50 so 0.98 quantile)
# -to see the evolution between two successive years
try: try:
# Fit stationary model # Fit stationary model
self.stationary_estimator = LinearMarginEstimator(self.dataset, StationaryStationModel(self.coordinates)) self.stationary_estimator = LinearMarginEstimator(self.dataset, StationaryStationModel(self.coordinates))
self.stationary_estimator.fit() self.stationary_estimator.fit()
# Fit non stationary model # Fit non stationary model
non_stationary_model = non_stationary_model_class(self.coordinates, starting_point=self.starting_year) non_stationary_model = non_stationary_model_class(self.coordinates, starting_point=self.starting_year)
self.non_stationary_estimator = LinearMarginEstimator(self.dataset, non_stationary_model) self.non_stationary_estimator = LinearMarginEstimator(self.dataset, non_stationary_model)
...@@ -51,6 +47,8 @@ class AbstractGevChangePointTest(AbstractUnivariateTest): ...@@ -51,6 +47,8 @@ class AbstractGevChangePointTest(AbstractUnivariateTest):
except SafeRunException: except SafeRunException:
self.crashed = True self.crashed = True
# Type of trends
@classmethod @classmethod
def real_trend_types(cls): def real_trend_types(cls):
return super().real_trend_types() + [cls.RRunTimeError_TREND] return super().real_trend_types() + [cls.RRunTimeError_TREND]
...@@ -63,12 +61,25 @@ class AbstractGevChangePointTest(AbstractUnivariateTest): ...@@ -63,12 +61,25 @@ class AbstractGevChangePointTest(AbstractUnivariateTest):
return real_trend_types return real_trend_types
@property @property
def likelihood_ratio(self): def test_trend_type(self) -> str:
return self.non_stationary_deviance - self.stationary_deviance if self.crashed:
return self.RRunTimeError_TREND
else:
return super().test_trend_type
# Likelihood ratio test
@property @property
def non_stationary_constant_gev_params(self) -> GevParams: def is_significant(self) -> bool:
return self.non_stationary_estimator.result_from_fit.constant_gev_params return self.likelihood_ratio > chi2.ppf(q=1 - self.SIGNIFICANCE_LEVEL, df=self.degree_freedom_chi2)
@property
def degree_freedom_chi2(self) -> int:
raise NotImplementedError
@property
def likelihood_ratio(self):
return self.non_stationary_deviance - self.stationary_deviance
@property @property
def stationary_deviance(self): def stationary_deviance(self):
...@@ -91,35 +102,11 @@ class AbstractGevChangePointTest(AbstractUnivariateTest): ...@@ -91,35 +102,11 @@ class AbstractGevChangePointTest(AbstractUnivariateTest):
else: else:
return self.non_stationary_estimator.result_from_fit.nllh return self.non_stationary_estimator.result_from_fit.nllh
@property # Evolution of the GEV parameters and corresponding quantiles
def is_significant(self) -> bool:
return self.likelihood_ratio > chi2.ppf(q=1 - self.SIGNIFICANCE_LEVEL, df=1)
# Add a trend type that correspond to run that crashed
# @classmethod
# def trend_type_to_style(cls):
# trend_type_to_style = super().trend_type_to_style()
# trend_type_to_style[cls.RRunTimeError_TREND] = 'b:'
# return trend_type_to_style
@property
def test_trend_type(self) -> str:
if self.crashed:
return self.RRunTimeError_TREND
else:
return super().test_trend_type
def get_coef(self, estimator, coef_name):
return estimator.margin_function_fitted.get_coef(self.gev_param_name, coef_name)
@property @property
def non_stationary_intercept_coef(self): def non_stationary_constant_gev_params(self) -> GevParams:
return self.get_coef(self.non_stationary_estimator, LinearCoef.INTERCEPT_NAME) return self.non_stationary_estimator.result_from_fit.constant_gev_params
@property
def non_stationary_linear_coef(self):
return self.get_coef(self.non_stationary_estimator, AbstractCoordinates.COORDINATE_T)
@property @property
def test_trend_slope_strength(self): def test_trend_slope_strength(self):
...@@ -140,43 +127,5 @@ class AbstractGevChangePointTest(AbstractUnivariateTest): ...@@ -140,43 +127,5 @@ class AbstractGevChangePointTest(AbstractUnivariateTest):
else: else:
return self.non_stationary_constant_gev_params.quantile(p=self.quantile_for_strength) return self.non_stationary_constant_gev_params.quantile(p=self.quantile_for_strength)
@property
def percentage_of_change_per_year(self):
ratio = np.abs(self.non_stationary_linear_coef) / np.abs(self.non_stationary_intercept_coef)
scaled_ratio = ratio * self.coordinates.transformed_distance_between_two_successive_years
percentage_of_change_per_year = 100 * scaled_ratio
return percentage_of_change_per_year[0]
@property
def test_sign(self) -> int:
return np.sign(self.non_stationary_linear_coef)
class GevLocationChangePointTest(AbstractGevChangePointTest):
def __init__(self, years, maxima, starting_year):
super().__init__(years, maxima, starting_year,
NonStationaryLocationStationModel, GevParams.LOC)
def _slope_strength(self):
return self.non_stationary_constant_gev_params.quantile_strength_evolution_ratio(p=self.quantile_for_strength,
mu1=self.non_stationary_linear_coef)
class GevScaleChangePointTest(AbstractGevChangePointTest):
def __init__(self, years, maxima, starting_year):
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):
def __init__(self, years, maxima, starting_year):
super().__init__(years, maxima, starting_year,
NonStationaryShapeStationModel, GevParams.SHAPE)
from experiment.trend_analysis.univariate_test.abstract_gev_trend_test import AbstractGevTrendTest
from extreme_estimator.extreme_models.margin_model.temporal_linear_margin_model import StationaryStationModel, \
NonStationaryLocationStationModel, NonStationaryScaleStationModel, NonStationaryShapeStationModel
from extreme_estimator.margin_fits.gev.gev_params import GevParams
import numpy as np
from spatio_temporal_dataset.coordinates.abstract_coordinates import AbstractCoordinates
class GevTrendTestOneParameter(AbstractGevTrendTest):
@property
def degree_freedom_chi2(self) -> int:
return 1
@property
def test_sign(self) -> int:
return np.sign(self.non_stationary_linear_coef)
@property
def non_stationary_linear_coef(self):
return self.non_stationary_estimator.margin_function_fitted.get_coef(self.gev_param_name,
AbstractCoordinates.COORDINATE_T)
class GevLocationTrendTest(GevTrendTestOneParameter):
def __init__(self, years, maxima, starting_year):
super().__init__(years, maxima, starting_year,
NonStationaryLocationStationModel, GevParams.LOC)
def _slope_strength(self):
return self.non_stationary_constant_gev_params.quantile_strength_evolution_ratio(p=self.quantile_for_strength,
mu1=self.non_stationary_linear_coef)
class GevScaleTrendTest(GevTrendTestOneParameter):
def __init__(self, years, maxima, starting_year):
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 GevShapeTrendTest(GevTrendTestOneParameter):
def __init__(self, years, maxima, starting_year):
super().__init__(years, maxima, starting_year,
NonStationaryShapeStationModel, GevParams.SHAPE)
...@@ -2,13 +2,13 @@ from multiprocessing.pool import Pool ...@@ -2,13 +2,13 @@ from multiprocessing.pool import Pool
import numpy as np import numpy as np
from experiment.trend_analysis.univariate_test.abstract_gev_change_point_test import AbstractGevChangePointTest from experiment.trend_analysis.univariate_test.abstract_gev_trend_test import AbstractGevTrendTest
from utils import NB_CORES from utils import NB_CORES
def compute_gev_change_point_test_result(smooth_maxima, starting_year, trend_test_class, years): def compute_gev_change_point_test_result(smooth_maxima, starting_year, trend_test_class, years):
trend_test = trend_test_class(years, smooth_maxima, starting_year) # type: AbstractGevChangePointTest trend_test = trend_test_class(years, smooth_maxima, starting_year) # type: AbstractGevTrendTest
assert isinstance(trend_test, AbstractGevChangePointTest) assert isinstance(trend_test, AbstractGevTrendTest)
return trend_test.test_trend_type, trend_test.test_trend_slope_strength, trend_test.non_stationary_nllh, trend_test.test_trend_constant_quantile, trend_test.non_stationary_deviance, trend_test.stationary_deviance return trend_test.test_trend_type, trend_test.test_trend_slope_strength, trend_test.non_stationary_nllh, trend_test.test_trend_constant_quantile, trend_test.non_stationary_deviance, trend_test.stationary_deviance
......
...@@ -12,7 +12,7 @@ from experiment.meteo_france_data.scm_models_data.visualization.study_visualizat ...@@ -12,7 +12,7 @@ from experiment.meteo_france_data.scm_models_data.visualization.study_visualizat
study_iterator, study_iterator_global, SCM_STUDIES, ALL_ALTITUDES study_iterator, study_iterator_global, SCM_STUDIES, ALL_ALTITUDES
from experiment.meteo_france_data.scm_models_data.visualization.study_visualization.study_visualizer import \ from experiment.meteo_france_data.scm_models_data.visualization.study_visualization.study_visualizer import \
StudyVisualizer StudyVisualizer
from experiment.trend_analysis.univariate_test.abstract_gev_change_point_test import GevLocationChangePointTest from experiment.trend_analysis.univariate_test.gev_trend_test_one_parameter import GevLocationTrendTest
from utils import get_display_name_from_object_type from utils import get_display_name_from_object_type
...@@ -22,7 +22,8 @@ class TestSCMAllStudy(unittest.TestCase): ...@@ -22,7 +22,8 @@ class TestSCMAllStudy(unittest.TestCase):
for study_class in [ExtendedSafranSnowfall]: for study_class in [ExtendedSafranSnowfall]:
for study in study_iterator(study_class, only_first_one=True, verbose=False): for study in study_iterator(study_class, only_first_one=True, verbose=False):
study_visualizer = StudyVisualizer(study, show=False, save_to_file=False, multiprocessing=True) study_visualizer = StudyVisualizer(study, show=False, save_to_file=False, multiprocessing=True)
study_visualizer.df_trend_spatio_temporal(GevLocationChangePointTest, [1958, 1959, 1960], nb_massif_for_change_point_test=3, study_visualizer.df_trend_spatio_temporal(GevLocationTrendTest, [1958, 1959, 1960],
nb_massif_for_change_point_test=3,
sample_one_massif_from_each_region=False) sample_one_massif_from_each_region=False)
self.assertTrue(True) self.assertTrue(True)
......
...@@ -12,7 +12,7 @@ from experiment.meteo_france_data.scm_models_data.visualization.study_visualizat ...@@ -12,7 +12,7 @@ from experiment.meteo_france_data.scm_models_data.visualization.study_visualizat
study_iterator study_iterator
from experiment.meteo_france_data.scm_models_data.visualization.study_visualization.study_visualizer import \ from experiment.meteo_france_data.scm_models_data.visualization.study_visualization.study_visualizer import \
StudyVisualizer StudyVisualizer
from experiment.trend_analysis.univariate_test.abstract_gev_change_point_test import GevLocationChangePointTest from experiment.trend_analysis.univariate_test.gev_trend_test_one_parameter import GevLocationTrendTest
from extreme_estimator.extreme_models.utils import set_seed_for_test from extreme_estimator.extreme_models.utils import set_seed_for_test
...@@ -27,7 +27,7 @@ class TestHypercube(unittest.TestCase): ...@@ -27,7 +27,7 @@ class TestHypercube(unittest.TestCase):
for study in study_iterator(study_class=SafranSnowfall, only_first_one=False, for study in study_iterator(study_class=SafranSnowfall, only_first_one=False,
altitudes=altitudes, verbose=self.DISPLAY)] altitudes=altitudes, verbose=self.DISPLAY)]
self.altitude_to_visualizer = OrderedDict(zip(altitudes, visualizers)) self.altitude_to_visualizer = OrderedDict(zip(altitudes, visualizers))
self.trend_test_class = GevLocationChangePointTest self.trend_test_class = GevLocationTrendTest
self.nb_data_reduced_for_speed = 4 self.nb_data_reduced_for_speed = 4
# def test_altitude_hypercube_visualizer(self): # def test_altitude_hypercube_visualizer(self):
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment