Non-parametric quantile mapping using empirical quantiles.

Share:

Description

fitQmapQUANT estimates values of the empirical cumulative distribution function of observed and modelled time series for regularly spaced quantiles. doQmapQUANT uses these estimates to perform quantile mapping.

Usage

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
fitQmapQUANT(obs, mod, ...)
## Default S3 method:
fitQmapQUANT(obs,mod,wet.day=TRUE,qstep=0.01,
nboot = 1,...)
## S3 method for class 'matrix'
fitQmapQUANT(obs, mod, ...)
## S3 method for class 'data.frame'
fitQmapQUANT(obs, mod, ...)

doQmapQUANT(x,fobj,...)
## Default S3 method:
doQmapQUANT(x,fobj, type=c("linear","tricub"),...)
## S3 method for class 'matrix'
doQmapQUANT(x,fobj,...)
## S3 method for class 'data.frame'
doQmapQUANT(x,fobj,...)

Arguments

obs

numeric vector, column matrix or data.frame with observed time series.

mod

numeric vector, column matrix or data.frame with modelled time series, corresponding to obs.

wet.day

logical indicating whether to perform wet day correction or not. OR a numeric threshold below which all values are set to zero. See details.

qstep

a numeric value between 0 and 1. The quantile mapping is fitted only for the quantiles defined by quantile(0,1,probs=seq(0,1,by=qstep).

nboot

number of bootstrap samples used for estimation of the observed quantiles. If nboot==1 the estimation is based on all (and not resampled) data. See details.

x

numeric vector or a column matrix of modelled time series

fobj

output from fitQmapQUANT

type

type of interpolation between the fitted transformed values. See details.

...

Further arguments passed to methods

Details

fitQmapQUANT estimates the empirical cumulative distribution function of mod and obs for the quantiles defined by seq(0,1,by=qstep). The quantiles of mod are estimated using the empirical quantiles. If nboot>1 the quantiles of obs are estimated as the mean of nboot bootstrap samples (if nboot>1).

doQmapQUANT transforms the variable x based on the transformation identified using fitQmapQUANT. For all values that are not in quantile(mod,probs=seq(0,1,by=qstep)) the transformation is estimated using interpolation of the fitted values. Available interpolation options are:

type="linear": linear interpolation using approx, but using the extrapolation suggested by Boe et al. (2007) for values of x larger than max(mod) (constant correction).

type="tricube": monotonic tricubic spline interpolation using splinefun. Spline interpolation is performed using a _monotone_ Hermite spline (method="monoH.FC" in splinefun).

wet.day is intended for the use for precipitation data. Wet day correction attempts to equalise the fraction of days with precipitation between the observed and the modelled data. If wet.day=TRUE the empirical probability of nonzero observations is found (obs>=0) and the corresponding modelled value is selected as a threshold. All modelled values below this threshold are set to zero. If wet.day is numeric the same procedure is performed after setting all obs<wet.day to zero.

Value

fitQmapQUANT returns an object of class fitQmapQUANT containing following elements:

par

A list containing:

par$modq

a matrix. Each column i corresponds to the output of quantile(mod[,i],probs=seq(0,1,by=qstep)).

par$fitq

observed empirical quantiles corresponding to par$modq.

wet.day

logical, indicating whether to perform wet day correction or not. OR a numeric threshold below which all values are set to zero.

doQmapQUANT returns a numeric vector or matrix depending on the format of x.

Author(s)

Lukas Gudmundsson

References

Boe, J.; Terray, L.; Habets, F. & Martin, E. Statistical and dynamical downscaling of the Seine basin climate for hydro-meteorological studies. International Journal of Climatology, 2007, 27, 1643-1655, doi: 10.1002/joc.1602.

For a general assessment of the methods see:

Gudmundsson, L.; Bremnes, J. B.; Haugen, J. E. & Engen-Skaugen, T. Technical Note: Downscaling RCM precipitation to the station scale using statistical transformations - a comparison of methods. Hydrology and Earth System Sciences, 2012, 16, 3383-3390, doi:10.5194/hess-16-3383-2012.

See Also

fitQmap

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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
data(obsprecip)
data(modprecip)

qm.fit <- fitQmapQUANT(obsprecip[,2],modprecip[,2],
                      qstep=0.1,nboot=1,wet.day=TRUE)
qm.a <- doQmapQUANT(modprecip[,2],qm.fit,type="linear")
qm.s <- doQmapQUANT(modprecip[,2],qm.fit,type="tricub")


sqrtquant <- function(x,qstep=0.01){
  qq <- quantile(x,prob=seq(0,1,by=qstep))
  sqrt(qq)
}

plot(sqrtquant(modprecip[,2]),
     sqrtquant(obsprecip[,2]))
lines(sqrtquant(modprecip[,2]),
      sqrtquant(qm.a),col="red")
lines(sqrtquant(modprecip[,2]),
      sqrtquant(qm.s),col="blue")
points(sqrt(qm.fit$par$modq),sqrt(qm.fit$par$fitq),
       pch=19,cex=0.5,col="green")
legend("topleft",
       legend=c("linear","tricub","support"),
       lty=c(1,1,NA),pch=c(NA,NA,19),
       col=c("red","blue","green"))
         

qm2.fit <- fitQmapQUANT(obsprecip,modprecip,
                      qstep=0.01,nboot=1,wet.day=TRUE)
qm2 <- doQmapQUANT(modprecip,qm2.fit,type="tricub")

op <- par(mfrow=c(1,3))
for(i in 1:3){
  plot(sqrtquant(modprecip[,i]),
       sqrtquant(obsprecip[,i]),
       main=names(qm2)[i])
  lines(sqrtquant(modprecip[,i]),
        sqrtquant(qm2[,i]),col="red")
  points(sqrt(qm2.fit$par$modq[,i]),
         sqrt(qm2.fit$par$fitq[,i]),
       pch=19,cex=0.5,col="green")

}
par(op)