diff --git a/extreme_fit/function/param_function/spline_coef.py b/extreme_fit/function/param_function/spline_coef.py index 0c62b8befdd8e69f671c95c7061993060e3143c2..2552b5d7cbadaf0da8651697fe76ae24d00fc716 100644 --- a/extreme_fit/function/param_function/spline_coef.py +++ b/extreme_fit/function/param_function/spline_coef.py @@ -29,7 +29,8 @@ class SplineCoef(AbstractCoef): @property def nb_params(self): - return self.nb_knots + self.nb_coefficients + # return self.nb_knots + self.nb_coefficients + return self.nb_coefficients class SplineAllCoef(LinearCoef): diff --git a/extreme_fit/model/result_from_model_fit/result_from_extremes/result_from_evgam.py b/extreme_fit/model/result_from_model_fit/result_from_extremes/result_from_evgam.py index 70238d0f39d198f440a5d707091d17a21ba27144..9589e190e25ac24e35c7e64dbf6e48fff22d2679 100644 --- a/extreme_fit/model/result_from_model_fit/result_from_extremes/result_from_evgam.py +++ b/extreme_fit/model/result_from_model_fit/result_from_extremes/result_from_evgam.py @@ -53,7 +53,8 @@ class ResultFromEvgam(AbstractResultFromExtremes): @property def nb_parameters(self): - return len(np.array(self.name_to_value['coefficients'])) + self.nb_knots + # return len(np.array(self.name_to_value['coefficients'])) + self.nb_knots + return len(np.array(self.name_to_value['coefficients'])) @property def aic(self): diff --git a/extreme_trend/ensemble_fit/visualizer_for_projection_ensemble.py b/extreme_trend/ensemble_fit/visualizer_for_projection_ensemble.py index 0a91aee99b01e747e24088891743dfea5712afcb..60c8fba7d2981b0a7507959e8c963ef4a0bccaf4 100644 --- a/extreme_trend/ensemble_fit/visualizer_for_projection_ensemble.py +++ b/extreme_trend/ensemble_fit/visualizer_for_projection_ensemble.py @@ -6,6 +6,8 @@ from extreme_data.meteo_france_data.adamont_data.adamont_gcm_rcm_couples import from extreme_data.meteo_france_data.adamont_data.adamont_scenario import gcm_rcm_couple_to_str from extreme_data.meteo_france_data.scm_models_data.abstract_study import AbstractStudy from extreme_fit.distribution.gev.gev_params import GevParams +from extreme_fit.model.margin_model.linear_margin_model.abstract_temporal_linear_margin_model import \ + AbstractTemporalLinearMarginModel from extreme_fit.model.margin_model.polynomial_margin_model.spatio_temporal_polynomial_model import \ AbstractSpatioTemporalPolynomialModel from extreme_fit.model.margin_model.utils import MarginFitMethod @@ -25,7 +27,7 @@ from projects.projected_extreme_snowfall.results.plot_relative_change_in_return_ class VisualizerForProjectionEnsemble(object): def __init__(self, altitudes_list, gcm_rcm_couples, study_class, season, scenario, - model_classes: List[AbstractSpatioTemporalPolynomialModel], + model_classes: List[AbstractTemporalLinearMarginModel], ensemble_fit_classes=None, massif_names=None, fit_method=MarginFitMethod.extremes_fevd_mle, diff --git a/extreme_trend/one_fold_fit/one_fold_fit.py b/extreme_trend/one_fold_fit/one_fold_fit.py index 19396a19dc5e25671e3758096f842d1f10260452..57a523f555a8450449478382dc1240996be42ab0 100644 --- a/extreme_trend/one_fold_fit/one_fold_fit.py +++ b/extreme_trend/one_fold_fit/one_fold_fit.py @@ -13,6 +13,7 @@ from extreme_fit.distribution.gev.gev_params import GevParams from extreme_fit.distribution.gumbel.gumbel_gof import goodness_of_fit_anderson from extreme_fit.estimator.margin_estimator.utils import fitted_linear_margin_estimator_short from extreme_fit.function.param_function.polynomial_coef import PolynomialAllCoef, PolynomialCoef +from extreme_fit.model.margin_model.linear_margin_model.temporal_linear_margin_models import StationaryTemporalModel from extreme_fit.model.margin_model.polynomial_margin_model.gev_altitudinal_models import StationaryAltitudinal from extreme_fit.model.margin_model.polynomial_margin_model.gev_altitudinal_models_only_altitude_and_scale import \ AltitudinalOnlyScale, StationaryAltitudinalOnlyScale @@ -209,7 +210,7 @@ class OneFoldFit(object): return coordinate def _compute_shape_for_reference_altitude(self, estimator): - coordinate = self.get_coordinate(self.altitude_plot, self.last_year) + coordinate = self.get_coordinate(self.altitude_plot, self.covariate_after) gev_params = estimator.function_from_fit.get_params(coordinate, is_transformed=False) shape = gev_params.shape return shape @@ -296,7 +297,10 @@ class OneFoldFit(object): elif isinstance(self.best_estimator.margin_model, AltitudinalShapeLinearTimeStationary): return self.model_class_to_estimator_with_finite_aic[AltitudinalShapeLinearTimeStationary] else: - return self.model_class_to_estimator_with_finite_aic[StationaryAltitudinal] + if isinstance(self.altitude_group, DefaultAltitudeGroup): + return self.model_class_to_estimator_with_finite_aic[StationaryTemporalModel] + else: + return self.model_class_to_estimator_with_finite_aic[StationaryAltitudinal] @property def likelihood_ratio(self): diff --git a/projects/projected_extreme_snowfall/results/main_projections_ensemble.py b/projects/projected_extreme_snowfall/results/main_projections_ensemble.py index 79cf3832b21f6a4c87ca1ba6819780731c0e47de..7b68fbc9e899af4a025ef87211341becacda55e0 100644 --- a/projects/projected_extreme_snowfall/results/main_projections_ensemble.py +++ b/projects/projected_extreme_snowfall/results/main_projections_ensemble.py @@ -50,13 +50,13 @@ def main(): AbstractExtractEurocodeReturnLevel.ALPHA_CONFIDENCE_INTERVAL_UNCERTAINTY = 0.2 scenarios = [AdamontScenario.rcp85_extended] - fast = True + fast = None for scenario in scenarios: gcm_rcm_couples = get_gcm_rcm_couples(scenario) if fast is None: - gcm_rcm_couples = gcm_rcm_couples[:2] + gcm_rcm_couples = gcm_rcm_couples[:] AbstractExtractEurocodeReturnLevel.NB_BOOTSTRAP = 10 - altitudes_list = [1800, 2100] + altitudes_list = [900, 1800, 2700, 3600] elif fast: gcm_rcm_couples = gcm_rcm_couples[:2] AbstractExtractEurocodeReturnLevel.NB_BOOTSTRAP = 10 @@ -81,7 +81,6 @@ def main(): massif_names = ['Vanoise'] model_classes = SPLINE_MODELS_FOR_PROJECTION_ONE_ALTITUDE - visualizer = VisualizerForProjectionEnsemble( altitudes_list, gcm_rcm_couples, study_class, Season.annual, scenario, model_classes=model_classes, diff --git a/projects/projected_extreme_snowfall/results/plot_relative_change_in_return_level.py b/projects/projected_extreme_snowfall/results/plot_relative_change_in_return_level.py index 34a9db8d44d4efab239b94a86382534ac3318823..8a132222e8fd70e63ba5119b0ddb334aeb4b884b 100644 --- a/projects/projected_extreme_snowfall/results/plot_relative_change_in_return_level.py +++ b/projects/projected_extreme_snowfall/results/plot_relative_change_in_return_level.py @@ -5,6 +5,7 @@ import numpy as np from extreme_trend.one_fold_fit.altitudes_studies_visualizer_for_non_stationary_models import \ AltitudesStudiesVisualizerForNonStationaryModels +from root_utils import get_display_name_from_object_type from spatio_temporal_dataset.coordinates.temporal_coordinates.temperature_covariate import \ AnomalyTemperatureWithSplineTemporalCovariate @@ -31,8 +32,10 @@ def plot_relative_dynamic_in_return_level(massif_names, visualizer_list: List[ def plot_curve(ax, massif_name, visualizer: AltitudesStudiesVisualizerForNonStationaryModels): - temperatures_list = np.linspace(1, 4, num=4) + temperatures_list = np.linspace(1, 5, num=40) one_fold_fit = visualizer.massif_name_to_one_fold_fit[massif_name] + print(get_display_name_from_object_type(type(one_fold_fit.best_margin_model)), + "significant={}".format(one_fold_fit.is_significant)) return_levels = [one_fold_fit.relative_changes_of_moment([None], order=None, covariate_before=1, covariate_after=t)[0] for t in temperatures_list] diff --git a/test/test_extreme_fit/test_estimator/test_temporal_estimator/test_gev_temporal_spline.py b/test/test_extreme_fit/test_estimator/test_temporal_estimator/test_gev_temporal_spline.py index ee0c2b99bbad749f4ac5bcc2091ea1d81704a17c..4d1dfdd7869392dd3dc34e13500fd49c09ff2042 100644 --- a/test/test_extreme_fit/test_estimator/test_temporal_estimator/test_gev_temporal_spline.py +++ b/test/test_extreme_fit/test_estimator/test_temporal_estimator/test_gev_temporal_spline.py @@ -52,7 +52,6 @@ class TestGevTemporalSpline(unittest.TestCase): starting_year=None, fit_method=self.fit_method) # Checks that parameters returned are indeed different - print(self.start_year, self.middle_year, self.last_year) mle_params_estimated_year_first = estimator.function_from_fit.get_params(np.array([self.start_year])).to_dict() mle_params_estimated_year_middle = estimator.function_from_fit.get_params(np.array([self.middle_year])).to_dict() mle_params_estimated_year_last = estimator.function_from_fit.get_params(np.array([self.last_year])).to_dict()