testthat::context("adjusted curves from survtab")
testthat::test_that("adjusted SEs and curves are what expected", {
popEpi:::skip_normally()
sire <- data.table::data.table(popEpi::sire)
## calculate age-standardised 5-year relative survival ratio using
## Ederer II method and period approach
sire$agegr <- cut(sire$dg_age, c(0,45,55,65,75,Inf), right = FALSE)
BL <- list(fot=seq(0, 5, by = 1/12),
per = c("2008-01-01", "2013-01-01"))
x <- lexpand(sire, birth = bi_date, entry = dg_date, exit = ex_date,
status = status %in% 1:2,
breaks = BL,
pophaz = popmort,
aggre = list(agegr, fot))
## age standardisation using internal weights (age distribution of
## patients diagnosed within the period window)
## (NOTE: what is done here is equivalent to using weights = "internal")
w <- aggregate(at.risk ~ agegr, data = x[x$fot == 0, ], FUN = sum)
names(w) <- c("agegr", "weights")
st_raw <- survtab_ag(fot ~ agegr, data = x)
st_raw_pp <- survtab_ag(fot ~ agegr, data = x,
relsurv.method = "pp",
d.pp = "from0to1.pp",
d.pp.2 = "from0to1.pp.2",
n.cens.pp = "from0to0.pp",
pyrs.pp = "ptime.pp",
n.cens = "from0to0")
st_adj <- survtab_ag(fot ~ adjust(agegr), data = x, weights = w)
st_adj_pp <- survtab_ag(fot ~ adjust(agegr), data = x, weights = w,
relsurv.method = "pp",
d.pp = "from0to1.pp",
d.pp.2 = "from0to1.pp.2",
n.cens.pp = "from0to0.pp",
pyrs.pp = "ptime.pp",
n.cens = "from0to0")
dt_raw <- data.table::data.table(st_raw)
dt_raw_pp <- data.table::data.table(st_raw_pp)
data.table::set(
dt_raw, j = c("r.pp", "SE.r.pp"),
value = mget(c("r.pp", "SE.r.pp"), as.environment(dt_raw_pp))
)
dt_adj <- data.table::data.table(st_adj)
dt_adj_pp <- data.table::data.table(st_adj_pp)
data.table::set(
dt_adj, j = c("r.pp.as", "SE.r.pp.as"),
value = mget(c("r.pp.as", "SE.r.pp.as"), as.environment(dt_adj_pp))
)
w$weights <- w$weights/sum(w$weights)
dt_raw <- merge(dt_raw, w, by = "agegr", all = TRUE)
dt_raw_adj <- dt_raw[, .("surv.obs.as" = sum(weights * surv.obs),
"SE.surv.obs.as" = sqrt(sum((weights^2)*(SE.surv.obs^2))),
"r.e2.as" = sum(weights * r.e2),
"SE.r.e2.as" = sqrt(sum((weights^2)*(SE.r.e2^2))),
"r.pp.as" = sum(weights * r.pp),
"SE.r.pp.as" = sqrt(sum((weights^2)*(SE.r.pp^2))),
"pyrs" = sum(pyrs)),
keyby = "surv.int"]
testthat::expect_equal(
dt_raw_adj, dt_adj[, .SD, .SDcols = names(dt_raw_adj)]
)
})
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.