solarforecastarbiter.metrics.deterministic.relative_euclidean_distance

solarforecastarbiter.metrics.deterministic.relative_euclidean_distance(obs, fx)[source]

Relative Euclidean distance (D):

\[\text{D} = \sqrt{ \left( \frac{\overline{\text{fx}} - \overline{\text{obs}} } { \overline{\text{obs}} } \right) ^ 2 + \left( \frac{\sigma_{\text{fx}} - \sigma_{\text{obs}} } { \sigma_{\text{obs}} } \right) ^ 2 + \left( \textrm{corr} - 1 \right) ^ 2 }\]

where:

  • \(\overline{\text{fx}}\) is the forecast mean
  • \(\overline{\text{obs}}\) is the observation mean
  • \(\sigma_{\text{fx}}\) is the forecast standard deviation
  • \(\sigma_{\text{obs}}\) is the observation standard deviation
  • \(\textrm{corr}\) is the Pearson correlation coefficient

Described in [1]

Parameters:
  • obs ((n,) array-like) – Observed values.
  • fx ((n,) array-like) – Forecasted values.
Returns:

d (float) – The relative Euclidean distance of the forecast.

Examples

>>> relative_euclidean_distance(np.array([0, 1]), np.array([1, 2]))
2.0
# observation mean is 0, forecast mean is not 0. d --> inf
>>> relative_euclidean_distance(np.array([-1, 1]), np.array([2, 3]))
np.Inf
# both forecast and observation mean are 0. d is finite
>>> relative_euclidean_distance(np.array([-2, 2]), np.array([3, -3]))
2.0615528128088303
# variance of observation or forecast is 0. d --> nan
>>> relative_euclidean_distance(np.array([1, 1]), np.array([2, 3])
np.NaN

References

[1]Wu et al. Journal of Geophysical Research : Atmospheres 117, D12202, doi: 10.1029/2011JD016971 (2012)