context("Test outbreaker data and settings")
## test data ##
test_that("test: data are processed fine", {
## skip on CRAN
skip_on_cran()
## get data
x <- fake_outbreak
out <- outbreaker_data(dates = x$onset, dna = x$dna, w_dens = x$w)
out_nodna <- outbreaker_data(dates = x$onset, w_dens = x$w)
## check output
expect_is(out, "list")
expect_is(out$D, "matrix")
expect_equal(out$max_range, 11)
expect_equal(out_nodna$L, 0)
expect_equal(out$L, 1e4)
expect_equal(out$w_dens, out$f_dens)
expect_equal(out$log_w_dens[1,], out$log_f_dens)
expect_error(outbreaker_data(dates = 1, w_dens = c(0,-1)),
"w_dens has negative entries")
expect_error(outbreaker_data(dates = 1, w_dens = c(0,1), f_dens = c(0,-1)),
"f_dens has negative entries")
wrong_lab_dna <- x$dna
rownames(wrong_lab_dna) <- paste0("host_", seq_len(nrow(wrong_lab_dna)))
expect_error(outbreaker_data(dates = x$onset, dna = wrong_lab_dna, w_dens = x$w),
"DNA sequence labels don't match case ids")
})
test_that("outbreaker_data accepts epicontacts and case labelling", {
## skip on CRAN
skip_on_cran()
## outbreaker time, ctd, no DNA ##
## analysis
set.seed(1)
## get data
x <- fake_outbreak
ids_char <- replicate(length(fake_outbreak$sample),
paste(sample(letters, 5, TRUE), collapse = ""))
ids_num <- sample.int(1000, length(fake_outbreak$sample), FALSE)
## check for character and numeric ids
for(ids in list(ids_char, ids_num)) {
## make epi_contacts object
tTree <- data.frame(i = ids[x$ances],
j = ids[1:length(x$ances)])
ctd <- sim_ctd(tTree, eps = 0.9, lambda = 0.1)
epi_c <- suppressWarnings(epicontacts::make_epicontacts(linelist = data.frame(id = ids),
contacts = ctd,
directed = TRUE))
data <- outbreaker_data(dates = x$onset,
dna = x$dna,
ctd = epi_c,
w_dens = x$w)
## test recursiveness
data <- outbreaker_data(data = data)
## check correct contacts are labelled as 1 in matrix
ctd_ind <- apply(ctd, 2, match, ids)
expect_equal(rep(1, nrow(ctd)), data$contacts[ctd_ind[,c(2, 1)]])
expect_equal(rep(0, nrow(ctd)), data$contacts[ctd_ind])
## check directionality is being passed
config <- create_config(data = data)
## check ids are carried through
expect_equal(data$ids, epi_c$linelist$id)
## make sure directionality is carried through
expect_true(config$ctd_directed)
## case labelling via dates
dates <- x$onset
names(dates) <- ids
data <- outbreaker_data(dates = dates,
dna = x$dna,
ctd = ctd,
w_dens = x$w)
## test recursiveness
data <- outbreaker_data(data = data)
## check direcionality working
config <- create_config(ctd_directed = TRUE,
data = data)
## check contact numbers are being updated
data <- add_convolutions(data, config)
## check ids are carried through
expect_equal(data$ids, as.character(ids))
## make sure directionality is carried through
expect_true(config$ctd_directed)
## check the number of contacts are correct
expect_equal(nrow(ctd), sum(data$contacts))
## toggle directionality
data <- outbreaker_data(dates = dates,
dna = x$dna,
ctd = ctd,
w_dens = x$w)
data <- outbreaker_data(data = data)
config <- create_config(ctd_directed = FALSE)
data <- add_convolutions(data, config)
## check the number of contacts are correct
expect_equal(2*nrow(ctd), sum(data$contacts))
## check correct contacts are labelled as 1 in matrix
ctd_ind <- apply(ctd, 2, match, ids)
ctd_ind <- rbind(ctd_ind, ctd_ind[,c(2, 1)])
expect_equal(rep(1, 2*nrow(ctd)), data$contacts[ctd_ind])
## make sure directionality is carried through
expect_false(config$ctd_directed)
## identify non-matching labels
wrong_dna <- x$dna
rownames(wrong_dna) <- 1:length(x$onset)
expect_error(data <- outbreaker_data(dates = dates,
dna = wrong_dna,
ctd = ctd,
w_dens = x$w,
ctd_directed = TRUE),
"DNA sequence labels don't match case ids")
}
})
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.