contBoyce: Continuous Boyce Index (CBI) with weighting

View source: R/contBoyce.r

contBoyceR Documentation

Continuous Boyce Index (CBI) with weighting

Description

This function calculates the continuous Boyce index (CBI), a measure of model accuracy for presence-only test data. This version uses multiple, overlapping windows, in contrast to link{contBoyce2x}, which covers each point by at most two windows.

Usage

contBoyce(
  pres,
  contrast,
  numBins = 101,
  binWidth = 0.1,
  presWeight = rep(1, length(pres)),
  contrastWeight = rep(1, length(contrast)),
  autoWindow = TRUE,
  method = "spearman",
  dropZeros = TRUE,
  graph = FALSE,
  na.rm = FALSE,
  bg = NULL,
  bgWeight = NULL,
  ...
)

Arguments

pres

Numeric vector. Predicted values at presence sites.

contrast

Numeric vector. Predicted values at background sites.

numBins

Positive integer. Number of (overlapping) bins into which to divide predictions.

binWidth

Positive numeric value < 1. Size of a bin. Each bin will be binWidth * (max - min). If autoWindow is FALSE (the default) then min is 0 and max is 1. If autoWindow is TRUE then min and max are the maximum and minimum value of all predictions in the background and presence sets (i.e., not necessarily 0 and 1).

presWeight

Numeric vector same length as pres. Relative weights of presence sites. The default is to assign each presence a weight of 1.

contrastWeight

Numeric vector same length as contrast. Relative weights of background sites. The default is to assign each presence a weight of 1.

autoWindow

Logical. If FALSE calculate bin boundaries starting at 0 and ending at 1 + epsilon (where epsilon is a very small number to assure inclusion of cases that equal 1 exactly). If TRUE (default) then calculate bin boundaries starting at minimum predicted value and ending at maximum predicted value.

method

Character. Type of correlation to calculate. The default is 'spearman', the Spearman rank correlation coefficient used by Boyce et al. (2002) and Hirzel et al. (2006), which is the "traditional" CBI. In contrast, 'pearson' or 'kendall' can be used instead. See cor for more details.

dropZeros

Logical. If TRUE then drop all bins in which the frequency of presences is 0.

graph

Logical. If TRUE then plot P vs E and P/E versus bin.

na.rm

Logical. If TRUE then remove any presences and associated weights and background predictions and associated weights with NAs.

bg

Same as contrast. Included for backwards compatibility. Ignored if contrast is not NULL.

bgWeight

Same as contrastWeight. Included for backwards compatibility. Ignored if contrastWeight is not NULL.

...

Other arguments (not used).

Details

CBI is the Spearman rank correlation coefficient between the proportion of sites in each prediction class and the expected proportion of predictions in each prediction class based on the proportion of the landscape that is in that class. The index ranges from -1 to 1. Values >0 indicate the model's output is positively correlated with the true probability of presence. Values <0 indicate it is negatively correlated with the true probability of presence.

Value

Numeric value.

References

Boyce, M.S., Vernier, P.R., Nielsen, S.E., and Schmiegelow, F.K.A. 2002. Evaluating resource selection functions. Ecological Modeling 157:281-300. doi: 10.1016/S0304-3800(02)00200-4

Hirzel, A.H., Le Lay, G., Helfer, V., Randon, C., and Guisan, A. 2006. Evaluating the ability of habitat suitability models to predict species presences. Ecological Modeling 199:142-152. doi: 10.1016/j.ecolmodel.2006.05.017

See Also

cor, link[enmSdm]{contBoyce2x}

Examples


set.seed(123)
pres <- sqrt(runif(100))
contrast <- runif(1000)
contBoyce(pres, contrast)
contBoyce2x(pres, contrast)
presWeight <- c(rep(1, 10), rep(0.5, 90))
contBoyce(pres, contrast, presWeight=presWeight)
contBoyce2x(pres, contrast, presWeight=presWeight)
## Not run: 
# compare stability of CBI calculated with ecospat.boyce() in ecospat package
library(ecospat)
set.seed(123)
results <- data.frame()
for (perform in c(1, 1.5, 2)) {
	for (i in 1:30) {

   pres <- runif(100)^(1 / perform)
   contrast <- runif(1000)

   cbi_enmSdm <- contBoyce(pres, contrast)
   cbi_ecospat <- ecospat.boyce(contrast, pres, PEplot=FALSE)$Spearman.cor

   results <- rbind(
     results,
     data.frame(
       performance = rep(perform, 2),
       method = c('enmSdm', 'ecospat'),
       cbi = c(cbi_enmSdm, cbi_ecospat)
     )
   )

	}

}

results$performance[results$performance == 1] <- 'poor'
results$performance[results$performance == 1.5] <- 'OK'
results$performance[results$performance == 2] <- 'good'

results$category <- paste0(results$method, '\n', results$performance)

par(mfrow=c(1, 2))
boxplot(cbi ~ category,
	data=results,
	ylab='CBI',
	main='CBI of poor, OK, and good models',
	border=c(rep('darkred', 3),
	rep('darkblue', 3))
)
plot(results$cbi,
	pch=rep(c(21, 22, 23, 24), each=2),
	contrast=ifelse(results$method == 'ecospat', 'darkred', 'cornflowerblue'),
	main='Pairs of CBIs',
	ylab='CBI'
)
legend('bottomright', fill=c('darkred', 'cornflowerblue'), legend=c('ecospat', 'enmSdm'))

## End(Not run)


adamlilith/enmSdm documentation built on Jan. 6, 2023, 11 a.m.