A receiver operating characteristic (ROC) curve shows the ability of a binary classifier. Here it is applied to compare two sets of values, stored as two FLQuant objects. The first is the result of applying a logical comparison of a given state against a reference value, so it contains a binary (0, 1) label. The second, the score, contains an alternative metric that attempts to measure the absolute value of the first. The examples below compare an observation of stock status, SSB being less than a reference point, and an alternative metric, here the catch curve estimates of total mortality.
Computes the area under the receiver operating characteristic curve (AUC) using the trapezoidal rule applied to the true positive rate (TPR) and false positive rate (FPR). AUC ranges from 0 to 1; a value of 0.5 indicates no discriminating ability (equivalent to random guessing), while a value of 1 indicates perfect discrimination.
Usage
roc(label, ind, direction = c(">=", "<="))
auc(x = NULL, TPR = x$TPR, FPR = x$FPR)Arguments
- label
Logical, integer (0/1), or
FLQuantgiving the true class for each observation (1 = positive, 0 = negative). Non-logical values are coerced to 0/1. Labels must not be all 0 or all 1.- ind
Numeric vector or
FLQuantof indicator / score values used to rank observations.- direction
Character scalar, one of
">="(default) or"<=". If">=", largerindvalues are treated as more evidence for the positive class; if"<=", smallerindvalues are treated as more evidence for the positive class.- x
A
data.framereturned by roc, from whichTPRandFPRare extracted if not supplied directly. Defaults toNULL.- TPR
Numeric vector of true positive rates, typically
x$TPR.- FPR
Numeric vector of false positive rates, typically
x$FPR.
Value
A data.frame sorted by the chosen threshold order containing
the columns:
- ind
indicator / score values
- label
coerced 0/1 label
- TP, TN, FP, FN
cumulative true/false positive/negative counts
- TPR, FPR
true positive rate and false positive rate
- TSS
True Skill Statistic, computed as TPR - FPR (i.e. tp/(tp+fn) - fp/(fp+tn))
A single numeric value: the area under the ROC curve.
Details
When label and ind are FLQuant objects the function
will propagate them along the 6th dimension if needed. The function checks
that label contains only 0/1 and that both arguments have matching
dimensions. Observations are ordered according to ind (respecting
direction) and cumulative counts and rates are computed.
Examples
data(ple4)
# OM 'reality' on stock status (fbar)
state <- fbar(ple4)[, ac(1960:2017)]
# Model estimates of F using catch curves
ind <- acc(catch.n(ple4)[, ac(1960:2017)])
# Compute TSS, returns data.frame
roc(state >= 0.22, ind)
#> year ind label TP TN FP FN TPR FPR TSS
#> 13 1972 0.2286824 1 1 9 0 48 0.02040816 0.0000000 0.020408163
#> 12 1971 0.2692419 1 2 9 0 47 0.04081633 0.0000000 0.040816327
#> 9 1968 0.3031928 1 3 9 0 46 0.06122449 0.0000000 0.061224490
#> 8 1967 0.3094249 1 4 9 0 45 0.08163265 0.0000000 0.081632653
#> 11 1970 0.3135998 1 5 9 0 44 0.10204082 0.0000000 0.102040816
#> 10 1969 0.3153705 1 6 9 0 43 0.12244898 0.0000000 0.122448980
#> 4 1963 0.3231395 1 7 9 0 42 0.14285714 0.0000000 0.142857143
#> 14 1973 0.3253669 1 8 9 0 41 0.16326531 0.0000000 0.163265306
#> 7 1966 0.3260040 1 9 9 0 40 0.18367347 0.0000000 0.183673469
#> 6 1965 0.3455516 1 10 9 0 39 0.20408163 0.0000000 0.204081633
#> 1 1960 0.3471932 1 11 9 0 38 0.22448980 0.0000000 0.224489796
#> 3 1962 0.3489301 1 12 9 0 37 0.24489796 0.0000000 0.244897959
#> 2 1961 0.3596979 1 13 9 0 36 0.26530612 0.0000000 0.265306122
#> 5 1964 0.3806223 1 14 9 0 35 0.28571429 0.0000000 0.285714286
#> 15 1974 0.3944662 1 15 9 0 34 0.30612245 0.0000000 0.306122449
#> 35 1994 0.4238022 1 16 9 0 33 0.32653061 0.0000000 0.326530612
#> 58 2017 0.4276845 0 16 8 1 33 0.32653061 0.1111111 0.215419501
#> 57 2016 0.4380586 0 16 7 2 33 0.32653061 0.2222222 0.104308390
#> 16 1975 0.4400404 1 17 7 2 32 0.34693878 0.2222222 0.124716553
#> 34 1993 0.4438759 1 18 7 2 31 0.36734694 0.2222222 0.145124717
#> 17 1976 0.4608337 1 19 7 2 30 0.38775510 0.2222222 0.165532880
#> 36 1995 0.4642887 1 20 7 2 29 0.40816327 0.2222222 0.185941043
#> 56 2015 0.4644625 0 20 6 3 29 0.40816327 0.3333333 0.074829932
#> 22 1981 0.4791809 1 21 6 3 28 0.42857143 0.3333333 0.095238095
#> 37 1996 0.4907357 1 22 6 3 27 0.44897959 0.3333333 0.115646259
#> 18 1977 0.4931742 1 23 6 3 26 0.46938776 0.3333333 0.136054422
#> 33 1992 0.5010075 1 24 6 3 25 0.48979592 0.3333333 0.156462585
#> 21 1980 0.5080961 1 25 6 3 24 0.51020408 0.3333333 0.176870748
#> 55 2014 0.5135529 0 25 5 4 24 0.51020408 0.4444444 0.065759637
#> 19 1978 0.5136786 1 26 5 4 23 0.53061224 0.4444444 0.086167800
#> 54 2013 0.5148835 0 26 4 5 23 0.53061224 0.5555556 -0.024943311
#> 20 1979 0.5205015 1 27 4 5 22 0.55102041 0.5555556 -0.004535147
#> 53 2012 0.5211683 0 27 3 6 22 0.55102041 0.6666667 -0.115646259
#> 23 1982 0.5334924 1 28 3 6 21 0.57142857 0.6666667 -0.095238095
#> 32 1991 0.5479495 1 29 3 6 20 0.59183673 0.6666667 -0.074829932
#> 38 1997 0.5721862 1 30 3 6 19 0.61224490 0.6666667 -0.054421769
#> 24 1983 0.5727272 1 31 3 6 18 0.63265306 0.6666667 -0.034013605
#> 52 2011 0.5756761 0 31 2 7 18 0.63265306 0.7777778 -0.145124717
#> 31 1990 0.5793923 1 32 2 7 17 0.65306122 0.7777778 -0.124716553
#> 39 1998 0.5870266 1 33 2 7 16 0.67346939 0.7777778 -0.104308390
#> 25 1984 0.5948203 1 34 2 7 15 0.69387755 0.7777778 -0.083900227
#> 51 2010 0.5961145 0 34 1 8 15 0.69387755 0.8888889 -0.195011338
#> 40 1999 0.6073061 1 35 1 8 14 0.71428571 0.8888889 -0.174603175
#> 30 1989 0.6090999 1 36 1 8 13 0.73469388 0.8888889 -0.154195011
#> 26 1985 0.6143431 1 37 1 8 12 0.75510204 0.8888889 -0.133786848
#> 29 1988 0.6314991 1 38 1 8 11 0.77551020 0.8888889 -0.113378685
#> 50 2009 0.6373167 0 38 0 9 11 0.77551020 1.0000000 -0.224489796
#> 41 2000 0.6438515 1 39 0 9 10 0.79591837 1.0000000 -0.204081633
#> 47 2006 0.6459748 1 40 0 9 9 0.81632653 1.0000000 -0.183673469
#> 46 2005 0.6476648 1 41 0 9 8 0.83673469 1.0000000 -0.163265306
#> 28 1987 0.6534843 1 42 0 9 7 0.85714286 1.0000000 -0.142857143
#> 42 2001 0.6574388 1 43 0 9 6 0.87755102 1.0000000 -0.122448980
#> 49 2008 0.6596211 1 44 0 9 5 0.89795918 1.0000000 -0.102040816
#> 48 2007 0.6657043 1 45 0 9 4 0.91836735 1.0000000 -0.081632653
#> 27 1986 0.6719858 1 46 0 9 3 0.93877551 1.0000000 -0.061224490
#> 44 2003 0.6727245 1 47 0 9 2 0.95918367 1.0000000 -0.040816327
#> 45 2004 0.6789889 1 48 0 9 1 0.97959184 1.0000000 -0.020408163
#> 43 2002 0.7097662 1 49 0 9 0 1.00000000 1.0000000 0.000000000
# Needs ggplot2
if (FALSE) { # \dontrun{
ggplot(roc(state >= 0.22, ind, direction='>='), aes(x=FPR, y=TPR)) +
geom_line() +
geom_abline(slope=1, intercept=0, colour="red", linetype=2)
} # }
# Computes auc using the output of roc()
with(roc(state >= 0.22, ind), auc(TPR=TPR, FPR=FPR))
#> [1] 0.5283447
auc(roc(state >= 0.22, ind))
#> [1] 0.5283447
