Bayesian Outbreak Detection in the Presence of Reporting Delays
bodaDelay.RdThe function takes range values of the surveillance time
series sts and for each time point uses a Bayesian model of the negative binomial family with
log link inspired by the work of Noufaily et al. (2012) and of Manitz and Höhle (2014). It allows delay-corrected aberration detection as explained in Salmon et al. (2015). A reportingTriangle has to be provided in the control slot.
Arguments
- sts
sts-object to be analysed. Needs to have a reporting triangle.
- control
list of control arguments:
bHow many years back in time to include when forming the base counts.
wWindow's half-size, i.e. number of weeks to include before and after the current week in each year.
rangeSpecifies the index of all timepoints which should be tested. If range is
NULLall possible timepoints are used.pastAberrationsBoolean indicating whether to include an effect for past outbreaks in a second fit of the model. This option only makes sense if
inferenceMethodisINLA, as it is not supported by the other inference method.verboseBoolean specifying whether to show extra debugging information.
alphaAn approximate (one-sided) \((1-\alpha)\cdot 100\%\) prediction interval is calculated unlike the original method where it was a two-sided interval. The upper limit of this interval i.e. the \((1-\alpha)\cdot 100\%\) quantile serves as an upperbound.
trendBoolean indicating whether a trend should be included
noPeriodsNumber of levels in the factor allowing to use more baseline. If equal to 1 no factor variable is created, the set of reference values is defined as in Farrington et al (1996).
inferenceMethodWhich inference method used, as defined in Salmon et al. (2015). If one chooses
"INLA"then inference is performed with INLA. If one chooses"asym"(default) then the asymptotic normal approximation of the posteriori is used.pastWeeksNotIncludedNumber of past weeks to ignore in the calculation. The default (
NULL) means to use the value ofcontrol$w.delayBoolean indicating whether to take reporting delays into account.
mc.munuNumber of samples for the parameters of the negative binomial distribution for calculating a threshold
mc.yNumber of samples for observations when performing Monte Carlo to calculate a threshold
limit54c(cases,period) is a vector allowing the user to change these numbers.
quantileMethodCharacter, either
"MC"(default) or"MM". Indicates how to compute the quantile based on the posterior distribution (no matter the inference method): either by samplingmc.munuvalues from the posterior distribution of the parameters and then for each sampled parameters vector samplingmc.yresponse values so that one gets a vector of response values based on which one computes an empirical quantile (MC method, as explained in Salmon et al. 2015); or by samplingmc.munufrom the posterior distribution of the parameters and then compute the quantile of the mixture distribution using bisectioning, which is faster.
References
Farrington, C.P., Andrews, N.J, Beale A.D. and Catchpole, M.A. (1996): A statistical algorithm for the early detection of outbreaks of infectious disease. J. R. Statist. Soc. A, 159, 547-563.
Noufaily, A., Enki, D.G., Farrington, C.P., Garthwaite, P., Andrews, N.J., Charlett, A. (2012): An improved algorithm for outbreak detection in multiple surveillance systems. Statistics in Medicine, 32 (7), 1206-1222.
Salmon, M., Schumacher, D., Stark, K., Höhle, M. (2015): Bayesian outbreak detection in the presence of reporting delays. Biometrical Journal, 57 (6), 1051-1067.
Examples
if (FALSE) { # \dontrun{
data("stsNewport")
salm.Normal <- list()
salmDelayAsym <- list()
for (week in 43:45){
listWeeks <- as.Date(row.names(stsNewport@control$reportingTriangle$n))
dateObs <- listWeeks[isoWeekYear(listWeeks)$ISOYear==2011 &
isoWeekYear(listWeeks)$ISOWeek==week]
stsC <- sts_observation(stsNewport,
dateObservation=dateObs,
cut=TRUE)
inWeeks <- with(isoWeekYear(epoch(stsC)),
ISOYear == 2011 & ISOWeek >= 40 & ISOWeek <= 48)
rangeTest <- which(inWeeks)
alpha <- 0.07
# Control slot for Noufaily method
controlNoufaily <- list(range=rangeTest,noPeriods=10,
b=4,w=3,weightsThreshold=2.58,pastWeeksNotIncluded=26,
pThresholdTrend=1,thresholdMethod="nbPlugin",alpha=alpha*2,
limit54=c(0,50))
# Control slot for the Proposed algorithm with D=0 correction
controlNormal <- list(range = rangeTest, b = 4, w = 3,
reweight = TRUE, mc.munu=10000, mc.y=100,
verbose = FALSE,
alpha = alpha, trend = TRUE,
limit54=c(0,50),
noPeriods = 10, pastWeeksNotIncluded = 26,
delay=FALSE)
# Control slot for the Proposed algorithm with D=10 correction
controlDelayNorm <- list(range = rangeTest, b = 4, w = 3,
reweight = FALSE, mc.munu=10000, mc.y=100,
verbose = FALSE,
alpha = alpha, trend = TRUE,
limit54=c(0,50),
noPeriods = 10, pastWeeksNotIncluded = 26,
delay=TRUE,inferenceMethod="asym")
set.seed(1)
salm.Normal[[week]] <- farringtonFlexible(stsC, controlNoufaily)
salmDelayAsym[[week]] <- bodaDelay(stsC, controlDelayNorm)
}
opar <- par(mfrow=c(2,3))
lapply(salmDelayAsym[c(43,44,45)],plot, legend=NULL, main="", ylim=c(0,35))
lapply(salm.Normal[c(43,44,45)],plot, legend=NULL, main="", ylim=c(0,35))
par(opar)
} # }