Skip to content
Snippets Groups Projects
Commit 71ed6405 authored by Aaron Spring's avatar Aaron Spring :baby_symbol:
Browse files

Use mean RPS for RPSS

parent 77be7795
No related branches found
No related tags found
No related merge requests found
This diff is collapsed.
source diff could not be displayed: it is too large. Options to address this: view the blob.
This diff is collapsed.
...@@ -235,27 +235,24 @@ def skill_by_year(preds, adapt=False): ...@@ -235,27 +235,24 @@ def skill_by_year(preds, adapt=False):
# check inputs # check inputs
assert_predictions_2020(obs_p) assert_predictions_2020(obs_p)
assert_predictions_2020(fct_p) assert_predictions_2020(fct_p)
## RPSS
# rps_ML # rps_ML
rps_ML = xs.rps(obs_p, fct_p, category_edges=None, dim=[], input_distributions='p').compute() rps_ML = xs.rps(obs_p, fct_p, category_edges=None, dim=[], input_distributions='p').compute()
# rps_clim # rps_clim
rps_clim = xs.rps(obs_p, clim_p, category_edges=None, dim=[], input_distributions='p').compute() rps_clim = xs.rps(obs_p, clim_p, category_edges=None, dim=[], input_distributions='p').compute()
# rpss
rpss = 1 - (rps_ML / rps_clim)
# https://renkulab.io/gitlab/aaron.spring/s2s-ai-challenge-template/-/issues/7
# penalize ## RPSS
penalize = obs_p.where(fct_p!=1, other=-10).mean('category') # penalize # https://renkulab.io/gitlab/aaron.spring/s2s-ai-challenge-template/-/issues/7
rpss = rpss.where(penalize!=0, other=-10) expect = obs_p.sum('category')
expect = expect.where(expect > 0.98).where(expect < 1.02) # should be True if not all NaN
# https://renkulab.io/gitlab/aaron.spring/s2s-ai-challenge-template/-/issues/50
rps_ML = rps_ML.where(expect, other=2) # assign RPS=2 where value was expected but NaN found
# following Weigel 2007: https://doi.org/10.1175/MWR3280.1
rpss = 1 - (rps_ML.groupby('forecast_time.year').mean() / rps_clim.groupby('forecast_time.year').mean())
# clip # clip
rpss = rpss.clip(-10, 1) rpss = rpss.clip(-10, 1)
# average over all forecasts
rpss = rpss.groupby('forecast_time.year').mean()
# weighted area mean # weighted area mean
weights = np.cos(np.deg2rad(np.abs(rpss.latitude))) weights = np.cos(np.deg2rad(np.abs(rpss.latitude)))
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment