deconvolve {fastbeta} | R Documentation |
Richardson-Lucy Deconvolution
Description
Performs a modified Richardson-Lucy iteration for the purpose of estimating incidence from reported incidence or mortality, conditional on a reporting probability and on a distribution of the time to reporting.
Usage
deconvolve(x, prob = 1, delay = 1,
start, tol = 1, iter.max = 32L, complete = FALSE)
Arguments
x |
a numeric vector of length |
prob |
a numeric vector of length |
delay |
a numeric vector of length |
start |
a numeric vector of length |
tol |
a tolerance indicating a stopping condition; see the reference. |
iter.max |
the maximum number of iterations. |
complete |
a logical flag indicating if the result should preserve successive
updates to |
Value
A list with elements:
value |
the result of updating |
chisq |
the chi-squared statistics corresponding to |
iter |
the number of iterations performed. |
References
Goldstein, E., Dushoff, J., Ma, J., Plotkin, J. B., Earn, D. J. D., & Lipsitch, M. (2020). Reconstructing influenza incidence by deconvolution of daily mortality time series. Proceedings of the National Academy of Sciences U. S. A., 106(51), 21825-21829. doi:10.1073/pnas.0902958106
Examples
set.seed(2L)
n <- 200L
d <- 50L
p <- 0.1
prob <- plogis(rlogis(d + n, location = qlogis(p), scale = 0.1))
delay <- diff(pgamma(0L:(d + 1L), 12, 0.4))
h <- function (x, a = 1, b = 1, c = 0) a * exp(-b * (x - c)^2)
ans <- floor(h(seq(-60, 60, length.out = d + n), a = 1000, b = 0.001))
x0 <- rbinom(d + n, ans, prob)
x <- tabulate(rep.int(1L:(d + n), x0) +
sample(0L:d, size = sum(x0), replace = TRUE, prob = delay),
d + n)[-(1L:d)]
str(D0 <- deconvolve(x, prob, delay, complete = FALSE))
str(D1 <- deconvolve(x, prob, delay, complete = TRUE))
matplot(-(d - 1L):n,
cbind(x0, c(rep.int(NA, d), x), prob * D0[["value"]], p * ans),
type = c("p", "p", "p", "l"),
col = c(1L, 1L, 2L, 4L), pch = c(16L, 1L, 16L, NA),
lty = c(0L, 0L, 0L, 1L), lwd = c(NA, NA, NA, 3L),
xlab = "time", ylab = "count")
legend("topleft", NULL,
c("actual", "actual+delay", "actual+delay+deconvolution", "p*h"),
col = c(1L, 1L, 2L, 4L), pch = c(16L, 1L, 16L, NA),
lty = c(0L, 0L, 0L, 1L), lwd = c(NA, NA, NA, 3L),
bty = "n")
plot(0L:D1[["iter"]], D1[["chisq"]], xlab = "iterations", ylab = quote(chi^2))
abline(h = 1, lty = 2L)