Statistical (or categorical) evaluation from 2 data.frames. The input data.frames (model and observation) must contain a "date" column (containing POSIXlt). The function perform some simple case tests and perform the time pairing of observations and model data and can calculate the statistical evaluation or categorical evaluation.
Usage
eva(
mo,
ob,
rname = site,
table = NULL,
site = "ALL",
wd = FALSE,
fair = NULL,
cutoff = NA,
cutoff_NME = NA,
no_tz = FALSE,
nobs = 8,
eval_function = stat,
time = "date",
verbose = TRUE,
...
)
Arguments
- mo
data.frame with model data
- ob
data.frame with observation data
- rname
row name of the output (default is site argument)
- table
data.frame to append the results
- site
name of the stations or "ALL" (default), see notes
- wd
default is FALSE, see notes
- fair
model data.frame (or list of names) to perform a fair comparison, see notes
- cutoff
minimum (optionally the maximum) valid value for observation
- cutoff_NME
minimum (optionally the maximum) valid value for observation for NME
- no_tz
ignore tz from input (force GMT)
- nobs
minimum number of valid observations, default is 8
- eval_function
evaluation function (default is stat)
- time
name of the time column (containing time in POSIXct)
- verbose
display additional information
- ...
arguments to be passing to stats and plot
Note
fair can be a data.frame or a character string to be used for the analysis, alternatively the function
for wind direction a rotation of 360 (or -360) is applied to minimize the wind direction difference.
If site == 'ALL' (default) all the columns from observations are combined in one column (same for observation) and all the columns are evaluated together.
Special thanks to Kiarash and Libo to help to test the wind direction option.
Examples
model <- readRDS(paste0(system.file("extdata",package="eva3dm"),
"/model.Rds"))
obs <- readRDS(paste0(system.file("extdata",package="eva3dm"),
"/obs.Rds"))
# if there is no observed data
# the function return an empty row
table <- eva(mo = model, ob = obs, site = "VVIbes")
#> VVIbes has only 0 valid observations (lesser than 8 obs)
print(table)
#> n Obs Sim r IOA FA2 RMSE MB ME NMB (%) NME (%)
#> VVIbes 0 NA NA NA NA NA NA NA NA NA NA
# if the site are not in the input data frame a message is displayed
# and the function return an empty row
table <- eva(mo = model, ob = obs, site = "Ibirapuera")
#> Ibirapuera not found in observation input
print(table)
#> n Obs Sim r IOA FA2 RMSE MB ME NMB (%) NME (%)
#> Ibirapuera 0 NA NA NA NA NA NA NA NA NA NA
# calculating statistical with a few observed values
table <- eva(mo = model, ob = obs, site = "Americana")
#> Americana has 227 valid observations
print(table)
#> n Obs Sim r IOA FA2 RMSE
#> Americana 227 40.92952 18.18197 0.6492022 0.5934335 0.4229075 32.47269
#> MB ME NMB (%) NME (%)
#> Americana -22.74754 24.10165 -55.57735 58.88575
# calculating categorical (using 2 for threshold) with a few observed values
table <- eva(mo = model, ob = obs, site = "Americana",
eval_function = cate, threshold = 2)
#> Americana has 227 valid observations
print(table)
#> n Obs Sim thr A CSI POD B
#> Americana 227 40.92952 18.18197 2 93.39207 93.36283 97.23502 101.3825
#> FAR HSS PSS
#> Americana 4.090909 8.44313 7.235023
# calculating categorical (using 2 for threshold) with a few observed values
table <- eva(mo = model, ob = obs, site = "Americana",
eval_function = cate, threshold = 10)
#> Americana has 227 valid observations
print(table)
#> n Obs Sim thr A CSI POD B FAR
#> Americana 227 40.92952 18.18197 10 74.00881 71.90476 75.12438 79.60199 5.625
#> HSS PSS
#> Americana 24.01997 40.50899