nrmse: Normalized Root Mean Square Error

Description Usage Arguments Details Value Note Author(s) See Also Examples

View source: R/nrmse.R

Description

Normalized root mean square error (NRMSE) between sim and obs, with treatment of missing values.

Usage

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
nrmse(sim, obs, ...)

## Default S3 method:
nrmse(sim, obs, na.rm=TRUE, norm="sd", ...)

## S3 method for class 'data.frame'
nrmse(sim, obs, na.rm=TRUE, norm="sd", ...)

## S3 method for class 'matrix'
nrmse(sim, obs, na.rm=TRUE, norm="sd", ...)

## S3 method for class 'zoo'
nrmse(sim, obs, na.rm=TRUE, norm="sd", ...)

Arguments

sim

numeric, zoo, matrix or data.frame with simulated values

obs

numeric, zoo, matrix or data.frame with observed values

na.rm

a logical value indicating whether 'NA' should be stripped before the computation proceeds.
When an 'NA' value is found at the i-th position in obs OR sim, the i-th value of obs AND sim are removed before the computation.

norm

character, indicating the value to be used for normalising the root mean square error (RMSE). Valid values are:
-) sd : standard deviation of observations (default).
-) maxmin: difference between the maximum and minimum observed values

...

further arguments passed to or from other methods.

Details

nrmse = 100 \frac {√{ \frac{1}{N} ∑_{i=1}^N { ≤ft( S_i - O_i \right)^2 } } } {nval}

nrmse = 100 * [ rmse(sim, obs) / nval ] ; nval= range(obs, na.rm=TRUE) OR nval=sd(obs), depending on the \code{norm} value

Value

Normalized root mean square error (nrmse) between sim and obs. The result is given in percentage (%)

If sim and obs are matrixes, the returned value is a vector, with the normalized root mean square error between each column of sim and obs.

Note

obs and sim have to have the same length/dimension

Missing values in obs and sim are removed before the computation proceeds, and only those positions with non-missing values in obs and sim are considered in the computation

Author(s)

Mauricio Zambrano Bigiarini <mzb.devel@gmail.com>

See Also

rmse, ssq, gof, ggof

Examples

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
obs <- 1:10
sim <- 1:10
nrmse(sim, obs)

obs <- 1:10
sim <- 2:11
nrmse(sim, obs)

##################
# Loading daily streamflows of the Ega River (Spain), from 1961 to 1970
data(EgaEnEstellaQts)
obs <- EgaEnEstellaQts

# Generating a simulated daily time series, initially equal to the observed series
sim <- obs 

# Computing the normalized root mean squared error for the "best" (unattainable) case
nrmse(sim=sim, obs=obs)

# Randomly changing the first 2000 elements of 'sim', by using a normal distribution
# with mean 10 and standard deviation equal to 1 (default of 'rnorm').
sim[1:2000] <- obs[1:2000] + rnorm(2000, mean=10)

# Computing the new normalized root mean squared error
nrmse(sim=sim, obs=obs)

Example output

Loading required package: zoo

Attaching package: 'zoo'

The following objects are masked from 'package:base':

    as.Date, as.Date.numeric

[1] 0
[1] 33
[1] 0
[1] 37.1

hydroGOF documentation built on March 14, 2020, 1:07 a.m.