Commit 8515b9b4 authored by Le Roux Erwan's avatar Le Roux Erwan
Browse files

[projections] fix anomaly for temperature

parent 3981d300
No related merge requests found
Showing with 15 additions and 11 deletions
+15 -11
......@@ -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'
......
......@@ -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:
......
......@@ -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)
......
......@@ -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()
......
......@@ -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:
......
......@@ -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
......@@ -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__':
......
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