msle

HydroErr.HydroErr.msle(simulated_array: ndarray[tuple[Any, ...], dtype[floating | integer]] | Sequence[int | float], observed_array: ndarray[tuple[Any, ...], dtype[floating | integer]] | Sequence[int | float], replace_nan: float | None = None, replace_inf: float | None = None, remove_neg: bool = False, remove_zero: bool = False) floating[Any]

Compute the mean squared log error of the simulated and observed data.

\[MSLE = \frac{1}{n} \sum_{i=0}^{n} (ln(\frac{S_i}{O_i}))^2\]

Range: 0 ≤ MSLE < inf, data units squared, smaller is better.

Notes Same as the mean squared error (MSE) only use log ratios as the error term. Limits the impact of outliers, more evenly weights high and low values.

Parameters:
  • simulated_array – An array of simulated data from the time series.

  • observed_array – An array of observed data from the time series.

  • replace_nan – If given, indicates which value to replace NaN values with in the two arrays. If None, when a NaN value is found at the i-th position in the observed OR simulated array, the i-th value of the observed and simulated array are removed before the computation.

  • replace_inf – If given, indicates which value to replace Inf values with in the two arrays. If None, when an inf value is found at the i-th position in the observed OR simulated array, the i-th value of the observed and simulated array are removed before the computation.

  • remove_neg – If True, when a negative value is found at the i-th position in the observed OR simulated array, the i-th value of the observed AND simulated array are removed before the computation.

  • remove_zero – If true, when a zero value is found at the i-th position in the observed OR simulated array, the i-th value of the observed AND simulated array are removed before the computation.

Return type:

The mean squared log error value.

Examples

Note that the value is very small because it is in log space.

>>> import HydroErr as he
>>> import numpy as np
>>> sim = np.array([5, 7, 9, 2, 4.5, 6.7])
>>> obs = np.array([4.7, 6, 10, 2.5, 4, 6.8])
>>> np.round(he.msle(sim, obs), 6)
0.010426

References

  • Törnqvist, Leo, Pentti Vartia, and Yrjö O. Vartia. “How Should Relative Changes Be Measured?” The American Statistician 39, no. 1 (1985): 43-46.