CUSUM method
algo.cusum.RdApproximate one-side CUSUM method for a Poisson variate based on the cumulative sum of the deviation between a reference value k and the transformed observed values. An alarm is raised if the cumulative sum equals or exceeds a prespecified decision boundary h. The function can handle time varying expectations.
Usage
algo.cusum(disProgObj, control = list(range = range, k = 1.04, h = 2.26,
m = NULL, trans = "standard", alpha = NULL, reset = FALSE))Arguments
- disProgObj
object of class disProg (including the observed and the state chain)
- control
control object:
rangedetermines the desired time points which should be evaluated
kis the reference value
hthe decision boundary
mhow to determine the expected number of cases – the following arguments are possible
numerica vector of values having the same length as
range. If a single numeric value is specified then this value is replicatedlength(range)times.NULLA single value is estimated by taking the mean of all observations previous to the first
rangevalue."glm"A GLM of the form $$\log(m_t) = \alpha + \beta t + \sum_{s=1}^S (\gamma_s \sin(\omega_s t) + \delta_s \cos(\omega_s t)),$$ where \(\omega_s = \frac{2\pi}{52}s\) are the Fourier frequencies is fitted. Then this model is used to predict the
rangevalues.
transone of the following transformations (warning: Anscombe and NegBin transformations are experimental)
rossistandardized variables z3 as proposed by Rossi
standardstandardized variables z1 (based on asymptotic normality) - This is the default.
anscombeanscombe residuals – experimental
anscombe2ndanscombe residuals as in Pierce and Schafer (1986) based on 2nd order approximation of E(X) – experimental
pearsonNegBincompute Pearson residuals for NegBin – experimental
anscombeNegBinanscombe residuals for NegBin – experimental
noneno transformation
alphaparameter of the negative binomial distribution, s.t. the variance is \(m+\alpha *m^2\)
resetlogical: Should the CUSUM statistic be reset to 0 immediately after an alarm? This is the traditional form of the chart as used in industrial process control, but not the default choice in outbreak detection when continuous periods of abnormal disease activity should be flagged.
Value
algo.cusum gives a list of class "survRes" which includes the
vector of alarm values for every timepoint in range and the vector
of cumulative sums for every timepoint in range for the system
specified by k and h, the range and the input object of
class "disProg".
The upperbound entry shows for each time instance the number of diseased individuals
it would have taken the CUSUM to signal. Once the CUSUM signals, it
is not reset by default, i.e.,
signals occur until the CUSUM statistic again returns below the threshold.
In case m="glm" was used, the returned
control$m.glm entry contains the fitted "glm" object.
References
G. Rossi, L. Lampugnani and M. Marchi (1999), An approximate CUSUM procedure for surveillance of health events, Statistics in Medicine, 18, 2111–2122
D. A. Pierce and D. W. Schafer (1986), Residuals in Generalized Linear Models, Journal of the American Statistical Association, 81, 977–986
Examples
# Xi ~ Po(5), i=1,...,500
set.seed(321)
stsObj <- sts(observed = rpois(500,lambda=5))
# there should be no alarms as mean doesn't change
res <- cusum(stsObj, control = list(range = 100:500, trans = "anscombe"))
plot(res, xaxis.labelFormat = NULL)
# simulated data
disProgObj <- sim.pointSource(p = 1, r = 1, length = 250,
A = 0, alpha = log(5), beta = 0, phi = 10,
frequency = 10, state = NULL, K = 0)
plot(disProgObj)
# Test weeks 200 to 250 for outbreaks
surv0 <- algo.cusum(disProgObj, control = list(range = 200:250))
plot(surv0, xaxis.years = FALSE)
# alternatively, using the newer "sts" interface
stsObj <- disProg2sts(disProgObj)
surv <- cusum(stsObj, control = list(range = 200:250))
plot(surv)
stopifnot(upperbound(surv) == surv0$upperbound)