library(survival)
library(Epi)
## take 500 subjects randomly for demonstration
data(sire)
sire <- sire[sire$dg_date < sire$ex_date, ]
set.seed(1L)
sire <- sire[sample(x = nrow(sire), size = 500),]
## NOTE: recommended to use factor status variable
x <- Lexis(entry = list(FUT = 0, AGE = dg_age, CAL = get.yrs(dg_date)),
exit = list(CAL = get.yrs(ex_date)),
data = sire,
exit.status = factor(status, levels = 0:2,
labels = c("alive", "canD", "othD")),
merge = TRUE)
## phony variable
set.seed(1L)
x$group <- rbinom(nrow(x), 1, 0.5)
## age group
x$agegr <- cut(x$dg_age, c(0,45,60,Inf), right=FALSE)
## population hazards data set
pm <- data.frame(popEpi::popmort)
names(pm) <- c("sex", "CAL", "AGE", "haz")
## breaks to define observed survival estimation
BL <- list(FUT = seq(0, 10, 1/12))
## crude mean survival
sm1 <- survmean(Surv(FUT, lex.Xst != "alive") ~ 1,
pophaz = pm, data = x, weights = NULL,
breaks = BL)
sm1 <- survmean(FUT ~ 1,
pophaz = pm, data = x, weights = NULL,
breaks = BL)
## Not run:
# ## mean survival by group
# sm2 <- survmean(FUT ~ group,
# pophaz = pm, data = x, weights = NULL,
# breaks = BL)
#
# ## ... and adjusted for age using internal weights (counts of subjects)
# ## note: need also longer extrapolation here so that all curves
# ## converge to zero in the end.
# eBL <- list(FUT = c(BL$FUT, 11:75))
# sm3 <- survmean(FUT ~ group + adjust(agegr),
# pophaz = pm, data = x, weights = "internal",
# breaks = BL, e1.breaks = eBL)
# ## End(Not run)
## visual inspection of how realistic extrapolation is for each stratum;
## solid lines are observed + extrapolated survivals;
## dashed lines are expected survivals
plot(sm1)
## Not run:
# ## plotting object with both stratification and standardization
# ## plots curves for each strata-std.group combination
# plot(sm3)
#
# ## for finer control of plotting these curves, you may extract
# ## from the survmean object using e.g.
# attributes(sm3)$survmean.meta$curves
#
#
# #### using Dates
#
# x <- Lexis(entry = list(FUT = 0L, AGE = dg_date-bi_date, CAL = dg_date),
# exit = list(CAL = ex_date),
# data = sire[sire$dg_date < sire$ex_date, ],
# exit.status = factor(status, levels = 0:2,
# labels = c("alive", "canD", "othD")),
# merge = TRUE)
# ## phony group variable
# set.seed(1L)
# x$group <- rbinom(nrow(x), 1, 0.5)
#
#
# ## NOTE: population hazard should be reported at the same scale
# ## as time variables in your Lexis data.
# data(popmort, package = "popEpi")
# pm <- data.frame(popmort)
# names(pm) <- c("sex", "CAL", "AGE", "haz")
# ## from year to day level
# pm$haz <- pm$haz/365.25
# pm$CAL <- as.Date(paste0(pm$CAL, "-01-01"))
# pm$AGE <- pm$AGE*365.25
#
# BL <- list(FUT = seq(0, 8, 1/12)*365.25)
# eBL <- list(FUT = c(BL$FUT, c(8.25,8.5,9:60)*365.25))
# smd <- survmean(FUT ~ group, data = x,
# pophaz = pm, verbose = TRUE, r = "auto5",
# breaks = BL, e1.breaks = eBL)
# plot(smd)
# ## End(Not run)
Run the code above in your browser using DataLab