From 8515b9b4dc84e9561d188bdfe0f44bbc71b311e6 Mon Sep 17 00:00:00 2001 From: Le Roux Erwan <erwan.le-roux@irstea.fr> Date: Fri, 19 Feb 2021 18:05:54 +0100 Subject: [PATCH] [projections] fix anomaly for temperature --- .../margin_estimator/abstract_margin_estimator.py | 3 ++- .../altitudes_fit/one_fold_analysis/one_fold_fit.py | 1 - .../plots/plot_histogram_altitude_studies.py | 4 ++-- ...ain_elevation_temporal_for_projections_ensemble.py | 11 +++++++---- .../visualizer_for_projection_ensemble.py | 3 ++- .../abstract_temporal_covariate_for_fit.py | 2 +- .../test_contrasting/test_two_fold_fit.py | 2 +- 7 files changed, 15 insertions(+), 11 deletions(-) diff --git a/extreme_fit/estimator/margin_estimator/abstract_margin_estimator.py b/extreme_fit/estimator/margin_estimator/abstract_margin_estimator.py index 335aeb35..f8afbdcd 100644 --- a/extreme_fit/estimator/margin_estimator/abstract_margin_estimator.py +++ b/extreme_fit/estimator/margin_estimator/abstract_margin_estimator.py @@ -64,7 +64,8 @@ class LinearMarginEstimator(AbstractMarginEstimator): def nllh(self, split=Split.all): nllh = 0 maxima_values = self.dataset.maxima_gev(split=split) - coordinate_values = self.dataset.df_coordinates(split=split).values + df = pd.concat([self.df_coordinates_spat(split=split), self.df_coordinates_temp(split=split)], axis=1) + coordinate_values = df.values for maximum, coordinate in zip(maxima_values, coordinate_values): assert len(maximum) == 1, \ 'So far, only one observation for each coordinate, but code would be easy to change' diff --git a/projects/altitude_spatial_model/altitudes_fit/one_fold_analysis/one_fold_fit.py b/projects/altitude_spatial_model/altitudes_fit/one_fold_analysis/one_fold_fit.py index e37365f9..256bc4a1 100644 --- a/projects/altitude_spatial_model/altitudes_fit/one_fold_analysis/one_fold_fit.py +++ b/projects/altitude_spatial_model/altitudes_fit/one_fold_analysis/one_fold_fit.py @@ -144,7 +144,6 @@ class OneFoldFit(object): @cached_property def sorted_estimators(self): estimators = list(self.model_class_to_estimator.values()) - print(self.massif_name, self.altitude_group) if self.remove_physically_implausible_models: estimators = [e for e in estimators if -0.5 < self._compute_shape_for_reference_altitude(e) < 0.5] if len(estimators) == 0: diff --git a/projects/altitude_spatial_model/altitudes_fit/plots/plot_histogram_altitude_studies.py b/projects/altitude_spatial_model/altitudes_fit/plots/plot_histogram_altitude_studies.py index 0bc0683c..2fc0942f 100644 --- a/projects/altitude_spatial_model/altitudes_fit/plots/plot_histogram_altitude_studies.py +++ b/projects/altitude_spatial_model/altitudes_fit/plots/plot_histogram_altitude_studies.py @@ -115,8 +115,8 @@ def plot_histogram_all_trends_against_altitudes(massif_names, visualizer_list: L ax.tick_params(axis='both', which='major', labelsize=labelsize) ax.set_xticks(x) ax.yaxis.grid() - ax.set_ylim([0, 79]) - ax.set_ylim(bottom=0) + _, ylim_max = ax.get_ylim() + ax.set_ylim([0, max(ylim_max, 79)]) ax.set_xticklabels([v.altitude_group.formula_upper for v in visualizer_list]) plot_nb_massif_on_upper_axis(ax, labelsize, legend_fontsize, nb_massifs, x) diff --git a/projects/projected_snowfall/elevation_temporal_model_for_projections/main_elevation_temporal_for_projections_ensemble.py b/projects/projected_snowfall/elevation_temporal_model_for_projections/main_elevation_temporal_for_projections_ensemble.py index 7c30e4f7..14587d11 100644 --- a/projects/projected_snowfall/elevation_temporal_model_for_projections/main_elevation_temporal_for_projections_ensemble.py +++ b/projects/projected_snowfall/elevation_temporal_model_for_projections/main_elevation_temporal_for_projections_ensemble.py @@ -44,12 +44,12 @@ def main(): set_seed_for_test() AbstractExtractEurocodeReturnLevel.ALPHA_CONFIDENCE_INTERVAL_UNCERTAINTY = 0.2 - fast = False + fast = None if fast is None: massif_names = None - gcm_rcm_couples = gcm_rcm_couples[1:2] + gcm_rcm_couples = gcm_rcm_couples[:5] AbstractExtractEurocodeReturnLevel.NB_BOOTSTRAP = 10 - altitudes_list = altitudes_for_groups[:2] + altitudes_list = altitudes_for_groups[:] elif fast: AbstractExtractEurocodeReturnLevel.NB_BOOTSTRAP = 10 massif_names = None @@ -71,6 +71,9 @@ def main_loop(gcm_rcm_couples, altitudes_list, massif_names, study_classes, ense temporal_covariate_for_fit): assert isinstance(altitudes_list, List) assert isinstance(altitudes_list[0], List) + gof_test = True + print('Goodness of fit test ?', gof_test) + print('Covariate is {}'.format(temporal_covariate_for_fit)) for study_class in study_classes: print('Inner loop', study_class) model_classes = ALTITUDINAL_GEV_MODELS_BASED_ON_POINTWISE_ANALYSIS @@ -83,7 +86,7 @@ def main_loop(gcm_rcm_couples, altitudes_list, massif_names, study_classes, ense massif_names=massif_names, temporal_covariate_for_fit=temporal_covariate_for_fit, confidence_interval_based_on_delta_method=False, - display_only_model_that_pass_gof_test=False, + display_only_model_that_pass_gof_test=gof_test, remove_physically_implausible_models=True, ) visualizer.plot() diff --git a/projects/projected_snowfall/elevation_temporal_model_for_projections/visualizer_for_projection_ensemble.py b/projects/projected_snowfall/elevation_temporal_model_for_projections/visualizer_for_projection_ensemble.py index e4f0c23e..27a1c85c 100644 --- a/projects/projected_snowfall/elevation_temporal_model_for_projections/visualizer_for_projection_ensemble.py +++ b/projects/projected_snowfall/elevation_temporal_model_for_projections/visualizer_for_projection_ensemble.py @@ -83,7 +83,8 @@ class MetaVisualizerForProjectionEnsemble(object): with_significance = False # Individual plots for independent_ensemble_fit in self.ensemble_fits(IndependentEnsembleFit): - for v in independent_ensemble_fit.gcm_rcm_couple_to_visualizer.values(): + for c, v in independent_ensemble_fit.gcm_rcm_couple_to_visualizer.items(): + print(c) v.plot_moments() # Aggregated at gcm_rcm_level plots for gcm_rcm_couple in self.gcm_rcm_couples: diff --git a/spatio_temporal_dataset/coordinates/temporal_coordinates/abstract_temporal_covariate_for_fit.py b/spatio_temporal_dataset/coordinates/temporal_coordinates/abstract_temporal_covariate_for_fit.py index b06f94c1..4fdc65eb 100644 --- a/spatio_temporal_dataset/coordinates/temporal_coordinates/abstract_temporal_covariate_for_fit.py +++ b/spatio_temporal_dataset/coordinates/temporal_coordinates/abstract_temporal_covariate_for_fit.py @@ -32,5 +32,5 @@ class AnomalyTemperatureTemporalCovariate(AbstractTemporalCovariateForFit): d = year_to_global_mean_temp(gcm, scenario, anomaly=True) cls.gcm_and_scenario_to_d[(gcm, scenario)] = d d = cls.gcm_and_scenario_to_d[(gcm, scenario)] - global_mean_temp = d[year] * 1000 + global_mean_temp = d[year] return global_mean_temp diff --git a/test/test_projects/test_contrasting/test_two_fold_fit.py b/test/test_projects/test_contrasting/test_two_fold_fit.py index 5c9c72c4..eb89f82d 100644 --- a/test/test_projects/test_contrasting/test_two_fold_fit.py +++ b/test/test_projects/test_contrasting/test_two_fold_fit.py @@ -46,7 +46,7 @@ class TestTwoFoldFit(unittest.TestCase): massif_fit = two_fold_fit.massif_name_to_massif_fit['Vercors'] model_fit = massif_fit.sample_id_to_sample_fit[0].model_class_to_model_fit[ ConstantMarginModel] # type: TwoFoldModelFit - self.assertEqual(461.6710428902022, model_fit.score(score=Score.NLLH_TEST)) + self.assertEqual(232.1804953450304, model_fit.score(score=Score.NLLH_TEST)) if __name__ == '__main__': -- GitLab