--- title: "Practical Examples with Eunomia" output: rmarkdown::html_vignette vignette: > %\VignetteIndexEntry{Practical Examples with Eunomia} %\VignetteEngine{knitr::rmarkdown} %\VignetteEncoding{UTF-8} --- ```{r, include = FALSE} knitr::opts_chunk$set( collapse = TRUE, comment = "#>", eval = FALSE ) ``` ## Introduction 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: - target cohort `1` - outcome cohort `2` ## Connect to Eunomia ```{r setup-common} library(OdysseusSurvivalModule) library(DatabaseConnector) library(Eunomia) connectionDetails <- Eunomia::getEunomiaConnectionDetails() connection <- DatabaseConnector::connect(connectionDetails) cdmDatabaseSchema <- Eunomia::getEunomiaCdmDatabaseSchema() cohortDatabaseSchema <- Eunomia::getEunomiaResultsSchema() ``` ## Example 1: Build a Survival Dataset ```{r example-build} 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) ``` ## Example 2: Overall Kaplan-Meier Summary ```{r example-km-overall} kmOverall <- singleEventSurvival( survivalData = survivalData, timeScale = "days", model = "km" ) kmOverall[["overall"]]$summary head(kmOverall[["overall"]]$data) ``` ## Example 3: Compare Gender Groups ```{r example-gender} kmGender <- singleEventSurvival( survivalData = survivalData, timeScale = "days", model = "km", strata = "gender" ) kmGender[["gender=Female"]]$summary kmGender[["gender=Male"]]$summary kmGender$logrank_test_gender ``` ## Example 4: Compare Age Groups ```{r example-age} kmAge <- singleEventSurvival( survivalData = survivalData, timeScale = "days", model = "km", strata = "age_group", ageBreaks = list(c(18, 49), c(50, 64), c(65, Inf)) ) kmAge[["age_group=18-49"]]$summary kmAge[["age_group=50-64"]]$summary kmAge[["age_group=65+"]]$summary kmAge$logrank_test_age_group ``` ## Example 5: Compare Model Families ```{r example-models} 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 ) summaryTable ``` ## Example 6: Produce a Simple Report Table ```{r example-report} reportTable <- 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 ) reportTable ``` ## Example 7: Plot from Returned Data ```{r example-plot} plot( 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" ) ``` ## Cleanup ```{r cleanup-all} DatabaseConnector::disconnect(connection) ``` ## Summary The practical Eunomia workflow is: 1. Connect to Eunomia. 2. Use prebuilt target and outcome cohorts. 3. Build a survival dataset with the internal helper. 4. Fit one or more models with `singleEventSurvival()`. 5. Read results from named list entries and their `data` and `summary` fields.