Nothing
## ---- include = FALSE---------------------------------------------------------
knitr::opts_chunk$set(
collapse = TRUE,
comment = "#>"
)
## ----setup, message = FALSE---------------------------------------------------
library(anovir)
## ----include = FALSE----------------------------------------------------------
sy_times <- c(1,3,4,5,6,7,8,9,10,11,12,13,14,15,17,18,19,20,21,23,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,7,21,22,23,7,14,21,22,23)
sy_censor <- c(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1)
sy_inf <- c(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1)
sy_fq <- c(5,8,8,4,3,2,4,3,3,1,3,3,4,2,3,4,5,2,2,1,7,4,8,9,4,5,4,2,3,6,10,7,13,5,11,5,9,11,5,5,3,4,2,3,4,205,143,6,7,4,103,66)
data_sy <- data.frame(sy_times, sy_inf, sy_censor, sy_fq)
data_sy$fq <- data_sy$sy_fq
## ----include = FALSE, eval = TRUE, echo = FALSE, message = FALSE, warning = FALSE----
m01_prep_function <- function(a1, b1, a2, b2){
nll_basic(
a1, b1, a2, b2,
data = data_sy,
time = sy_times,
censor = sy_censor,
infected_treatment = sy_inf,
d1 = 'Weibull', d2 = 'Weibull')
}
## ----include = FALSE, eval = TRUE, echo = FALSE, message = FALSE, warning = FALSE----
m02 <- mle2(m01_prep_function,
start = list(a1 = 4.8, a2 = 3.6, b2 = 0.6),
fixed = list(b1 = 1.0)
)
## ----include = TRUE-----------------------------------------------------------
coef(m02)
## ----include = TRUE-----------------------------------------------------------
vcov(m02)
## ----include = TRUE-----------------------------------------------------------
mu_a1 <- coef(m02)[[1]] ; mu_a1
var_a1 <- vcov(m02)[1,1] ; var_a1
h1t <- 1/(exp(mu_a1)) ; h1t
var_h1t <- (-1/exp(mu_a1))^2 * var_a1 ; var_h1t
lower_ci <- h1t - 1.96*sqrt(var_h1t)
upper_ci <- h1t + 1.96*sqrt(var_h1t)
lower_ci ; h1t ; upper_ci
## ----include = TRUE-----------------------------------------------------------
lower_ci2 <- h1t*exp(-1.96*sqrt(var_h1t)/h1t)
upper_ci2 <- h1t*exp(+1.96*sqrt(var_h1t)/h1t)
lower_ci2 ; h1t ; upper_ci2
## ----include = TRUE, warning = FALSE------------------------------------------
library(anovir)
data01 <- data_blanford
data01 <- subset(data01,
(data01$block == 5) & (
(data01$treatment == 'cont') |
(data01$treatment == 'Ma07')
) &
(data01$day > 0)
)
# create column 'g' as index of infected treatment
data01$g <- data01$inf
m01_prep_function <- function(a1, b1, a2, b2){
nll_basic(a1, b1, a2, b2, data = data01, time = t, censor = censor,
infected_treatment = g, d1 = 'Weibull', d2 = 'Fréchet')
}
m01 <- mle2(m01_prep_function,
start = list(a1 = 2, b1 = 0.5, a2 = 3, b2 = 1)
)
summary(m01)
## ----includes = TRUE----------------------------------------------------------
# view estimates
coef(m01) ; vcov(m01)
# assign means, variances & covariances
# means
a2 <- m01@coef[[3]]
b2 <- m01@coef[[4]]
# variances
var_a2 <- m01@vcov[3,3]
var_b2 <- m01@vcov[4,4]
# covariances
cov_a2_b2 <- m01@vcov[3,4]
# specify timespan to calculate
t <- 1:14
# write an 'expression' for the Fréchet hazard function
# in terms of 'a2', 'b2'
hazard_expression <- expression(
(1 / (b2 * t)) * exp(-((log(t) - a2) / b2) - exp(-((log(t) - a2) / b2))) / (1 - exp(-exp(-((log(t) - a2) / b2))))
)
# prepare expression for 'stats::deriv`
# NB needs names of variables for partial differentiation
dh2_dt <- stats::deriv(hazard_expression, c('a2', 'b2'))
dh2_dt
# evaluate (calculate) hazard function 'h2'
h2 <- eval(dh2_dt)
# collect estimate of hazard function 'h2'
# and 'gradients' of partial derivatives
dh2 <- attr(h2, 'gradient')
# rename columns for clarity
colnames(dh2) <- c('dh2_da2', 'dh2_db2')
# collect time, estimates of hazard function at time 't'
# and partial derivatives
dh2 <- cbind(t, h2, dh2)
# calculate variance of hazard function
# using delta function
var_h2 <-
dh2[,'dh2_da2']^2 * var_a2 +
dh2[,'dh2_db2']^2 * var_b2 +
2 * dh2[,'dh2_da2'] * dh2[,'dh2_db2'] * cov_a2_b2
# calculate standard deviation of estimate
sd_h2 <- sqrt(var_h2)
# bind to other estimates
dh2 <- cbind(dh2, sd_h2)
# calculate lower & upper bounds of 95% confidence interval
lower_ci <- dh2[,'h2'] * exp(-1.96 * dh2[,'sd_h2'] / dh2[,'h2'])
upper_ci <- dh2[,'h2'] * exp( 1.96 * dh2[,'sd_h2'] / dh2[,'h2'])
# bind together
dh2_ma07 <- cbind(dh2, lower_ci, upper_ci)
## ----includes = TRUE, echo = FALSE, fig.height = 3.25, fig.width = 3.25, fig.show = 'hold'----
# plot data
plot(dh2_ma07[,'t'], dh2_ma07[,'h2'],
type = 'l', col = 'red', lty = 'solid',
xlim = c(0, 14), ylim = c(0, 0.6),
xlab = 'Time(days)', ylab = 'h(t) ±95% c.i.',
main = 'Virulence: Ma07',
axes = FALSE
)
axis(side = 1, seq(0, 14, by = 7))
axis(side = 2, seq(0, 0.6, by = 0.1))
lines(dh2_ma07[,'t'], dh2_ma07[,'lower_ci'],
type = 'l', col = 'grey', lty = 'solid'
)
lines(dh2_ma07[,'t'], dh2_ma07[,'upper_ci'],
type = 'l', col = 'grey', lty = 'solid'
)
## ----include = TRUE-----------------------------------------------------------
# values for a2, b2, var_a2, var_b2, cov_a2b2 were assigned
# from results of 'bbmle::mle2' above
ls()
# tail of calculations above
tail(dh2_ma07)
# specify mle2object 'm01', Frechet distribution & maximum time
ci_matrix01 <- conf_ints_virulence(
a2 = a2,
b2 = b2,
var_a2 = var_a2,
var_b2 = var_b2,
cov_a2b2 = cov_a2_b2,
d2 = "Frechet",
tmax = 14)
# tail of calculations from 'conf_ints_virulence'
tail(ci_matrix01)
# are the results the same?
identical(dh2_ma07, ci_matrix01)
## ----includes = TRUE, warning = FALSE-----------------------------------------
library(anovir)
# get & rename data
data01 <- data_lorenz
head(data01)
# create new version of function 'nll_basic'
nll_basic2 <- nll_basic
# check location/definition of parameter function a2 ('pfa2')
body(nll_basic2)[[4]]
# replace 'a2' making 'pfa2' a linear function of log(dose)
body(nll_basic2)[[4]] <- substitute(pfa2 <- a2i + a2ii * log(data01$Infectious.dose))
# check new version of 'pfa2'
body(nll_basic2)[[4]]
# update formals, including names for time, censor, etc..
formals(nll_basic2) <- alist(a1 = a1, b1 = b1, a2i = a2i, a2ii = a2ii, b2 = b2,
data = data01, time = t, censor = censored, infected_treatment = g,
d1 = 'Gumbel', d2 = 'Weibull')
# prepare 'prep_function' for analysis
m01_prep_function <- function(a1, b1, a2i, a2ii, b2){
nll_basic2(a1, b1, a2i, a2ii, b2)
}
# send to 'bbmle::mle2' with starting values for variables
m01 <- mle2(m01_prep_function,
start = list(a1 = 23, b1 = 4, a2i = 4, a2ii = -0.1, b2 = 0.2)
)
# summary of results
summary(m01)
## ----includes = TRUE----------------------------------------------------------
# collect & assign results in mleobject 'm01'
coef(m01)
vcov(m01)
# means
a2i <- m01@coef[[3]]
a2ii <- m01@coef[[4]]
b2 <- m01@coef[[5]]
# variances
var_a2i <- m01@vcov[3,3]
var_a2ii <- m01@vcov[4,4]
var_b2 <- m01@vcov[5,5]
# covariances
cov_a2i_a2ii <- m01@vcov[3,4]
cov_a2i_b2 <- m01@vcov[3,5]
cov_a2ii_b2 <- m01@vcov[4,5]
# specify timespan to calculate
t <- 1:28
# specify dose treatment to calculate
dose <- 5000
# write an 'expression' for hazard function
hazard_expression <- expression(
1 / (b2 * t) * exp(((log(t) - (a2i + a2ii * log(dose)))) / b2)
)
# prepare expression for 'stats::deriv`
# has names of variables for partial differentiation
dh2_dt <- stats::deriv(hazard_expression, c('a2i', 'a2ii', 'b2'))
# evaluate (calculate) hazard function 'h2'
h2 <- eval(dh2_dt)
# collect estimate of hazard function 'h2'
# and 'gradients' of partial derivatives
dh2 <- attr(h2, 'gradient')
# rename columns for clarity
colnames(dh2) <- c('dh2_da2i', 'dh2_da2ii', 'dh2_db2')
# collect time, estimates of hazard function at time 't'
# and partial derivatives
dh2 <- cbind(t, h2, dh2)
# calculate variance of hazard function
# using delta function
var_h2 <-
dh2[,'dh2_da2i']^2 * var_a2i +
dh2[,'dh2_da2ii']^2 * var_a2ii +
dh2[,'dh2_db2']^2 * var_b2 +
2 * dh2[,'dh2_da2i'] * dh2[,'dh2_da2ii'] * cov_a2i_a2ii +
2 * dh2[,'dh2_da2i'] * dh2[,'dh2_db2'] * cov_a2i_b2 +
2 * dh2[,'dh2_da2ii'] * dh2[,'dh2_db2'] * cov_a2ii_b2
# calculate standard deviation of estimate
sd_h2 <- sqrt(var_h2)
# bind to other estimates
dh2 <- cbind(dh2, sd_h2)
# calculate lower & upper bounds of 95% confidence interval
lower_ci <- dh2[,'h2'] * exp(-1.96 * dh2[,'sd_h2'] / dh2[,'h2'])
upper_ci <- dh2[,'h2'] * exp( 1.96 * dh2[,'sd_h2'] / dh2[,'h2'])
# bind together
dh2_5000 <- cbind(dh2, lower_ci, upper_ci)
## ----includes = TRUE, echo = FALSE--------------------------------------------
# specify dose treatment to calculate
dose <- 160000
# write an 'expression' for hazard function
hazard_expression <- expression(
1 / (b2 * t) * exp(((log(t) - (a2i + a2ii * log(dose)))) / b2)
)
# prepare expression for 'stats::deriv`
# has names of variables for partial differentiation
dh2_dt <- stats::deriv(hazard_expression, c('a2i', 'a2ii', 'b2'))
# evaluate (calculate) hazard function 'h2'
h2 <- eval(dh2_dt)
# collect estimate of hazard function 'h2'
# and 'gradients' of partial derivatives
dh2 <- attr(h2, 'gradient')
# rename columns for clarity
colnames(dh2) <- c('dh2_da2i', 'dh2_da2ii', 'dh2_db2')
# collect time, estimates of hazard function at time 't'
# and partial derivatives
dh2 <- cbind(t, h2, dh2)
# calculate variance of hazard function
# using delta function
var_h2 <-
var_a2i * dh2[,'dh2_da2i']^2 +
var_a2ii * dh2[,'dh2_da2ii']^2 +
var_b2 * dh2[,'dh2_db2']^2 +
2 * cov_a2i_a2ii * dh2[,'dh2_da2i'] * dh2[,'dh2_da2ii'] +
2 * cov_a2i_b2 * dh2[,'dh2_da2i'] * dh2[,'dh2_db2'] +
2 * cov_a2ii_b2 * dh2[,'dh2_da2ii'] * dh2[,'dh2_db2']
# calculate standard deviation of estimate
sd_h2 <- sqrt(var_h2)
# bind to other estimates
dh2 <- cbind(dh2, sd_h2)
# calculate lower & upper bounds of 95% confidence interval
lower_ci <- dh2[,'h2'] * exp(-1.96 * dh2[,'sd_h2'] / dh2[,'h2'])
upper_ci <- dh2[,'h2'] * exp( 1.96 * dh2[,'sd_h2'] / dh2[,'h2'])
# bind together
dh2_160000 <- cbind(dh2, lower_ci, upper_ci)
## ----includes = TRUE, echo = FALSE, fig.height = 3.25, fig.width = 3.25, fig.show = 'hold'----
# plot data
plot(dh2_5000[,'t'], dh2_5000[,'h2'],
type = 'l', col = 'red', lty = 'solid',
xlim = c(0, 28), ylim = c(0, 1.2),
xlab = 'Time(days)', ylab = 'h(t) ±95% c.i.',
main = 'Virulence: dose 5000',
axes = FALSE
)
axis(side = 1, seq(0, 28, by = 7))
axis(side = 2, seq(0, 1.2, by = 0.2))
lines(dh2_5000[,'t'], dh2_5000[,'lower_ci'],
type = 'l', col = 'grey', lty = 'solid'
)
lines(dh2_5000[,'t'], dh2_5000[,'upper_ci'],
type = 'l', col = 'grey', lty = 'solid'
)
# plot data
plot(dh2_160000[,'t'], dh2_160000[,'h2'],
type = 'l', col = 'red', lty = 'solid',
xlim = c(0, 28), ylim = c(0, 1.2),
xlab = 'Time(days)', ylab = 'h(t) ±95% c.i.',
main = 'Virulence: dose 160000',
axes = FALSE
)
axis(side = 1, seq(0, 28, by = 7))
axis(side = 2, seq(0, 1.2, by = 0.2))
lines(dh2_160000[,'t'], dh2_160000[,'lower_ci'],
type = 'l', col = 'grey', lty = 'solid'
)
lines(dh2_160000[,'t'], dh2_160000[,'upper_ci'],
type = 'l', col = 'grey', lty = 'solid'
)
## ----includes = TRUE----------------------------------------------------------
library(anovir)
data01 <- subset(data_blanford,
(data_blanford$block == 3) &
((data_blanford$treatment == 'cont') |
(data_blanford$treatment == 'Bb06')) &
(data_blanford$day > 0)
)
l01_prep_function_log <- function(a1 = a1, b1 = b1, a2 = a2, b2 = b2){
nll_basic_logscale(
a1 = a1, b1 = b1, a2 = a2, b2 = b2,
data = data01,
time = t,
censor = censor,
infected_treatment = inf,
d1 = 'Weibull', d2 = 'Weibull')
}
l01 <- mle2(l01_prep_function_log,
start = list(a1 = 1, b1 = 1, a2 = 1, b2 = 1)
)
summary(l01)
## ----include = TRUE-----------------------------------------------------------
# collect and assign results
coef(l01)
vcov(l01)
a2 <- coef(l01)[[3]]
b2 <- coef(l01)[[4]]
var_a2 <- vcov(l01)[3,3]
var_b2 <- vcov(l01)[4,4]
cov_a2_b2 <- vcov(l01)[3,4]
# set timescale for calculations
t <- 1:15
# NB need to exponentiate the terms with 'a2' and 'b2'
# in hazard expression
hazard_expression <- expression(
(1/(exp(b2) * t)) * exp((log(t) - exp(a2)) / exp(b2))
)
# remaining steps are the same as in Example 2 above
dh2_dt <- stats::deriv(hazard_expression, c('a2', 'b2'))
h2 <- eval(dh2_dt)
dh2 <- attr(h2, 'gradient')
colnames(dh2) <- c('dh2_da2', 'dh2_db2')
dh2 <- cbind(t, h2, dh2)
var_h2 <-
dh2[,'dh2_da2']^2 * var_a2 +
dh2[,'dh2_db2']^2 * var_b2 +
2 * dh2[,'dh2_da2'] * dh2[,'dh2_db2'] * cov_a2_b2
sd_h2 <- sqrt(var_h2)
dh2 <- cbind(dh2, sd_h2)
lower_ci <- dh2[,'h2'] * exp(-1.96 * dh2[,'sd_h2'] / dh2[,'h2'])
upper_ci <- dh2[,'h2'] * exp( 1.96 * dh2[,'sd_h2'] / dh2[,'h2'])
dh2_backlog <- cbind(dh2, lower_ci, upper_ci)
dh2_backlog <- round(dh2_backlog,4)
dh2_backlog
# the confidence intervals are the same as those
# estimated on the help page of
# `conf_ints_virulence` for variables that are
# not assumed to be on a logscale
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.