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

[projection snowfall] fix error in one fold fit for the temperature covariate...

[projection snowfall] fix error in one fold fit for the temperature covariate & for the significance.
modify number of parameters for the spline, and only counts the number of coefficients and not the number of knots.
parent 164024a4
No related merge requests found
Showing with 20 additions and 11 deletions
+20 -11
......@@ -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):
......
......@@ -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):
......
......@@ -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,
......
......@@ -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):
......
......@@ -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,
......
......@@ -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]
......
......@@ -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()
......
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