Ratio of standard deviations between sim
and obs
, with treatment of missing values.
rSD(sim, obs, ...)# S3 method for default
rSD(sim, obs, na.rm=TRUE, fun=NULL, ...,
epsilon.type=c("none", "Pushpalatha2012", "otherFactor", "otherValue"),
epsilon.value=NA)
# S3 method for data.frame
rSD(sim, obs, na.rm=TRUE, fun=NULL, ...,
epsilon.type=c("none", "Pushpalatha2012", "otherFactor", "otherValue"),
epsilon.value=NA)
# S3 method for matrix
rSD(sim, obs, na.rm=TRUE, fun=NULL, ...,
epsilon.type=c("none", "Pushpalatha2012", "otherFactor", "otherValue"),
epsilon.value=NA)
# S3 method for zoo
rSD(sim, obs, na.rm=TRUE, fun=NULL, ...,
epsilon.type=c("none", "Pushpalatha2012", "otherFactor", "otherValue"),
epsilon.value=NA)
Ratio of standard deviations between sim
and obs
.
If sim
and obs
are matrixes, the returned value is a vector, with the ratio of standard deviations between each column of sim
and obs
.
numeric, zoo, matrix or data.frame with simulated values
numeric, zoo, matrix or data.frame with observed values
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.
function to be applied to sim
and obs
in order to obtain transformed values thereof before computing this goodness-of-fit index.
The first argument MUST BE a numeric vector with any name (e.g., x
), and additional arguments are passed using ...
.
arguments passed to fun
, in addition to the mandatory first numeric vector.
argument used to define a numeric value to be added to both sim
and obs
before applying fun
.
It is was designed to allow the use of logarithm and other similar functions that do not work with zero values.
Valid values of epsilon.type
are:
1) "none": sim
and obs
are used by fun
without the addition of any numeric value. This is the default option.
2) "Pushpalatha2012": one hundredth (1/100) of the mean observed values is added to both sim
and obs
before applying fun
, as described in Pushpalatha et al. (2012).
3) "otherFactor": the numeric value defined in the epsilon.value
argument is used to multiply the the mean observed values, instead of the one hundredth (1/100) described in Pushpalatha et al. (2012). The resulting value is then added to both sim
and obs
, before applying fun
.
4) "otherValue": the numeric value defined in the epsilon.value
argument is directly added to both sim
and obs
, before applying fun
.
-) when epsilon.type="otherValue"
it represents the numeric value to be added to both sim
and obs
before applying fun
.
-) when epsilon.type="otherFactor"
it represents the numeric factor used to multiply the mean of the observed values, instead of the one hundredth (1/100) described in Pushpalatha et al. (2012). The resulting value is then added to both sim
and obs
before applying fun
.
Mauricio Zambrano Bigiarini <mzb.devel@gmail.com>
sd
, rsr
, gof
, ggof
##################
# Example 1: basic ideal case
obs <- 1:10
sim <- 1:10
rSD(sim, obs)
obs <- 1:10
sim <- 2:11
rSD(sim, obs)
##################
# Example 2:
# 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 'rSD' for the "best" (unattainable) case
rSD(sim=sim, obs=obs)
##################
# Example 3: rSD for simulated values equal to observations plus random noise
# on the first half of the observed values.
# This random noise has more relative importance for ow flows than
# for medium and high flows.
# Randomly changing the first 1826 elements of 'sim', by using a normal distribution
# with mean 10 and standard deviation equal to 1 (default of 'rnorm').
sim[1:1826] <- obs[1:1826] + rnorm(1826, mean=10)
ggof(sim, obs)
rSD(sim=sim, obs=obs)
##################
# Example 4: rSD for simulated values equal to observations plus random noise
# on the first half of the observed values and applying (natural)
# logarithm to 'sim' and 'obs' during computations.
rSD(sim=sim, obs=obs, fun=log)
# Verifying the previous value:
lsim <- log(sim)
lobs <- log(obs)
rSD(sim=lsim, obs=lobs)
##################
# Example 5: rSD for simulated values equal to observations plus random noise
# on the first half of the observed values and applying (natural)
# logarithm to 'sim' and 'obs' and adding the Pushpalatha2012 constant
# during computations
rSD(sim=sim, obs=obs, fun=log, epsilon.type="Pushpalatha2012")
# Verifying the previous value, with the epsilon value following Pushpalatha2012
eps <- mean(obs, na.rm=TRUE)/100
lsim <- log(sim+eps)
lobs <- log(obs+eps)
rSD(sim=lsim, obs=lobs)
##################
# Example 6: rSD for simulated values equal to observations plus random noise
# on the first half of the observed values and applying (natural)
# logarithm to 'sim' and 'obs' and adding a user-defined constant
# during computations
eps <- 0.01
rSD(sim=sim, obs=obs, fun=log, epsilon.type="otherValue", epsilon.value=eps)
# Verifying the previous value:
lsim <- log(sim+eps)
lobs <- log(obs+eps)
rSD(sim=lsim, obs=lobs)
##################
# Example 7: rSD for simulated values equal to observations plus random noise
# on the first half of the observed values and applying (natural)
# logarithm to 'sim' and 'obs' and using a user-defined factor
# to multiply the mean of the observed values to obtain the constant
# to be added to 'sim' and 'obs' during computations
fact <- 1/50
rSD(sim=sim, obs=obs, fun=log, epsilon.type="otherFactor", epsilon.value=fact)
# Verifying the previous value:
eps <- fact*mean(obs, na.rm=TRUE)
lsim <- log(sim+eps)
lobs <- log(obs+eps)
rSD(sim=lsim, obs=lobs)
##################
# Example 8: rSD for simulated values equal to observations plus random noise
# on the first half of the observed values and applying a
# user-defined function to 'sim' and 'obs' during computations
fun1 <- function(x) {sqrt(x+1)}
rSD(sim=sim, obs=obs, fun=fun1)
# Verifying the previous value, with the epsilon value following Pushpalatha2012
sim1 <- sqrt(sim+1)
obs1 <- sqrt(obs+1)
rSD(sim=sim1, obs=obs1)
Run the code above in your browser using DataLab