| fitQmapQUANT | R Documentation |
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.
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,...)
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 |
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.
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.
Lukas Gudmundsson
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>.
fitQmap
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)
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.