Nothing
## ----include = FALSE----------------------------------------------------------
knitr::opts_chunk$set(
collapse = TRUE,
comment = "#>"
)
## ----setup, warning=FALSE, message=FALSE--------------------------------------
library(NobBS)
library(dplyr)
data(denguedat)
# Define the current date and window size for nowcasting
now <- as.Date("1994-09-26")
win_size <- 8
# Original data for nowcasting
denguedat1 <- denguedat %>% filter(onset_week <= now)
# Altered data: Move some report dates forward without indicating batch reporting
denguedat2 <- denguedat1 %>%
mutate(report_week = if_else(onset_week == as.Date("1994-08-29") &
report_week == as.Date("1994-09-05"),
as.Date("1994-09-26"), report_week))
# Altered data with batch reporting indicated
denguedat3 <- denguedat2 %>%
mutate(batched = denguedat1$onset_week == "1994-08-29" & denguedat1$report_week == "1994-09-05")
## ----nowcasting, warning=FALSE, message=FALSE---------------------------------
# Helper function to run nowcasting
run_nowcast <- function(data, now, win_size) {
NobBS(data, now, units = "1 week", onset_date = "onset_week",
report_date = "report_week", moving_window = win_size)
}
# Run nowcasts for all scenarios
nowcast1 <- run_nowcast(denguedat1, now, win_size)
nowcast2 <- run_nowcast(denguedat2, now, win_size)
nowcast3 <- run_nowcast(denguedat3, now, win_size)
## ----fig.width=7, fig.height=4------------------------------------------------
# Function to extract the probability distribution of the reporting delay (betas) from nowcast results
extract_reporting_delay_distribution <- function(nowcast, win_size) {
sapply(0:(win_size - 1), function(i) {
mean(exp(nowcast$params.post[[paste0("Beta ", i)]]))
})
}
# Extract probability distribution of the reporting delay for each scenario
betas1 <- extract_reporting_delay_distribution(nowcast1, win_size)
betas2 <- extract_reporting_delay_distribution(nowcast2, win_size)
betas3 <- extract_reporting_delay_distribution(nowcast3, win_size)
# Plot the delay distribution
barplot(rbind(betas1, betas2, betas3), beside = TRUE,
main = 'Estimated Reporting Delay Distribution',
col = c('blue', 'red', 'green'),
names.arg = seq(0, win_size - 1),
xlab = 'Delay (weeks)', ylab = 'Probability of Reporting Delay')
legend('topright',
legend = c('Original Data', 'Altered - Batch Not Indicated', 'Altered - Batch Indicated'),
fill = c('blue', 'red', 'green'))
## ----fig.width=7, fig.height=4------------------------------------------------
# Extract nowcasting estimates
estimates1 <- nowcast1$estimates %>% mutate(scenario = "Original")
estimates2 <- nowcast2$estimates %>% mutate(scenario = "Altered - Batch Not Indicated")
estimates3 <- nowcast3$estimates %>% mutate(scenario = "Altered - Batch Indicated")
# Combine estimates for visualization
estimates <- bind_rows(estimates1, estimates2, estimates3)
# Eventual cases (true counts)
cases_per_date <- denguedat1 %>%
group_by(onset_week) %>%
summarize(count = n()) %>%
filter(onset_week %in% estimates1$onset_date)
# Plot nowcasting estimates
plot(estimates1$onset_date, estimates1$estimate, col = 'blue', lwd=2, type = 'l',
ylim = range(c(estimates$q_0.025, estimates$q_0.975)),
xlab = 'Onset Date', ylab = 'Cases', main = 'Incidence Estimates')
lines(estimates2$onset_date, estimates2$estimate, lwd=2, col = 'red')
lines(estimates3$onset_date, estimates3$estimate, lwd=2, col = 'green')
# Add 95% PI shaded regions
polygon(c(estimates1$onset_date, rev(estimates1$onset_date)),
c(estimates1$q_0.025, rev(estimates1$q_0.975)),
col = rgb(0, 0, 1, 0.2), border = NA)
polygon(c(estimates2$onset_date, rev(estimates2$onset_date)),
c(estimates2$q_0.025, rev(estimates2$q_0.975)),
col = rgb(1, 0, 0, 0.2), border = NA)
polygon(c(estimates3$onset_date, rev(estimates3$onset_date)),
c(estimates3$q_0.025, rev(estimates3$q_0.975)),
col = rgb(0, 1, 0, 0.2), border = NA)
points(cases_per_date$onset_week, cases_per_date$count, col = 'black', pch = 20)
legend('topleft',
legend = c('Original Data',
'Altered - Batch Not Indicated',
'Altered - Batch Indicated',
'95% PI (Original Data)',
'95% PI (Altered - Batch Not Indicated)',
'95% PI (Altered - Batch Indicated)',
'Eventual Cases'),
col = c('blue', 'red', 'green', rgb(0, 0, 1, 0.2), rgb(1, 0, 0, 0.2), rgb(0, 1, 0, 0.2), 'black'),
lwd = c(2, 2, 2, NA, NA, NA, NA),
lty = c(1, 1, 1, NA, NA, NA, NA),
pch = c(NA, NA, NA, 15, 15, 15, 20),
cex = 0.9)
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.