diff --git a/experiment/meteo_france_data/scm_models_data/crocus/taline_data.py b/experiment/meteo_france_data/scm_models_data/crocus/taline_data.py index 681fe9241b5204b601d9a3a64c6b9d3b26ccee1b..183b0818b3cb72c8b122d5f92fcbce4cc5ce4a21 100644 --- a/experiment/meteo_france_data/scm_models_data/crocus/taline_data.py +++ b/experiment/meteo_france_data/scm_models_data/crocus/taline_data.py @@ -12,11 +12,11 @@ study_class = CrocusDepth all_days = study_class(altitude=0).all_days altitude_to_queyras_depth = OrderedDict() for altitude in ALTITUDES[:]: - study = study_class(altitude=altitude) + study = study_class(altitude=altitude, orientation=90.0) if massif_name in study.study_massif_names: idx_queyras = study.study_massif_names.index(massif_name) queyras_all_daily_series = study.all_daily_series[:, idx_queyras] altitude_to_queyras_depth[altitude] = queyras_all_daily_series df = pd.DataFrame.from_dict(altitude_to_queyras_depth) df.index = all_days -df.to_csv('{}_{}.csv'.format(massif_name, get_display_name_from_object_type(study_class))) \ No newline at end of file +df.to_csv('{}_{}_90.csv'.format(massif_name, get_display_name_from_object_type(study_class))) \ No newline at end of file diff --git a/experiment/meteo_france_data/scm_models_data/visualization/hypercube_visualization/altitude_hypercube_visualizer.py b/experiment/meteo_france_data/scm_models_data/visualization/hypercube_visualization/altitude_hypercube_visualizer.py index 1575059258658cf3fa5a6f20c1a112f84720c8e4..fc92b91c72b1b2afa87155fb359de09c35b09f7d 100644 --- a/experiment/meteo_france_data/scm_models_data/visualization/hypercube_visualization/altitude_hypercube_visualizer.py +++ b/experiment/meteo_france_data/scm_models_data/visualization/hypercube_visualization/altitude_hypercube_visualizer.py @@ -512,7 +512,7 @@ class AltitudeHypercubeVisualizer(AbstractHypercubeVisualizer): show_or_save_to_file=True, poster_plot=False, write_text_on_massif=True, - display_trend_color=False): + display_trend_color=True): last_title = '' for subtitle, reduction_function in self.subtitle_to_reduction_function(self.index_reduction, level=self.massif_index_level, diff --git a/experiment/paper1_steps/poster_EVAN2019/some_experiment_EVAN.py b/experiment/paper1_steps/poster_EVAN2019/some_experiment_EVAN.py new file mode 100644 index 0000000000000000000000000000000000000000..e4c731a1952208f6439d598b133472a3279c60cc --- /dev/null +++ b/experiment/paper1_steps/poster_EVAN2019/some_experiment_EVAN.py @@ -0,0 +1,34 @@ +from experiment.meteo_france_data.scm_models_data.crocus.crocus import CrocusDepth, CrocusSweTotal, CrocusSwe3Days +from experiment.meteo_france_data.scm_models_data.safran.safran import SafranSnowfall +from experiment.meteo_france_data.scm_models_data.visualization.hypercube_visualization.altitude_year_hypercube_visualizer import \ + Altitude_Hypercube_Year_Visualizer, AltitudeHypercubeVisualizerWithoutTrendType +from experiment.meteo_france_data.scm_models_data.visualization.study_visualization.main_study_visualizer import \ + SCM_STUDIES +from experiment.trend_analysis.univariate_test.abstract_comparison_non_stationary_model import ComparisonAgainstMu, \ + ComparisonAgainstSigma +from experiment.trend_analysis.univariate_test.gev_trend_test_one_parameter import GevScaleTrendTest, \ + GevLocationTrendTest +from experiment.trend_analysis.univariate_test.gev_trend_test_two_parameters import GevLocationAndScaleTrendTest +from experiment.paper1_steps.utils import get_full_altitude_visualizer + +POSTER_ALTITUDES = [900, 1800, 2700] +import matplotlib as mpl + +mpl.rcParams['hatch.linewidth'] = 0.3 + + +def main_non_stationary_model_comparison(): + stop_loop = False + for altitude in POSTER_ALTITUDES[:]: + for trend_test_class in [GevLocationTrendTest, GevScaleTrendTest, GevLocationAndScaleTrendTest, ComparisonAgainstMu, ComparisonAgainstSigma][::-1]: + vizualiser = get_full_altitude_visualizer(Altitude_Hypercube_Year_Visualizer, altitude=altitude, + exact_starting_year=1958, reduce_strength_array=False, + trend_test_class=trend_test_class, + ) + # vizualiser.save_to_file = False + vizualiser.visualize_massif_trend_test_one_altitude(poster_plot=True, write_text_on_massif=False) + if stop_loop: + return + +if __name__ == '__main__': + main_non_stationary_model_comparison() diff --git a/experiment/trend_analysis/univariate_test/abstract_comparison_non_stationary_model.py b/experiment/trend_analysis/univariate_test/abstract_comparison_non_stationary_model.py new file mode 100644 index 0000000000000000000000000000000000000000..cb569655c2e2cf5b918d83a1755148ad946a3735 --- /dev/null +++ b/experiment/trend_analysis/univariate_test/abstract_comparison_non_stationary_model.py @@ -0,0 +1,30 @@ +from experiment.trend_analysis.univariate_test.abstract_gev_trend_test import AbstractGevTrendTest +from experiment.trend_analysis.univariate_test.gev_trend_test_two_parameters import GevLocationAndScaleTrendTest +from extreme_estimator.extreme_models.margin_model.temporal_linear_margin_model import \ + NonStationaryLocationAndScaleModel, NonStationaryLocationStationModel, NonStationaryScaleStationModel + + +class AbstractComparisonNonStationaryModel(AbstractGevTrendTest): + + @property + def degree_freedom_chi2(self) -> int: + raise NotImplementedError + + +class AbstractComparisonNonStationaryModelOneParameter(AbstractComparisonNonStationaryModel): + + @property + def degree_freedom_chi2(self) -> int: + return 1 + + +class ComparisonAgainstMu(AbstractComparisonNonStationaryModelOneParameter, GevLocationAndScaleTrendTest): + + def __init__(self, years, maxima, starting_year): + super().__init__(years, maxima, starting_year, stationary_model_class=NonStationaryLocationStationModel) + + +class ComparisonAgainstSigma(AbstractComparisonNonStationaryModelOneParameter, GevLocationAndScaleTrendTest): + + def __init__(self, years, maxima, starting_year): + super().__init__(years, maxima, starting_year, stationary_model_class=NonStationaryScaleStationModel) diff --git a/experiment/trend_analysis/univariate_test/abstract_gev_trend_test.py b/experiment/trend_analysis/univariate_test/abstract_gev_trend_test.py index 80fd5214c12317107709bcc7163c5052f54317f5..deae22fc07f4e43c8b80bf2f8338279e3ea728d6 100644 --- a/experiment/trend_analysis/univariate_test/abstract_gev_trend_test.py +++ b/experiment/trend_analysis/univariate_test/abstract_gev_trend_test.py @@ -25,7 +25,7 @@ class AbstractGevTrendTest(AbstractUnivariateTest): quantile_for_strength = 0.98 nb_years_for_quantile_evolution = 10 - def __init__(self, years, maxima, starting_year, non_stationary_model_class): + def __init__(self, years, maxima, starting_year, non_stationary_model_class, stationary_model_class=StationaryStationModel): super().__init__(years, maxima, starting_year) df = pd.DataFrame({AbstractCoordinates.COORDINATE_T: years}) df_maxima_gev = pd.DataFrame(maxima, index=df.index) @@ -35,8 +35,10 @@ class AbstractGevTrendTest(AbstractUnivariateTest): self.dataset = AbstractDataset(observations=observations, coordinates=self.coordinates) try: + # todo: rename stationary -> standard, non-stationary -> more complex model # Fit stationary model - self.stationary_estimator = LinearMarginEstimator(self.dataset, StationaryStationModel(self.coordinates)) + stationary_model = stationary_model_class(self.coordinates, starting_point=self.starting_year) + self.stationary_estimator = LinearMarginEstimator(self.dataset, stationary_model) self.stationary_estimator.fit() # Fit non stationary model non_stationary_model = non_stationary_model_class(self.coordinates, starting_point=self.starting_year) diff --git a/experiment/trend_analysis/univariate_test/gev_trend_test_two_parameters.py b/experiment/trend_analysis/univariate_test/gev_trend_test_two_parameters.py index 386ed310cd1b9527f6047acaeae25ff40f901f7d..c2b0cbcaa6da16da407db2483c0d9bad2b34f924 100644 --- a/experiment/trend_analysis/univariate_test/gev_trend_test_two_parameters.py +++ b/experiment/trend_analysis/univariate_test/gev_trend_test_two_parameters.py @@ -1,6 +1,6 @@ from experiment.trend_analysis.univariate_test.abstract_gev_trend_test import AbstractGevTrendTest from extreme_estimator.extreme_models.margin_model.temporal_linear_margin_model import \ - NonStationaryLocationAndScaleModel + NonStationaryLocationAndScaleModel, StationaryStationModel from extreme_estimator.margin_fits.gev.gev_params import GevParams @@ -13,9 +13,9 @@ class GevTrendTestTwoParameters(AbstractGevTrendTest): class GevLocationAndScaleTrendTest(GevTrendTestTwoParameters): - def __init__(self, years, maxima, starting_year): + def __init__(self, years, maxima, starting_year, stationary_model_class=StationaryStationModel): super().__init__(years, maxima, starting_year, - NonStationaryLocationAndScaleModel) + NonStationaryLocationAndScaleModel, stationary_model_class=stationary_model_class) @property def mu1(self):