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

[projection snowfall] add preliminary analysis for the work on model with...

[projection snowfall] add preliminary analysis for the work on model with effect related to the GCM or RCM type.
parent 98f7d0d4
No related merge requests found
Showing with 148 additions and 23 deletions
+148 -23
...@@ -69,7 +69,7 @@ def plot_nb_data(is_temperature_interval, is_shift_interval): ...@@ -69,7 +69,7 @@ def plot_nb_data(is_temperature_interval, is_shift_interval):
ax = plt.gca() ax = plt.gca()
for gcm in get_gcm_list(adamont_version=2)[:]: for gcm in get_gcm_list(adamont_version=2)[:]:
for i, scenario in enumerate(rcp_scenarios[:2]): for i, scenario in enumerate(rcp_scenarios[2:]):
plot_nb_data_one_line(ax, gcm, scenario, left_limit, right_limit, plot_nb_data_one_line(ax, gcm, scenario, left_limit, right_limit,
i == 0, is_temperature_interval) i == 0, is_temperature_interval)
...@@ -118,6 +118,6 @@ def get_ticks_labels_for_interval(is_temperature_interval, is_shift_interval): ...@@ -118,6 +118,6 @@ def get_ticks_labels_for_interval(is_temperature_interval, is_shift_interval):
if __name__ == '__main__': if __name__ == '__main__':
for shift_interval in [False, True]: for shift_interval in [False, True]:
for temp_interval in [False, True]: for temp_interval in [False, True][1:]:
print("shift = {}, temp_inteval = {}".format(shift_interval, temp_interval)) print("shift = {}, temp_inteval = {}".format(shift_interval, temp_interval))
plot_nb_data(is_temperature_interval=temp_interval, is_shift_interval=shift_interval) plot_nb_data(is_temperature_interval=temp_interval, is_shift_interval=shift_interval)
import matplotlib.pyplot as plt
from collections import OrderedDict from collections import OrderedDict
from typing import List from typing import List
from extreme_data.meteo_france_data.adamont_data.adamont_gcm_rcm_couples import gcm_rcm_couple_to_color
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.polynomial_margin_model.spatio_temporal_polynomial_model import \ from extreme_fit.model.margin_model.polynomial_margin_model.spatio_temporal_polynomial_model import \
AbstractSpatioTemporalPolynomialModel AbstractSpatioTemporalPolynomialModel
from extreme_fit.model.margin_model.utils import MarginFitMethod from extreme_fit.model.margin_model.utils import MarginFitMethod
...@@ -129,3 +134,40 @@ class VisualizerForProjectionEnsemble(object): ...@@ -129,3 +134,40 @@ class VisualizerForProjectionEnsemble(object):
return [ensemble_class_to_ensemble_fit[ensemble_class] return [ensemble_class_to_ensemble_fit[ensemble_class]
for ensemble_class_to_ensemble_fit for ensemble_class_to_ensemble_fit
in self.altitude_class_to_ensemble_class_to_ensemble_fit.values()] in self.altitude_class_to_ensemble_class_to_ensemble_fit.values()]
def plot_preliminary_first_part(self):
if self.massif_names is None:
massif_names = AbstractStudy.all_massif_names()
else:
massif_names = self.massif_names
assert isinstance(massif_names, list)
# Plot for all parameters
for param_name in GevParams.PARAM_NAMES:
for degree in [0, 1]:
for massif_name in massif_names:
self.plot_preliminary_first_part_for_one_massif(massif_name, param_name, degree)
def plot_preliminary_first_part_for_one_massif(self, massif_name, param_name, degree):
# Retrieve the data
ensemble_fit: IndependentEnsembleFit
gcm_rcm_couple_to_data = {
c: [] for c in self.gcm_rcm_couples
}
for ensemble_fit in self.ensemble_fits(IndependentEnsembleFit):
for gcm_rcm_couple in self.gcm_rcm_couples:
visualizer = ensemble_fit.gcm_rcm_couple_to_visualizer[gcm_rcm_couple]
one_fold_fit = visualizer.massif_name_to_one_fold_fit[massif_name]
coef = one_fold_fit.best_coef(param_name, 0, degree)
altitude = visualizer.altitude_group.reference_altitude
gcm_rcm_couple_to_data[gcm_rcm_couple].append((altitude, coef))
# Plot
ax = plt.gca()
for gcm_rcm_couple, data in gcm_rcm_couple_to_data.items():
altitudes, coefs = list(zip(*data))
color = gcm_rcm_couple_to_color[gcm_rcm_couple]
label = gcm_rcm_couple_to_str(gcm_rcm_couple)
ax.plot(coefs, altitudes, color=color, label=label, marker='o')
ax.legend()
visualizer.plot_name = '{}/{}_{}'.format(param_name, degree, massif_name)
visualizer.show_or_save_to_file(no_title=True)
plt.close()
\ No newline at end of file
...@@ -246,8 +246,11 @@ class OneFoldFit(object): ...@@ -246,8 +246,11 @@ class OneFoldFit(object):
def best_coef(self, param_name, dim, degree): def best_coef(self, param_name, dim, degree):
try: try:
coef = self.best_function_from_fit.param_name_to_coef[param_name] # type: PolynomialAllCoef coef = self.best_function_from_fit.param_name_to_coef[param_name] # type: PolynomialAllCoef
coef = coef.dim_to_polynomial_coef[dim] # type: PolynomialCoef if coef.dim_to_polynomial_coef is None:
coef = coef.idx_to_coef[degree] return coef.intercept
else:
coef = coef.dim_to_polynomial_coef[dim] # type: PolynomialCoef
coef = coef.idx_to_coef[degree]
return coef return coef
except (TypeError, KeyError): except (TypeError, KeyError):
return None return None
......
...@@ -8,17 +8,16 @@ from extreme_trend.ensemble_fit.together_ensemble_fit.together_ensemble_fit impo ...@@ -8,17 +8,16 @@ from extreme_trend.ensemble_fit.together_ensemble_fit.together_ensemble_fit impo
matplotlib.use('Agg') matplotlib.use('Agg')
import matplotlib as mpl import matplotlib as mpl
mpl.rcParams['text.usetex'] = True mpl.rcParams['text.usetex'] = True
mpl.rcParams['text.latex.preamble'] = [r'\usepackage{amsmath}'] mpl.rcParams['text.latex.preamble'] = [r'\usepackage{amsmath}']
from extreme_trend.ensemble_fit.independent_ensemble_fit.independent_ensemble_fit import IndependentEnsembleFit from extreme_trend.ensemble_fit.independent_ensemble_fit.independent_ensemble_fit import IndependentEnsembleFit
from extreme_trend.ensemble_fit.visualizer_for_projection_ensemble import VisualizerForProjectionEnsemble from extreme_trend.ensemble_fit.visualizer_for_projection_ensemble import VisualizerForProjectionEnsemble
from extreme_trend.ensemble_fit.visualizer_for_sensitivity import VisualizerForSensivity from extreme_trend.ensemble_fit.visualizer_for_sensitivity import VisualizerForSensivity
from spatio_temporal_dataset.coordinates.temporal_coordinates.temperature_covariate import \ from spatio_temporal_dataset.coordinates.temporal_coordinates.temperature_covariate import \
AnomalyTemperatureWithSplineTemporalCovariate AnomalyTemperatureWithSplineTemporalCovariate
from extreme_fit.model.margin_model.polynomial_margin_model.utils import \ from extreme_fit.model.margin_model.polynomial_margin_model.utils import \
ALTITUDINAL_GEV_MODELS_BASED_ON_POINTWISE_ANALYSIS ALTITUDINAL_GEV_MODELS_BASED_ON_POINTWISE_ANALYSIS
...@@ -27,8 +26,8 @@ from extreme_fit.model.utils import set_seed_for_test ...@@ -27,8 +26,8 @@ from extreme_fit.model.utils import set_seed_for_test
from extreme_data.meteo_france_data.adamont_data.adamont.adamont_safran import AdamontSnowfall from extreme_data.meteo_france_data.adamont_data.adamont.adamont_safran import AdamontSnowfall
from extreme_data.meteo_france_data.adamont_data.adamont_scenario import AdamontScenario, get_gcm_rcm_couples, \ from extreme_data.meteo_france_data.adamont_data.adamont_scenario import AdamontScenario, get_gcm_rcm_couples, \
rcp_scenarios rcp_scenarios
from spatio_temporal_dataset.coordinates.temporal_coordinates.abstract_temporal_covariate_for_fit import TimeTemporalCovariate from spatio_temporal_dataset.coordinates.temporal_coordinates.abstract_temporal_covariate_for_fit import \
TimeTemporalCovariate
from extreme_fit.model.result_from_model_fit.result_from_extremes.abstract_extract_eurocode_return_level import \ from extreme_fit.model.result_from_model_fit.result_from_extremes.abstract_extract_eurocode_return_level import \
AbstractExtractEurocodeReturnLevel AbstractExtractEurocodeReturnLevel
...@@ -42,8 +41,6 @@ def main(): ...@@ -42,8 +41,6 @@ def main():
start = time.time() start = time.time()
study_class = AdamontSnowfall study_class = AdamontSnowfall
ensemble_fit_classes = [IndependentEnsembleFit, TogetherEnsembleFit][1:] ensemble_fit_classes = [IndependentEnsembleFit, TogetherEnsembleFit][1:]
temporal_covariate_for_fit = [TimeTemporalCovariate,
AnomalyTemperatureWithSplineTemporalCovariate][0]
set_seed_for_test() set_seed_for_test()
AbstractExtractEurocodeReturnLevel.ALPHA_CONFIDENCE_INTERVAL_UNCERTAINTY = 0.2 AbstractExtractEurocodeReturnLevel.ALPHA_CONFIDENCE_INTERVAL_UNCERTAINTY = 0.2
...@@ -71,29 +68,32 @@ def main(): ...@@ -71,29 +68,32 @@ def main():
assert isinstance(altitudes_list, List) assert isinstance(altitudes_list, List)
assert isinstance(altitudes_list[0], List) assert isinstance(altitudes_list[0], List)
print('Scenario is', scenario) print('Scenario is', scenario)
print('Covariate is {}'.format(temporal_covariate_for_fit))
model_classes = ALTITUDINAL_GEV_MODELS_BASED_ON_POINTWISE_ANALYSIS model_classes = ALTITUDINAL_GEV_MODELS_BASED_ON_POINTWISE_ANALYSIS
assert scenario in rcp_scenarios assert scenario in rcp_scenarios
remove_physically_implausible_models = True remove_physically_implausible_models = True
temp_cov = False
temporal_covariate_for_fit = AnomalyTemperatureWithSplineTemporalCovariate if temp_cov else TimeTemporalCovariate
print('Covariate is {}'.format(temporal_covariate_for_fit))
visualizer = VisualizerForSensivity( for is_temperature_interval in [True, False][1:]:
altitudes_list, gcm_rcm_couples, study_class, Season.annual, scenario, for is_shift_interval in [True, False][1:]:
model_classes=model_classes, visualizer = VisualizerForSensivity(
ensemble_fit_classes=ensemble_fit_classes, altitudes_list, gcm_rcm_couples, study_class, Season.annual, scenario,
massif_names=massif_names, model_classes=model_classes,
temporal_covariate_for_fit=temporal_covariate_for_fit, ensemble_fit_classes=ensemble_fit_classes,
remove_physically_implausible_models=remove_physically_implausible_models, massif_names=massif_names,
is_temperature_interval=False, temporal_covariate_for_fit=temporal_covariate_for_fit,
is_shift_interval=False, remove_physically_implausible_models=remove_physically_implausible_models,
) is_temperature_interval=is_temperature_interval,
visualizer.plot() is_shift_interval=is_shift_interval,
)
visualizer.plot()
end = time.time() end = time.time()
duration = str(datetime.timedelta(seconds=end - start)) duration = str(datetime.timedelta(seconds=end - start))
print('Total duration', duration) print('Total duration', duration)
if __name__ == '__main__': if __name__ == '__main__':
main() main()
import datetime
import time
from typing import List
import matplotlib
from extreme_fit.distribution.gev.gev_params import GevParams
from extreme_fit.model.margin_model.polynomial_margin_model.gev_altitudinal_models import StationaryAltitudinal
from extreme_trend.ensemble_fit.together_ensemble_fit.together_ensemble_fit import TogetherEnsembleFit
matplotlib.use('Agg')
import matplotlib as mpl
mpl.rcParams['text.usetex'] = True
mpl.rcParams['text.latex.preamble'] = [r'\usepackage{amsmath}']
from extreme_trend.ensemble_fit.independent_ensemble_fit.independent_ensemble_fit import IndependentEnsembleFit
from extreme_trend.ensemble_fit.visualizer_for_projection_ensemble import VisualizerForProjectionEnsemble
from extreme_trend.ensemble_fit.visualizer_for_sensitivity import VisualizerForSensivity
from spatio_temporal_dataset.coordinates.temporal_coordinates.temperature_covariate import \
AnomalyTemperatureWithSplineTemporalCovariate
from extreme_fit.model.margin_model.polynomial_margin_model.utils import \
ALTITUDINAL_GEV_MODELS_BASED_ON_POINTWISE_ANALYSIS
from extreme_fit.model.utils import set_seed_for_test
from extreme_data.meteo_france_data.adamont_data.adamont.adamont_safran import AdamontSnowfall
from extreme_data.meteo_france_data.adamont_data.adamont_scenario import AdamontScenario, get_gcm_rcm_couples, \
rcp_scenarios
from spatio_temporal_dataset.coordinates.temporal_coordinates.abstract_temporal_covariate_for_fit import \
TimeTemporalCovariate
from extreme_fit.model.result_from_model_fit.result_from_extremes.abstract_extract_eurocode_return_level import \
AbstractExtractEurocodeReturnLevel
from extreme_trend.one_fold_fit.altitude_group import altitudes_for_groups
from extreme_data.meteo_france_data.scm_models_data.utils import Season
def main(scenario=AdamontScenario.rcp85):
start = time.time()
study_class = AdamontSnowfall
set_seed_for_test()
gcm_rcm_couples = get_gcm_rcm_couples(scenario)
model_classes = [StationaryAltitudinal]
fast = False
if fast is None:
massif_names = ['Vanoise']
altitudes_list = altitudes_for_groups[:]
elif fast:
massif_names = ['Vanoise']
gcm_rcm_couples = gcm_rcm_couples[:1]
altitudes_list = altitudes_for_groups[2:]
else:
massif_names = None
altitudes_list = altitudes_for_groups[:]
visualizer = VisualizerForProjectionEnsemble(
altitudes_list, gcm_rcm_couples, study_class, Season.annual, scenario,
model_classes=model_classes,
ensemble_fit_classes=[IndependentEnsembleFit],
massif_names=massif_names,
temporal_covariate_for_fit=None,
remove_physically_implausible_models=True,
gcm_to_year_min_and_year_max=None,
)
visualizer.plot_preliminary_first_part()
end = time.time()
duration = str(datetime.timedelta(seconds=end - start))
print('Total duration', duration)
if __name__ == '__main__':
main()
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