fitQmapQUANT {qmap} | R Documentation |
Non-parametric quantile mapping using empirical quantiles.
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
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 |
|
mod |
|
wet.day |
|
qstep |
a numeric value between 0 and 1. The quantile mapping is fitted only
for the quantiles defined by
|
nboot |
number of bootstrap samples used for estimation of the observed
quantiles. If |
x |
|
fobj |
output from |
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 |
par$fitq |
observed empirical quantiles corresponding to |
wet.day |
|
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
Examples
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)