Nothing
# File pfactor.R
# Part of the hydroGOF R package, https://github.com/hzambran/hydroGOF ;
# https://cran.r-project.org/package=hydroGOF
# http://www.rforge.net/hydroGOF/
# Copyright 2010-2024 Mauricio Zambrano-Bigiarini
# Distributed under GPL 2 or later
##########################################################################
# pfactor: % of observations that are within the given uncertainty bounds#
##########################################################################
# Date: 24-Jan-2010 #
##########################################################################
# 'x' : ts or 'zoo' object with the simulated values
# 'lband' : ts or 'zoo' object with the values of the lower uncertainty bound
# 'uband' : ts or 'zoo' object with the values of the upper uncertainty bound
# Ideally, i.e., with a combination of model structure and parameter values
# that perfectly represents the catchment under study, and in absence of
# measurement errors and other additional sources of uncertainty, all the
# simulated values should be in a perfect match with the observations,
# leading to a P-factor equal to 1, and an R-factor equal to zero.
# However, in real-world applications we aim at encompassing as much
# observations as possible within the given uncertainty bounds
# (P-factor close to 1) while keeping the width of the uncertainty bounds
# as small as possible (R-factor close to 0), in order to avoid obtaining
# a good bracketing of observations at expense of uncertainty bounds too
# wide to be informative for the decision-making process.
# Refs:
# Abbaspour, K. C., M. Faramarzi, S. S. Ghasemi, and H. Yang (2009),
# Assessing the impact of climate change on water resources in Iran,
# Water Resour. Res., 45(10), W10,434, doi:10.1029/2008WR007615. \cr
# Abbaspour, K. C., J. Yang, I. Maximov, R. Siber, K. Bogner, J. Mieleitner,
# J. Zobrist, and R. Srinivasan (2007), Modelling hydrology and water quality
# in the pre-alpine/alpine Thur watershed using SWAT, Journal of Hydrology,
# 333(2-4), 413-430, doi:10.1016/j.jhydrol.2006.09.014.
# Schuol, J., K. Abbaspour, R. Srinivasan, and H. Yang (2008b),
# Estimation of freshwater availability in the West African sub-continent
# using the SWAT hydrologic model, Journal of Hydrology, 352(1-2), 30,
# doi:10.1016/j.jhydrol.2007.12.025. \cr
# Abbaspour, C., Karim (2007), User manual for SWAT-CUP, SWAT calibration
# and uncertainty analysis programs, 93pp, Eawag: Swiss Fed. Inst. of Aquat. Sci. and
# Technol. Dubendorf, Switzerland, Available at http://www.eawag.ch/organisation/abteilungen/siam/software/swat/index_EN
pfactor <- function(x, ...) UseMethod("pfactor")
pfactor.default <- function(x, lband, uband, na.rm=TRUE, ...) {
# Just in case 'some' of them be ts or 'zoo'
x <- as.numeric(x)
lband <- as.numeric(lband)
uband <- as.numeric(uband)
# Getting the row index in 'q95' of all the observations that are within L95PPU and U95PPU
within.index <- which((lband <= x) & (x <= uband) )
L <- length( x )
if ( L > 0) {
pfactor <- length( within.index ) / L
} else {
pfactor <- NA
warning("'length(x)=0', it is not possible to compute 'pfactor'")
} # ELSE end
return(pfactor)
} # 'pfactor.default' end
pfactor.matrix <- function (x, lband, uband, na.rm=TRUE, ...){
# Checking that 'x' and 'lband', 'uband' have the same dimensions
if ( all.equal(dim(x), dim(lband), , dim(uband)) != TRUE )
stop( paste("Invalid argument: 'dim(x)', 'dim(lband)', and/or 'dim(uband)' doesn't match ( [",
paste(dim(x), collapse=" "), "], [",
paste(dim(lband), collapse=" "), "], [",
paste(dim(uband), collapse=" "), "] )", sep="") )
pfactor <- rep(NA, ncol(x))
pfactor <- sapply(1:ncol(x), function(i,x,l,u) {
pfactor[i] <- pfactor.default( x[,i], l[,i], u[i], na.rm=na.rm, ... )
}, x=x, l=lband, u=uband )
return(pfactor)
} # 'pfactor.matrix' end
pfactor.data.frame <- function (x, lband, uband, na.rm=TRUE, ...){
x <- as.matrix(x)
lband <- as.matrix(lband)
uband <- as.matrix(uband)
pfactor.matrix(x, lband, uband, na.rm=na.rm, ...)
} # 'pfactor.data.frame' end
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.