#' @title Get hospitalizations
#' @description Gets the total hospitalizations from the given model
#' @details This is the generic function, for class-specific versions see:
#' \itemize{
#' \item \code{\link{getHospitalizations.SEIRModel}} for SEIR-type models
#' \item \code{\link{getHospitalizations.SEIRTModel}} for SEIRT-type models
#' }
#' @param model A flumodels model object
#' @param ... Other parameters for the class-specific functions
#' @export
getHospitalizations <- function(model, ...) {
UseMethod("getHospitalizations", model)
}
#SEIR
#' @title Get hospitalizations
#' @description Gets the total hospitalizations from the given model
#' @param model The model from which to get the data
#' @param byGroup Whether or not to return data by population group; defaults to TRUE
#' @param asRate Whether to return results as a rate (fraction of population) or else a number; defaults to FALSE
#' @param fractionSymptomatic The fraction of cases that are symptomatic; single fraction or vector of fractions by population group; must be specified
#' @param caseHospitalizationRatio The fraction of cases that are hospitalized; single fraction or vector of fractions by population group; must be specified
#' @return A vector of hospitalizations or hospitalization rates
#' @method getHospitalizations SEIRModel
#' @keywords internal
#' @export
getHospitalizations.SEIRModel <- function(model, byGroup = TRUE, asRate = FALSE, fractionSymptomatic, caseHospitalizationRatio) {
if (missing(fractionSymptomatic)) {
stop("fractionSymptomatic must be specified.")
}
checkBetween0and1(fractionSymptomatic)
checkDimensionsMatch(fractionSymptomatic, model$parameters$populationFractions)
if (missing(caseHospitalizationRatio)) {
stop("caseHospitalizationRatio must be specified.")
}
checkBetween0and1(caseHospitalizationRatio)
checkDimensionsMatch(caseHospitalizationRatio, model$parameters$populationFractions)
hospitalizations <- caseHospitalizationRatio * getInfections(model, byGroup = TRUE, asRate = asRate, symptomatic = TRUE, fractionSymptomatic = fractionSymptomatic)
if (asRate) {
names(hospitalizations) <- getLabels("hospitalizationRate", length(model$parameters$populationFractions))
} else { #Number
names(hospitalizations) <- getLabels("hospitalizations", length(model$parameters$populationFractions))
}
if (byGroup) {
return(hospitalizations)
} else {
return(sum(hospitalizations))
}
}
#SEIRT
#' @title Get hospitalizations
#' @description Gets the total hospitalizations from the given model
#' @param model The model from which to get the data
#' @param byGroup Whether or not to return data by population group; defaults to TRUE
#' @param asRate Whether to return results as a rate (fraction of population) or else a number; defaults to FALSE
#' @param caseHospitalizationRatio The fraction of cases that are hospitalized; single fraction or vector of fractions by population group; must be specified
#' @return A vector of hospitalizations or hospitalization rates
#' @method getHospitalizations SEIRTModel
#' @keywords internal
#' @export
getHospitalizations.SEIRTModel <- function(model, byGroup = TRUE, asRate = FALSE, caseHospitalizationRatio) {
if (missing(caseHospitalizationRatio)) {
stop("caseHospitalizationRatio must be specified.")
}
AVEp.outpatient.eff <- model$parameters$AVEp *
model$parameters$fractionAdhere *
model$parameters$fractionDiagnosedAndPrescribedOutpatient *
model$parameters$fractionSeekCare
hospitalizations <- getInfections(model, byGroup = TRUE, asRate = asRate, symptomatic = TRUE) * (1 - AVEp.outpatient.eff) *
caseHospitalizationRatio
if (asRate) {
names(hospitalizations) <- getLabels("hospitalizationRate", length(model$parameters$populationFractions))
} else { #Number
names(hospitalizations) <- getLabels("hospitalizations", length(model$parameters$populationFractions))
}
if (byGroup) {
return(hospitalizations)
} else {
return(sum(hospitalizations))
}
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.