knitr::opts_chunk$set( collapse = TRUE, comment = "#>", eval = FALSE )
OdysseusSurvivalModule supports a two-step workflow:
singleEventSurvival().This vignette uses Eunomia as the example CDM and focuses on the package API as it exists today.
The exported function is singleEventSurvival(). The cohort-to-survival-data helper,
addCohortSurvival(), is currently internal, so vignette examples call it with :::.
library(OdysseusSurvivalModule) library(DatabaseConnector) library(Eunomia)
connectionDetails <- Eunomia::getEunomiaConnectionDetails() connection <- DatabaseConnector::connect(connectionDetails) cdmDatabaseSchema <- Eunomia::getEunomiaCdmDatabaseSchema() cohortDatabaseSchema <- Eunomia::getEunomiaResultsSchema()
addCohortSurvival() does not create cohorts from concept IDs. It expects existing
target and outcome cohort tables. In a typical OHDSI workflow, those cohorts are
created ahead of time with ATLAS, Circe, or custom SQL and stored in the cohort
results schema.
For the examples below, assume a table named cohort exists in the Eunomia results
schema and contains:
12survivalData <- OdysseusSurvivalModule:::addCohortSurvival( connection = connection, cdmDatabaseSchema = cdmDatabaseSchema, cohortDatabaseSchema = cohortDatabaseSchema, targetCohortTable = "cohort", targetCohortId = 1, outcomeCohortTable = "cohort", outcomeCohortId = 2, outcomeDateVariable = "cohort_start_date", followUpDays = 365, includeAge = TRUE, includeGender = TRUE ) head(survivalData)
The resulting data frame contains subject_id, time, and status, with optional
age_years and gender columns when requested.
kmFit <- singleEventSurvival( survivalData = survivalData, timeScale = "days", model = "km", strata = "gender", confInt = 0.95 ) names(kmFit) kmFit[["overall"]]$summary kmFit[["gender=Female"]]$summary kmFit$logrank_test_gender
The returned object is a named list. Each stratum entry contains:
data: survival step datasummary: aggregate statistics such as median and mean survivalWhen strata = "gender", the list includes entries such as gender=Female and
gender=Male, plus overall.
overall_curve <- kmFit[["overall"]]$data female_curve <- kmFit[["gender=Female"]]$data head(overall_curve) head(female_curve)
Each data table contains stepwise survival information, including time, n_risk,
n_event, survival, hazard, and cumulative event counts.
singleEventSurvival() returns tabular survival output rather than a survfit object,
so plotting is done from the returned data frame.
plot( kmFit[["overall"]]$data$time, kmFit[["overall"]]$data$survival, type = "s", xlab = "Time (days)", ylab = "Survival probability", main = "Overall Kaplan-Meier curve" )
The model argument supports "km", "cox", "weibull", "exponential",
"lognormal", and "loglogistic".
coxFit <- singleEventSurvival( survivalData = survivalData, timeScale = "days", model = "cox", covariates = c("age_years"), confInt = 0.95 ) weibullFit <- singleEventSurvival( survivalData = survivalData, timeScale = "days", model = "weibull", covariates = c("age_years") ) coxFit[["overall"]]$summary weibullFit[["overall"]]$summary
For Cox and parametric models, the function still returns survival summaries and step data. It does not return a coefficient table or hazard-ratio table.
DatabaseConnector::disconnect(connection)
The core workflow is:
OdysseusSurvivalModule:::addCohortSurvival().singleEventSurvival().data and summary components directly.Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.