evalPars evaluates a model for a named matrix of parameters.

evalPars(
  par.matrix,
  object,
  objective = hydromad.getOption("objective"),
  parallel = hydromad.getOption("parallel")[["evalPars"]]
)

Arguments

par.matrix

Named matrix or data.frame of parameter values, with each row corresponding to a model realisation to evaluate

object

an object of class hydromad.

objective

the objective function or expression, which can refer to Q and X. See objFunVal.hydromad

parallel

Which parallelisation method to use. Options are "clusterApply" and "foreach". For any other value, parameters will be evaluated sequentially. Default is "none". For more information see hydromad_parallelisation.

Value

evalPars returns a vector of objective function values, corresponding to the evaluation of each row of par.matrix.

Details

evalPars is used in conjunction with getFreeParsRanges and the sensitivity package to perform sensitivity analysis. See demo(sensitivity). Note that the objective function may more generally return any scalar result, e.g. a scalar prediction calculated only using X.

Individual model evaluations are generally very fast, so parallelisation is only really worthwhile when large numbers of evaluations are needed. "clusterApply" has a slightly lower overhead. "foreach" allows a broader range of options.

See also

objFunVal.hydromad, parameterSets, getFreeParsRanges

Author

Joseph Guillaume

Examples


data(Cotter)
obs <- Cotter[1:1000]
modx <- hydromad(obs,
  sma = "cmd", routing = "expuh",
  tau_s = c(2, 100), v_s = c(0, 1)
)

## Sample 10 random parameter sets for parameters with defined ranges
pars <- parameterSets(getFreeParsRanges(modx), 10, method = "random")

## Return the default objective function value for each model realisation
evalPars(pars, object = modx)
#>  [1] -1.488325 -1.910287 -1.909738 -1.733584 -1.854090 -1.343927 -1.923026
#>  [8] -1.597585 -1.295125 -1.866547

## Calculate the 20%ile flow for each model realisation
evalPars(pars, object = modx, objective = ~ quantile(X, 0.2))
#>  [1] 4.776152e-05 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00
#>  [6] 1.430479e-02 0.000000e+00 0.000000e+00 1.190551e-05 0.000000e+00

## Alternatively, sample 10 random parameter sets from all parameters
##  This allows specifying discrete values of parameters
pars <- parameterSets(coef(modx, warn = FALSE), 10, method = "random")