source("data.r")
test_that("standard disbayes model, MCMC",{
dbres <- disbayes(dat = ihdbristol,
inc_num = "inc_num", inc_denom = "inc_denom",
prev_num = "prev_num", prev_denom = "prev_denom",
mort_num = "mort_num", mort_denom = "mort_denom",
eqage = 40, method="mcmc", algorithm="Fixed_param",
chains=1, iter=100)
expect_s3_class(dbres, "disbayes")
})
test_that("data supplied as estimate and denominator",{
dbres <- disbayes(dat = ihdbristol,
inc_num = "inc_num", inc_denom = "inc_denom",
prev_num = "prev_num", prev_denom = "prev_denom",
mort_prob = "mort_prob", mort_denom = "mort_denom",
eqage = 40, method="mcmc", algorithm="Fixed_param",
chains=1, iter=100)
expect_s3_class(dbres, "disbayes")
})
test_that("data supplied as estimate and credible limits",{
dbres <- disbayes(dat = ihdbristol,
inc_num = "inc_num", inc_denom = "inc_denom",
prev_num = "prev_num", prev_denom = "prev_denom",
mort_prob = "mort_prob", mort_lower = "mort_lower", mort_upper="mort_upper",
eqage = 40, method="mcmc", algorithm="Fixed_param", chains=1, iter=100)
expect_s3_class(dbres, "disbayes")
})
test_that("errors when insufficient data supplied",{
expect_error(
disbayes(dat = ihdbristol,
inc_num = "inc_num", inc_denom = "inc_denom",
prev_num = "prev_num", prev_denom = "prev_denom",
mort_prob = "mort_prob",
eqage = 40, algorithm="Fixed_param"),
"Not enough information"
)
expect_error(disbayes(dat = ihdbristol,
inc_num = "inc_num", inc_denom = "inc_denom",
prev_num = "prev_num", prev_denom = "prev_denom",
eqage = 40, algorithm="Fixed_param"),
"Not enough information")
})
test_that("increasing case fatality",{
dbres <- disbayes(dat = ihdbristol,
inc_num = "inc_num", inc_denom = "inc_denom",
prev_num = "prev_num", prev_denom = "prev_denom",
mort_num = "mort_num", mort_denom = "mort_denom",
cf_model = "increasing",
eqage = 40,
chains = 1, iter=100,
method="mcmc", algorithm="Fixed_param")
expect_s3_class(dbres, "disbayes")
})
test_that("constant case fatality",{
dbres <- disbayes(dat = ihdbristol,
inc_num = "inc_num", inc_denom = "inc_denom",
prev_num = "prev_num", prev_denom = "prev_denom",
mort_num = "mort_num", mort_denom = "mort_denom",
cf_model = "const",
eqage = 40,
chains = 1, iter=100,
method="mcmc", algorithm="Fixed_param")
expect_s3_class(dbres, "disbayes")
})
test_that("unsmooth incidence", {
dbres <- disbayes(dat = ihdbristol,
inc_num = "inc_num", inc_denom = "inc_denom",
prev_num = "prev_num", prev_denom = "prev_denom",
mort_num = "mort_num", mort_denom = "mort_denom",
inc_model = "indep",
chains = 1, iter=100,
method="mcmc", algorithm="Fixed_param")
expect_s3_class(dbres, "disbayes")
})
#test_that("remission", {
## data not supplied
### data supplied
#})
test_that("errors in age structure", {
ihdbristol$badage <- ihdbristol$age
ihdbristol$badage[20:30] <- 92
expect_error(disbayes(dat = ihdbristol, age = "nonexistent",
inc_num = "inc_num", inc_denom = "inc_denom",
prev_num = "prev_num", prev_denom = "prev_denom",
mort_num = "mort_num", mort_denom = "mort_denom",
),
"age variable `nonexistent` not found")
expect_error(disbayes(dat = ihdbristol, age = "badage",
inc_num = "inc_num", inc_denom = "inc_denom",
prev_num = "prev_num", prev_denom = "prev_denom",
mort_num = "mort_num", mort_denom = "mort_denom"
),
"one row per distinct year of age")
ihdbristol$badage <- ihdbristol$age
ihdbristol$badage[20:21] <- 20:19
expect_error(disbayes(dat = ihdbristol, age = "badage",
inc_num = "inc_num", inc_denom = "inc_denom",
prev_num = "prev_num", prev_denom = "prev_denom",
mort_num = "mort_num", mort_denom = "mort_denom"
),
"ordered with one value per year of age")
})
trends_inc <- ihdtrends %>%
filter(outcome=="Incidence", gender=="Female") %>%
pivot_wider(names_from="year", values_from="p2017") %>%
select(-age, -gender, -outcome) %>%
as.matrix()
trends_cf <- ihdtrends %>%
filter(outcome=="Case fatality", gender=="Female") %>%
pivot_wider(names_from="year", values_from="p2017") %>%
select(-age, -gender, -outcome) %>%
as.matrix()
## Could move this to tests/slow if causes a problem. takes about 10 sec
test_that("disbayes model with trends",{
dbres <- disbayes(dat = ihdbristol,
inc_num = "inc_num", inc_denom = "inc_denom",
prev_num = "prev_num", prev_denom = "prev_denom",
mort_num = "mort_num", mort_denom = "mort_denom",
eqage = 40, method="mcmc", algorithm="Fixed_param",
inc_trend = trends_inc,
cf_trend = trends_cf,
chains=1, iter=10)
expect_s3_class(dbres, "disbayes")
})
test_that("errors in trend data", {
trendsbad <- trends_inc[,1:2]
expect_error(
disbayes(data = ihdbristol,
inc_num = "inc_num", inc_denom = "inc_denom",
prev_num = "prev_num", prev_denom = "prev_denom",
mort_num = "mort_num", mort_denom = "mort_denom",
inc_trend = trendsbad),
"trend matrix of dimension")
expect_error(
disbayes(data = ihdbristol,
inc_num = "inc_num", inc_denom = "inc_denom",
prev_num = "prev_num", prev_denom = "prev_denom",
mort_num = "mort_num", mort_denom = "mort_denom",
inc_trend = "wibble"),
"trends data should be")
})
test_that("errors when data are invalid",{
baddat <- ihdbristol
baddat$inc_num <- baddat$inc_denom + 1
expect_error(
disbayes(dat = baddat,
inc_num = "inc_num", inc_denom = "inc_denom",
prev_num = "prev_num", prev_denom = "prev_denom",
mort_prob = "mort_prob",
eqage = 40),
"should be <="
)
baddat <- ihdbristol
baddat$inc_num[40] <- baddat$inc_denom[40] - 0.001
expect_error(
disbayes(dat = baddat,
inc_num = "inc_num", inc_denom = "inc_denom",
prev_num = "prev_num", prev_denom = "prev_denom",
mort_num = "mort_num", mort_denom = "mort_denom",
eqage = 40)
,
"should be integer"
)
baddat <- ihdbristol
baddat$mort_lower[80] <- 0.01
baddat$mort_prob[80] <- 0.001
expect_error(
disbayes(dat = baddat,
inc_num = "inc_num", inc_denom = "inc_denom",
prev_num = "prev_num", prev_denom = "prev_denom",
mort_prob = "mort_prob", mort_lower = "mort_lower", mort_upper = "mort_upper",
eqage = 40)
,
"should be inside the credible interval"
)
baddat <- ihdbristol
baddat$mort_lower[40] <- 0.1
baddat$mort_upper[40] <- 0.001
expect_error(
disbayes(dat = baddat,
inc_num = "inc_num", inc_denom = "inc_denom",
prev_num = "prev_num", prev_denom = "prev_denom",
mort_prob = "mort_prob", mort_lower = "mort_lower", mort_upper = "mort_upper",
eqage = 40)
,
"should be < mort_upper"
)
})
test_that("sprior",{
expect_error(disbayes(dat = ihdbristol,
inc_num = "inc_num", inc_denom = "inc_denom",
prev_num = "prev_num", prev_denom = "prev_denom",
mort_num = "mort_num", mort_denom = "mort_denom",
sprior = c(1,1)), "should be a vector of 3")
db <- disbayes(dat = ihdbristol,
inc_num = "inc_num", inc_denom = "inc_denom",
prev_num = "prev_num", prev_denom = "prev_denom",
mort_num = "mort_num", mort_denom = "mort_denom",
sprior = c(cf=1, inc=1000))
tidy(db) %>% filter(grepl("lambda", var))
plot(db, var="inc")
})
test_that("errors and warnings in model specification",{
expect_warning(
disbayes(dat = ihdbristol,
inc_num = "inc_num", inc_denom = "inc_denom",
prev_num = "prev_num", prev_denom = "prev_denom",
mort_num = "mort_num", mort_denom = "mort_denom",
inc_prior = c(2,2)), "Ignoring `inc_prior`")
expect_warning(
disbayes(dat = ihdbristol,
inc_num = "inc_num", inc_denom = "inc_denom",
prev_num = "prev_num", prev_denom = "prev_denom",
mort_num = "mort_num", mort_denom = "mort_denom",
cf_model = "smooth",
cf_prior = c(2,2)), "Ignoring `cf_prior`")
expect_error(
disbayes(dat = ihdbristol,
inc_num = "inc_num", inc_denom = "inc_denom",
prev_num = "prev_num", prev_denom = "prev_denom",
mort_num = "mort_num", mort_denom = "mort_denom",
inc_model = "indep",
inc_prior = c(2,2,3)), "`inc_prior` should be a numeric vector of 2 elements")
expect_warning(
disbayes(dat = ihdbristol,
inc_num = "inc_num", inc_denom = "inc_denom",
prev_num = "prev_num", prev_denom = "prev_denom",
mort_num = "mort_num", mort_denom = "mort_denom",
rem_model = "const",
hp_fixed = list(srem = 1)), "Ignoring hp_fixed")
expect_error(
disbayes(dat = ihdbristol,
inc_num = "inc_num", inc_denom = "inc_denom",
prev_num = "prev_num", prev_denom = "prev_denom",
mort_num = "mort_num", mort_denom = "mort_denom",
rem_model = "const",
hp_fixed = list(sinc = "one")),
'should be TRUE, FALSE or a single number')
expect_error(
disbayes(dat = ihdbristol,
inc_num = "inc_num", inc_denom = "inc_denom",
prev_num = "prev_num", prev_denom = "prev_denom",
mort_num = "mort_num", mort_denom = "mort_denom",
rem_model = "const",
hp_fixed = list(sinc = c(1,1))),
'should be TRUE, FALSE or a single number')
expect_error(
disbayes(dat = ihdbristol,
inc_num = "inc_num", inc_denom = "inc_denom",
prev_num = "prev_num", prev_denom = "prev_denom",
mort_num = "mort_num", mort_denom = "mort_denom",
rem_model = "const",
eqage = 101),
'eqage.+ should be')
expect_error(
disbayes(dat = ihdbristol,
inc_num = "inc_num", inc_denom = "inc_denom",
prev_num = "prev_num", prev_denom = "prev_denom",
mort_num = "mort_num", mort_denom = "mort_denom",
rem_model = "const",
eqagehi = 101),
'eqagehi.+ should be')
expect_error(
disbayes(dat = ihdbristol,
inc_num = "inc_num", inc_denom = "inc_denom",
prev_num = "prev_num", prev_denom = "prev_denom",
mort_num = "mort_num", mort_denom = "mort_denom",
rem_model = "const",
eqage = 50 , eqagehi=40),
'should have eqage<eqagehi')
})
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.