This vignette shows realistic package usage against Eunomia without assuming any API that the package does not expose. The examples use two cohort definitions already available in a cohort table:
12library(OdysseusSurvivalModule)
library(DatabaseConnector)
library(Eunomia)
connectionDetails <- Eunomia::getEunomiaConnectionDetails()
connection <- DatabaseConnector::connect(connectionDetails)
cdmDatabaseSchema <- Eunomia::getEunomiaCdmDatabaseSchema()
cohortDatabaseSchema <- Eunomia::getEunomiaResultsSchema()survivalData <- OdysseusSurvivalModule:::addCohortSurvival(
connection = connection,
cdmDatabaseSchema = cdmDatabaseSchema,
cohortDatabaseSchema = cohortDatabaseSchema,
targetCohortTable = "cohort",
targetCohortId = 1,
outcomeCohortTable = "cohort",
outcomeCohortId = 2,
followUpDays = 365,
includeAge = TRUE,
includeGender = TRUE
)
head(survivalData)modelNames <- c("km", "cox", "weibull", "lognormal")
fits <- lapply(modelNames, function(modelName) {
singleEventSurvival(
survivalData = survivalData,
timeScale = "days",
model = modelName,
covariates = if (modelName == "km") NULL else c("age_years")
)
})
names(fits) <- modelNames
summaryTable <- data.frame(
model = names(fits),
medianSurvival = vapply(fits, function(x) x[["overall"]]$summary$medianSurvival, numeric(1)),
meanSurvival = vapply(fits, function(x) x[["overall"]]$summary$meanSurvival, numeric(1)),
stringsAsFactors = FALSE
)
summaryTablereportTable <- data.frame(
group = c("Overall", "Female", "Male"),
n = c(
kmGender[["overall"]]$summary$n,
kmGender[["gender=Female"]]$summary$n,
kmGender[["gender=Male"]]$summary$n
),
events = c(
kmGender[["overall"]]$summary$events,
kmGender[["gender=Female"]]$summary$events,
kmGender[["gender=Male"]]$summary$events
),
medianSurvival = c(
kmGender[["overall"]]$summary$medianSurvival,
kmGender[["gender=Female"]]$summary$medianSurvival,
kmGender[["gender=Male"]]$summary$medianSurvival
),
stringsAsFactors = FALSE
)
reportTableplot(
kmGender[["gender=Female"]]$data$time,
kmGender[["gender=Female"]]$data$survival,
type = "s",
col = "firebrick",
xlab = "Time (days)",
ylab = "Survival probability",
ylim = c(0, 1),
main = "Kaplan-Meier curve by gender"
)
lines(
kmGender[["gender=Male"]]$data$time,
kmGender[["gender=Male"]]$data$survival,
type = "s",
col = "steelblue"
)The practical Eunomia workflow is:
singleEventSurvival().data and
summary fields.