-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #22 from USEPA/develop
CRAN v0.7.0
- Loading branch information
Showing
142 changed files
with
18,097 additions
and
6,506 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,58 @@ | ||
#' Area Under Receiver Operating Characteristic Curve | ||
#' | ||
#' @description Compare area under the receiver operating characteristic curve (AUROC) for binary (e.g., | ||
#' logistic) models. The area under the ROC curve provides a measure of the | ||
#' model's classification accuracy averaged over all possible threshold values. | ||
#' | ||
#' @param object A fitted model object from [spglm()] or [spgautor()]) where \code{family = "binomial"} | ||
#' and the response values are binary, representing a single success or failure for each datum. | ||
#' @param ... Additional arguments to [pROC::auc()]. | ||
#' | ||
#' @return The area under the receiver operating characteristic curve. | ||
#' | ||
#' @order 1 | ||
#' @export | ||
#' | ||
#' @examples | ||
#' spgmod <- spglm(presence ~ elev, | ||
#' family = "binomial", data = moose, | ||
#' spcov_type = "exponential" | ||
#' ) | ||
#' AUROC(spgmod) | ||
#' @references | ||
#' Robin, X., Turck, N., Hainard, A., Tiberti, N., Lisacek, F., Sanchez, J. C., & Müller, M. | ||
#' (2011). pROC: an open-source package for R and S+ to analyze and compare ROC curves. | ||
#' \emph{BMC bioinformatics}, 12, 1-8. | ||
AUROC <- function(object, ...) { | ||
UseMethod("AUROC", object) | ||
} | ||
|
||
#' @rdname AUROC | ||
#' @method AUROC spglm | ||
#' @order 2 | ||
#' @export | ||
AUROC.spglm <- function(object, ...) { | ||
if (!requireNamespace("pROC", quietly = TRUE)) { | ||
stop("Install the pROC package before using AUROC().", call. = FALSE) | ||
} else { | ||
|
||
if (object$family != "binomial") { | ||
stop("AUROC() only available when family is \"binomial\".", call. = FALSE) | ||
} | ||
|
||
if (any(object$size != 1)) { | ||
stop("AUROC() only available for binary models (i.e., models whose response indicates a single success or failure).", call. = FALSE) | ||
} | ||
dotlist <- list(...) | ||
if (!("quiet" %in% names(dotlist))) { | ||
dotlist$quiet <- TRUE | ||
} | ||
as.numeric(do.call(pROC::auc, c(list(response = as.vector(object$y), predictor = fitted(object)), dotlist))) | ||
} | ||
} | ||
|
||
#' @rdname AUROC | ||
#' @method AUROC spgautor | ||
#' @order 3 | ||
#' @export | ||
AUROC.spgautor <- AUROC.spglm |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,127 @@ | ||
#' Compute BIC of fitted model objects | ||
#' | ||
#' @description Compute BIC for one or | ||
#' several fitted model objects for which a log-likelihood | ||
#' value can be obtained. | ||
#' | ||
#' @param object A fitted model object from [splm()], [spautor()], [spglm()], or [spgautor()] | ||
#' where \code{estmethod} is \code{"ml"} or \code{"reml"}. | ||
#' @param ... Optionally more fitted model objects. | ||
#' | ||
#' @details When comparing models fit by maximum or restricted maximum | ||
#' likelihood, the smaller the BIC, the better the fit. The theory of | ||
#' BIC requires that the log-likelihood has been maximized, and hence, | ||
#' no BIC methods exist for models where \code{estmethod} is not | ||
#' \code{"ml"} or \code{"reml"}. Additionally, BIC comparisons between \code{"ml"} | ||
#' and \code{"reml"} models are meaningless -- comparisons should only be made | ||
#' within a set of models estimated using \code{"ml"} or a set of models estimated | ||
#' using \code{"reml"}. BIC comparisons for \code{"reml"} must | ||
#' use the same fixed effects. To vary the covariance parameters and | ||
#' fixed effects simultaneously, use \code{"ml"}. | ||
#' | ||
#' BIC is defined as \eqn{-2loglik + log(n)(estparams)}, where \eqn{n} is the sample size | ||
#' and \eqn{estparams} is the number of estimated parameters. For \code{"ml"}, \eqn{estparams} is | ||
#' the number of estimated covariance parameters plus the number of estimated | ||
#' fixed effects. For \code{"reml"}, \eqn{estparams} is the number of estimated covariance | ||
#' parameters. | ||
#' | ||
#' @return If just one object is provided, a numeric value with the corresponding | ||
#' BIC. | ||
#' | ||
#' If multiple objects are provided, a \code{data.frame} with rows corresponding | ||
#' to the objects and columns representing the number of parameters estimated | ||
#' (\code{df}) and the BIC. | ||
#' | ||
#' @name BIC.spmodel | ||
#' @method BIC splm | ||
#' @order 1 | ||
#' @export | ||
#' | ||
#' @examples | ||
#' spmod <- splm(z ~ water + tarp, | ||
#' data = caribou, | ||
#' spcov_type = "exponential", xcoord = x, ycoord = y | ||
#' ) | ||
#' BIC(spmod) | ||
BIC.splm <- function(object, ...) { | ||
|
||
# set k as log of sample size | ||
k <- log(object$n) | ||
|
||
# store object and ... | ||
object_list <- list(object, ...) | ||
|
||
# see if ... has any elements | ||
if (length(object_list) == 1) { | ||
|
||
# number of estimated parameters | ||
if (object$estmethod == "ml") { | ||
n_est_param <- object$npar + object$p | ||
} else { | ||
n_est_param <- object$npar | ||
} | ||
|
||
# error if not ml or reml | ||
if (!object$estmethod %in% c("ml", "reml")) { | ||
stop("BIC is only defined is estmethod is \"ml\" or \"reml\".", call. = FALSE) | ||
} | ||
# compute BIC | ||
BIC_val <- -2 * logLik(object) + k * (n_est_param) | ||
} else { | ||
|
||
|
||
# warning if ml and reml in same call | ||
est_methods <- vapply(object_list, function(x) x$estmethod, character(1)) | ||
if ("ml" %in% est_methods && "reml" %in% est_methods) { | ||
warning("BIC and BICc should not compare models fit with | ||
\"ml\" to models fit with \"reml\"", call. = FALSE) | ||
} | ||
|
||
# warning if reml and fixed effects change | ||
est_methods_reml <- which(est_methods == "reml") | ||
if (length(est_methods_reml) > 1) { | ||
if (any(vapply( | ||
est_methods_reml, | ||
function(x) !identical(formula(object_list[[x]]), formula(object_list[[1]])), logical(1) | ||
))) { | ||
warning("BIC and BICc should not be used to compare models fit with \"reml\" whose fixed effect formulas differ.", call. = FALSE) | ||
} | ||
} | ||
|
||
# find model names provided | ||
object_list_names <- as.character(c(substitute(object), (as.list(substitute(list(...)))[-1]))) | ||
|
||
# error if any names duplicated | ||
if (any(duplicated(object_list_names))) { | ||
stop("Each model object must have a unique name", call. = FALSE) | ||
} | ||
# iterate through each model | ||
object_BIC <- lapply(object_list, function(x) { | ||
# warning if estmethod not ml or reml | ||
if (!object$estmethod %in% c("ml", "reml")) { | ||
stop("BIC is only defined is estmethod is \"ml\" or \"reml\".", call. = FALSE) | ||
} | ||
|
||
if (x$estmethod == "ml") { | ||
n_est_param <- x$npar + x$p | ||
} else { | ||
n_est_param <- x$npar | ||
} | ||
|
||
# store degrees of freedom (parames estimated) and BIC | ||
data.frame(df = n_est_param, BIC = -2 * logLik(x) + k * (n_est_param)) | ||
}) | ||
# put all BIC data frames together | ||
BIC_val <- do.call("rbind", object_BIC) | ||
# set rownames as model names | ||
row.names(BIC_val) <- object_list_names | ||
} | ||
# return BIC value | ||
BIC_val | ||
} | ||
|
||
#' @rdname BIC.spmodel | ||
#' @method BIC spautor | ||
#' @order 2 | ||
#' @export | ||
BIC.spautor <- BIC.splm |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
#' @rdname BIC.spmodel | ||
#' @method BIC spglm | ||
#' @order 3 | ||
#' @export | ||
BIC.spglm <- BIC.splm | ||
|
||
#' @rdname BIC.spmodel | ||
#' @method BIC spgautor | ||
#' @order 4 | ||
#' @export | ||
BIC.spgautor <- BIC.spautor |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.