Calculate Probability of freedom for given population sensitivity and probability of introduction
Calculates the posterior probability (confidence) of disease freedom (negative predictive value) for one or more population sensitivity (se.p) estimates, over one or more time periods.
rsu.pfree.rs(se.p, p.intro = 0, prior = 0.5, by.time = TRUE)
se.p |
scalar, vector or matrix representing the population sensitivity estimates. |
p.intro |
scalar, vector or matrix representing the probability of disease introduction per time period. If |
prior |
scalar or vector of the same length as the number of rows of |
by.time |
logical, representing the type of analysis. See details, below. |
The by.time
argument is used for two specific circumstances.
Use by.time = TRUE
if the se.p
estimates are a vector of values for consecutive time periods. Use by.time = FALSE
if the se.p
estimates are a vector of multiple values (iterations) for a single time period.
Use by.times = TRUE
if se.p
is a symmetrical matrix and p.intro
is a vector of values representing the probability of disease introduction over consecutive time periods. Use by.time = FALSE
if se.p
is a symmetrical matrix (with columns for time periods and rows representing estimates of se.p
within each time period) and p.intro
is a vector of values corresponding to multiple values for a single time period that are the same across all periods.
A list comprised of six elements:
PFree |
The posterior probability of disease freedom. |
SeP |
The population sensitivity. |
PIntro |
The probability of disease introduction (as entered by the user). |
Discounted prior |
The discounted prior confidence of disease freedom. |
Equilibrium PFree |
The equilibrium probability of disease freedom. |
Equilibrium prior |
The equilibrium discounted prior probability of disease freedom. |
Martin P, Cameron A, Greiner M (2007). Demonstrating freedom from disease using multiple complex data sources 1: A new methodology based on scenario trees. Preventive Veterinary Medicine 79: 71 - 97.
Martin P, Cameron A, Barfod K, Sergeant E, Greiner M (2007). Demonstrating freedom from disease using multiple complex data sources 2: Case study - classical swine fever in Denmark. Preventive Veterinary Medicine 79: 98 - 115.
## EXAMPLE 1: ## You have estimated herd-sensitivity for 20 herds for a disease of concern, ## all returned negative results. What is the confidence of disease freedom ## for these herds, assuming that based on other data, 20% of herds in the ## region are estimated to be disease positive? ## Generate 20 herd sensitivity estimates, using random values between 70% ## and 95%: herd.sens <- runif(n = 20, min = 0.70, max = 0.95) ## The background herd prevalence is 0.20, so the prior confidence of freedom ## is 1 - 0.2 = 0.8. For this example we assume the prior is applicable at ## the time of sampling so p.intro = 0 (the default) and we are carrying out ## an analysis using multiple estimates of population sensitivities for a ## single time period so we set by.time = FALSE. rval.df <- rsu.pfree.rs(se.p = herd.sens, p.intro = 0, prior = 0.80, by.time = FALSE) rval.df <- data.frame(SeP = rval.df$SeP, PFree = rval.df$PFree) range(rval.df$SeP) ## The herd-level probability of disease freedom ranges from about 0.93 to ## 0.99 depending on individual herd level sensitivity values. ## EXAMPLE 2: ## You have analysed 12 months of surveillance data for disease X, to provide ## 12 monthly estimates of population sensitivity. In addition, based on ## previous data, the monthly probability of the introduction of disease is ## estimated to be in the range of 0.005 (0.5%) to 0.02 (2%). The prior ## confidence of disease freedom is assumed to be 0.5 (i.e. uninformed). ## What is your level of confidence of disease freedom at the end of the 12 ## month surveillance period? ## Generate 12, monthly estimates of se.p and p.intro: pop.sens <- runif(n = 12, min = 0.40, max = 0.70) pintro <- runif(n = 12, min = 0.005, max = 0.020) ## For this example we're analysing a single population over multiple time ## periods, so we set by.time = TRUE: rval.df <- rsu.pfree.rs(se.p = pop.sens, p.intro = pintro, prior = 0.50, by.time = TRUE) rval.df <- data.frame(mnum = 1:12, mchar = seq(as.Date("2020/1/1"), by = "month", length.out = 12), SeP = t(rval.df$SeP), PFree = t(rval.df$PFree)) ## Plot the probability of disease freedom as a function of time: plot(x = rval.df$mnum, y = rval.df$PFree, xlim = c(1,12), ylim = c(0,1), xlab = "Month", ylab = "Probability of disease freedom", pch = 16, type = "b", xaxt = "n") axis(side = 1, at = rval.df$mnum, labels = format(rval.df$mchar, format = "%b")) abline(h = 0.95, lty = 2) ## Not run: library(ggplot2); library(scales) ggplot(data = rval.df, aes(x = mchar, y =PFree)) + geom_line(col = "black") + scale_x_date(breaks = date_breaks("1 month"), labels = date_format("%b"), name = "Month") + scale_y_continuous(limits = c(0,1), name = "Probability of disease freedom") + geom_hline(yintercept = 0.95, linetype = "dashed") + theme_bw() ## End(Not run) ## The estimated probability of disease freedom (Pfree) increases over time ## from about 0.70 (or less) to >0.99, depending on the actual se.p values ## generated by simulation. ## EXAMPLE 3: ## Extending the above example, instead of a simple deterministic estimate, ## you decide to use simulation to account for uncertainty in the monthly ## se.p and p.intro estimates. ## For simplicity, we generate 1200 random estimates of se.p and coerce them ## into a matrix with 12 columns and 100 rows: pop.sens <- matrix(runif(n = 1200, min = 0.40, max = 0.70), nrow = 100) ## For p.intro we generate a vector of 100 random values, which will then be ## used across all time periods: pintro <- runif(n = 100, min = 0.005, max = 0.020) ## For this example, because se.p is a matrix and p.intro is a vector matching ## one of the dimensions of se.p, by.time is ignored: rval.df <- rsu.pfree.rs(se.p = pop.sens, p.intro = pintro, prior = 0.5, by.time = TRUE) ## Calculate 95% confidence intervals for the probability of disease freedom: rval.df <- apply(rval.df$PFree, FUN = quantile, MARGIN = 2, probs = c(0.025,0.5,0.975)) rval.df <- data.frame(mnum = 1:12, mchar = seq(as.Date("2020/1/1"), by = "month", length.out = 12), t(rval.df)) ## Plot the probability of disease freedom as a function of time. Dashed lines ## show the lower and upper bound of the confidence interval around the ## probability of disease freedom estimates: plot(x = rval.df$mnum, y = rval.df$X50., xlim = c(1,12), ylim = c(0,1), xlab = "Month", ylab = "Probability of disease freedom", type = "l", lwd = 2, xaxt = "n") axis(side = 1, at = rval.df$mnum, labels = format(rval.df$mchar, format = "%b")) lines(x = rval.df$mnum, y = rval.df$X2.5., type = "l", lty = 2) lines(x = rval.df$mnum, y = rval.df$X97.5., type = "l", lty = 2) ## Not run: library(ggplot2); library(scales) ggplot(data = rval.df, aes(x = mchar, y = X50.)) + geom_line(col = "black") + geom_ribbon(aes(ymin = X2.5., ymax = X97.5.), alpha = 0.25) + scale_x_date(breaks = date_breaks("1 month"), labels = date_format("%b"), name = "Month") + scale_y_continuous(limits = c(0,1), name = "Probability of disease freedom") + theme_bw() ## End(Not run) ## The median probability of disease freedom increases over time from about ## 0.7 (or less) to >0.99, depending on the actual se.p values generated by ## simulation.
Please choose more modern alternatives, such as Google Chrome or Mozilla Firefox.