From 56cc5eaa05e190db120ae088026f358513658702 Mon Sep 17 00:00:00 2001 From: Rammprasad Ganapathy Date: Tue, 22 Oct 2024 06:32:00 +0000 Subject: [PATCH 01/15] {sdtm.oak} blog. --- inst/WORDLIST.txt | 27 + .../zzz_DO_NOT_EDIT_introducing.../appendix.R | 73 + .../introducing_sdtm.oak.qmd | 252 + posts/zzz_DO_NOT_EDIT_introducing.../logo.svg | 11488 ++++++++++++++++ 4 files changed, 11840 insertions(+) create mode 100644 posts/zzz_DO_NOT_EDIT_introducing.../appendix.R create mode 100644 posts/zzz_DO_NOT_EDIT_introducing.../introducing_sdtm.oak.qmd create mode 100644 posts/zzz_DO_NOT_EDIT_introducing.../logo.svg diff --git a/inst/WORDLIST.txt b/inst/WORDLIST.txt index f668b780..be25318e 100644 --- a/inst/WORDLIST.txt +++ b/inst/WORDLIST.txt @@ -1160,3 +1160,30 @@ mypackage parmsam shinyl zzz +BEFORE’ +CDASH +CMSTRTPT +CMTRT +CRF +DM +eCRF +EDC +eDT +FLUIDS’ +hardcode +hardcoded +MDPRIOR +MHOCCUR +MHPRESP +MHTERM +NonCRF +oak’ +Pressure’ +RELREC +Roadmap +SV +TEMP’ +VSMETHOD +VSPOS +VSTEST +Y’ diff --git a/posts/zzz_DO_NOT_EDIT_introducing.../appendix.R b/posts/zzz_DO_NOT_EDIT_introducing.../appendix.R new file mode 100644 index 00000000..c69926b0 --- /dev/null +++ b/posts/zzz_DO_NOT_EDIT_introducing.../appendix.R @@ -0,0 +1,73 @@ +suppressMessages(library(dplyr)) +# markdown helpers -------------------------------------------------------- + +markdown_appendix <- function(name, content) { + paste(paste("##", name, "{.appendix}"), " ", content, sep = "\n") +} +markdown_link <- function(text, path) { + paste0("[", text, "](", path, ")") +} + + + +# worker functions -------------------------------------------------------- + +insert_source <- function(repo_spec, name, + collection = "posts", + branch = "main", + host = "https://github.com", + text = "Source", + file_name) { + path <- paste( + host, + repo_spec, + "tree", + branch, + collection, + name, + file_name, + sep = "/" + ) + return(markdown_link(text, path)) +} + +insert_timestamp <- function(tzone = Sys.timezone()) { + time <- lubridate::now(tzone = tzone) + stamp <- as.character(time, tz = tzone, usetz = TRUE) + return(stamp) +} + +insert_lockfile <- function(repo_spec, name, + collection = "posts", + branch = "main", + host = "https://github.com", + text = "Session info") { + path <- path <- "https://pharmaverse.github.io/blog/session_info.html" + + return(markdown_link(text, path)) +} + + + +# top level function ------------------------------------------------------ + +insert_appendix <- function(repo_spec, name, collection = "posts", file_name) { + appendices <- paste( + markdown_appendix( + name = "Last updated", + content = insert_timestamp() + ), + " ", + markdown_appendix( + name = "Details", + content = paste( + insert_source(repo_spec, name, collection, file_name = file_name), + # get renv information, + insert_lockfile(repo_spec, name, collection), + sep = ", " + ) + ), + sep = "\n" + ) + knitr::asis_output(appendices) +} diff --git a/posts/zzz_DO_NOT_EDIT_introducing.../introducing_sdtm.oak.qmd b/posts/zzz_DO_NOT_EDIT_introducing.../introducing_sdtm.oak.qmd new file mode 100644 index 00000000..f5bad9fc --- /dev/null +++ b/posts/zzz_DO_NOT_EDIT_introducing.../introducing_sdtm.oak.qmd @@ -0,0 +1,252 @@ +--- +title: "Introducing sdtm.oak" +author: + - name: Rammprasad Ganapathy +description: "An EDC & Data Standards agnostic solution that enables the pharmaceutical programming community to develop SDTM datasets in R" +# Note that the date below will be auto-updated when the post is merged. +date: "2024-10-19" +# Please do not use any non-default categories. +# You can find the default categories in the repository README.md +categories: [SDTM] +# Feel free to change the image +image: "logo.svg" +--- + + + +```{r setup, include=FALSE} +long_slug <- "zzz_DO_NOT_EDIT_introducing..." +# renv::use(lockfile = "renv.lock") +``` + + + +{sdtm.oak} v0.1 is now available on [CRAN](https://cran.r-project.org/web/packages/sdtm.oak/index.html). +In this blog post, we will introduce the package, key concepts, and examples. {sdtm.oak} is developed in collaboration with volunteers from several companies, including Roche, Pfizer, GSK, Transition Technologies Science, and Atorus Research. {sdtm.oak} is also sponsored by CDISC COSA with a vision of being part of CDISC 360 to address end-to-end standards development and implementation. + +# Filling the Gap + +{sdtm.oak} package addresses a critical gap in the Pharmaverse suite by enabling study programmers to create SDTM datasets in R, complementing the existing capabilities for ADaM and TLGs. + +Let's explore the challenges with SDTM programming. +Although SDTM is simpler with less complex derivations compared to ADaM, it presents unique challenges. +Unlike ADaM, which uses SDTM datasets as its source with a well-defined structure, SDTM relies on raw datasets as input. +These raw datasets can vary widely in structure, depending on the data collection and EDC system used. +Even the same eCRF, when designed in different EDC systems, can produce raw datasets with different structures. + +Another challenge is the variability in data collection standards. +Although CDISC has established CDASH data collection standards, many pharmaceutical companies have their own standards, which can differ significantly from CDASH. +Additionally, since CDASH is not mandated by the FDA, sponsors can choose the data collection standards that best fit their needs. + +There are hundreds of EDC systems available in the marketplace, and the data collection standards vary significantly. +Creating a single open-source package to work with all sorts of raw data formats and data collection standards seemed impossible. +But here's the good news: not anymore! +The {sdtm.oak} team has a solution to address this challenge. + +{sdtm.oak} is designed to be highly versatile, accommodating varying raw data structures from different EDC systems and external vendors. +Moreover, {sdtm.oak} is data standards agnostic, meaning it supports both CDISC-defined data collection standards (CDASH) and various proprietary data collection standards defined by pharmaceutical companies. +The reusable algorithms concept in {sdtm.oak} provides a framework for modular programming, making it a valuable addition to the Pharmaverse ecosystem. + +# EDC & Data standards agnostic + +We adopted the following innovative approach to make {sdtm.oak} adaptable to various EDC systems and data collection standards: + +- SDTM mappings are categorized as algorithms and developed as R functions. +- Used datasets and variables as parameters to function calls. + +# Algorithms + +The SDTM mappings that transform the collected source data (eCRF, eDT) into the target SDTM data model are grouped into algorithms. +These mapping algorithms form the backbone of {sdtm.oak}. + +Key Points: - Algorithms can be re-used across multiple SDTM domains. +- Programming language agnostic: This concept does not rely on a specific programming language for implementation. +The {sdtm.oak} package includes R functions to handle these algorithms. + +Some of the basic algorithms are below, also explaining how these Algorithms can be used across multiple domains. + +```{r echo = FALSE, results = "asis"} +library(knitr) +algorithms <- data.frame( + `Algorithm Name` = c( + "assign_no_ct", + "assign_ct", + "assign_datetime", + "hardcode_ct", + "hardcode_no_ct", + "condition_add" + ), + `Description` = c( + paste( + "One-to-one mapping between the raw source and a target", + "SDTM variable that has no controlled terminology restrictions.", + "Just a simple assignment", + "statement." + ), + paste( + "One-to-one mapping between the raw source and a target ", + "SDTM variable that is subject to controlled terminology restrictions.", + "A simple assign statement and applying controlled terminology.", + "This will be used only if the SDTM variable has an associated", + "controlled terminology." + ), + paste( + "One-to-one mapping between the raw source and a target that involves ", + "mapping a Date or time or datetime component. This mapping algorithm", + "also takes care of handling unknown dates and converting them into.", + "ISO8601 format." + ), + paste( + "Mapping a hardcoded value to a target SDTM variable that is subject to terminology restrictions.", + "This will be used only if the SDTM variable has an associated", + "controlled terminology." + ), + paste( + "Mapping a hardcoded value to a target SDTM variable that has no terminology restrictions." + ), + paste( + "Algorithm that is used to filter the source data and/or target domain", + "based on a condition. The mapping will be applied only if the condition is met.", + "The filter can be applied either at the source dataset or at target dataset or both.", + " This algorithm has to be used in conjunction with other algorithms, that is if the", + " condition is met perform the mapping using algorithms like assign_ct,", + "assign_no_ct, hardcode_ct, hardcode_no_ct, assign_datetime." + ) + ), + `Example` = c( + paste( + "MH.MHTERM
", + "AE.AETERM" + ), + paste("VS.VSPOS
", "VS.VSLAT"), + paste("MH.MHSTDTC
", "AE.AEENDTC"), + paste( + "MH.MHPRESP = 'Y'
", + "
VS.VSTEST = 'Systolic Blood Pressure'
", + "
VS.VSORRESU = 'mmHg'
" + ), + paste( + "FA.FASCAT = 'COVID-19 PROBABLE CASE'
", + "
CM.CMTRT = 'FLUIDS'" + ), + paste( + "If If MDPRIOR == 1 then CM.CMSTRTPT = 'BEFORE'.
", + "
VS.VSMETHOD when VSTESTCD = 'TEMP'
", + "
If collected value in raw variable DOS is numeric then CM.CMDOSE
", + "
If collected value in raw variable MOD is different to CMTRT then map to CM.CMMODIFY" + ) + ), stringsAsFactors = TRUE +) +knitr::kable(algorithms) +``` + +# Functions and Parameters + +All the aforementioned algorithms are implemented as R functions, each accepting the raw dataset, raw variable, target SDTM dataset, and target SDTM variable as parameters. + +```{r} +library(sdtm.oak) +library(dplyr) + +cm_raw <- tibble::tribble( + ~oak_id, ~raw_source, ~patient_number, ~MDRAW, ~DOSU, ~MDPRIOR, + 1L, "cm_raw", 375L, "BABY ASPIRIN", "mg", 1L, + 2L, "cm_raw", 375L, "CORTISPORIN", "Gram", 0L, + 3L, "cm_raw", 376L, "ASPIRIN", NA, 0L +) + +study_ct <- tibble::tribble( + ~codelist_code, ~term_code, ~term_value, ~collected_value, ~term_preferred_term, ~term_synonyms, + "C71620", "C25613", "%", "%", "Percentage", "Percentage", + "C71620", "C28253", "mg", "mg", "Milligram", "Milligram", + "C71620", "C48155", "g", "g", "Gram", "Gram" +) + +cm <- + # Derive topic variable + # SDTM Mapping - Map the collected value to CM. CMTRT + assign_no_ct( + raw_dat = cm_raw, + raw_var = "MDRAW", + tgt_var = "CMTRT" + ) %>% + # Derive qualifier CMDOSU + # SDTM Mapping - Map the collected value to CM. CMDOSU + assign_ct( + raw_dat = cm_raw, + raw_var = "DOSU", + tgt_var = "CMDOSU", + ct_spec = study_ct, + ct_clst = "C71620", + id_vars = oak_id_vars() + ) %>% + # Derive qualifier CMSTTPT + # SDTM mapping - If MDPRIOR == 1 then CM.CMSTTPT = 'SCREENING' + hardcode_no_ct( + raw_dat = condition_add(cm_raw, MDPRIOR == "1"), + raw_var = "MDPRIOR", + tgt_var = "CMSTTPT", + tgt_val = "SCREENING", + id_vars = oak_id_vars() + ) +``` + +As you can see in this function call, the raw dataset and variable names are passed as parameters. +As long as the raw dataset and variable are present in the global environment, the function will execute the algorithm's logic and create the target SDTM variable. + +{sdtm.oak} is designed to handle any type of input raw format. +It is not tied to any specific data collection standards, making it both EDC and data standards agnostic. + +# Why not use dplyr? + +As you can see from the definition of the algorithms, all of them are a form of mutate statement. +However, these functions provide a way to pass dataset and variable names as parameters and the ability to merge with the previous step by id variables. +This enables users to build the code in a modular and simplistic fashion, mapping one SDTM variable at a time, connected by pipes. + +The SDTM mappings can also be used together in a single step, such as applying a filter condition, executing an mapping, and merging the outcome with the previous step. +When there is a need to apply controlled terminology, the algorithms perform additional checks, such as verifying the presence of the value in the study's controlled terminology specification, which is passed as an object to the function call. +If the collected value is present, it applies the standard submission value. + +While all these functionalities can be achieved with dplyr, {sdtm.oak} functions make it simpler to use, resulting in modular way to build SDTM datasets. + +# oak_id_vars + +The oak_id_vars is a crucial link between the raw datasets and the mapped SDTM domain. +As the user derives each SDTM variable, it is merged with the corresponding topic variable using oak_id_vars. +In {sdtm.oak}, the variables oak_id, raw_source, and patient_number are considered as oak_id_vars. +These three variables must be added to all raw datasets. +Users can also extend this with any additional id vars. + +oak_id:- Type: numeric- Value: equal to the raw dataframe row number. + +raw_source:- Type: Character- Value: equal to the raw dataset (eCRF) name or eDT dataset name. + +patient_number:- Type: numeric- Value: equal to the subject number in CRF or NonCRF data source. + +# In this Release + +The v0.1.0 release of ‘sdtm.oak’ users can create the majority of the SDTM domains. +Domains that are NOT in scope for the V0.1.0 release are DM (Demographics), Trial Design Domains, SV (Subject Visits), SE (Subject Elements), RELREC (Related Records), Associated Person domains, creation of SUPP domain, and EPOCH Variable across all domains. + +# Roadmap + +We are planning to develop the below features in the subsequent releases. + +- Functions required to derive reference date variables in the DM domain.\ +- Metadata driven automation based on the standardized SDTM specification.\ +- Functions required to program the EPOCH Variable.\ +- Functions to derive standard units and results based on metadata.\ +- Functions required to create SUPP domains.\ +- Making the Algorithms part of the standard CDISC eCRF portal enabling automation of CDISC standard eCRFs. + + + +```{r, echo=FALSE} +source("appendix.R") +insert_appendix( + repo_spec = "pharmaverse/blog", + name = long_slug, + # file_name should be the name of your file + file_name = list.files() %>% stringr::str_subset(".qmd") %>% first() +) +``` diff --git a/posts/zzz_DO_NOT_EDIT_introducing.../logo.svg b/posts/zzz_DO_NOT_EDIT_introducing.../logo.svg new file mode 100644 index 00000000..cf81b6f7 --- /dev/null +++ b/posts/zzz_DO_NOT_EDIT_introducing.../logo.svg @@ -0,0 +1,11488 @@ + + + + From 3ca22458ae31b0710d7f0adc0fa8ba23806077b6 Mon Sep 17 00:00:00 2001 From: Ram Ganapathy Date: Tue, 22 Oct 2024 14:33:19 -0700 Subject: [PATCH 02/15] Apply suggestions from code review Co-authored-by: Ross Farrugia <82581364+rossfarrugia@users.noreply.github.com> --- .../introducing_sdtm.oak.qmd | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/posts/zzz_DO_NOT_EDIT_introducing.../introducing_sdtm.oak.qmd b/posts/zzz_DO_NOT_EDIT_introducing.../introducing_sdtm.oak.qmd index f5bad9fc..a0dcdeaf 100644 --- a/posts/zzz_DO_NOT_EDIT_introducing.../introducing_sdtm.oak.qmd +++ b/posts/zzz_DO_NOT_EDIT_introducing.../introducing_sdtm.oak.qmd @@ -26,7 +26,7 @@ In this blog post, we will introduce the package, key concepts, and examples. {s # Filling the Gap -{sdtm.oak} package addresses a critical gap in the Pharmaverse suite by enabling study programmers to create SDTM datasets in R, complementing the existing capabilities for ADaM and TLGs. +{sdtm.oak} package addresses a critical gap in the pharmaverse suite by enabling study programmers to create SDTM datasets in R, complementing the existing capabilities for ADaM, TLGs, eSubmission, etc. Let's explore the challenges with SDTM programming. Although SDTM is simpler with less complex derivations compared to ADaM, it presents unique challenges. @@ -59,7 +59,8 @@ We adopted the following innovative approach to make {sdtm.oak} adaptable to var The SDTM mappings that transform the collected source data (eCRF, eDT) into the target SDTM data model are grouped into algorithms. These mapping algorithms form the backbone of {sdtm.oak}. -Key Points: - Algorithms can be re-used across multiple SDTM domains. +Key Points: +- Algorithms can be re-used across multiple SDTM domains. - Programming language agnostic: This concept does not rely on a specific programming language for implementation. The {sdtm.oak} package includes R functions to handle these algorithms. @@ -191,13 +192,13 @@ cm <- ) ``` -As you can see in this function call, the raw dataset and variable names are passed as parameters. +As you can see in this function call, the raw dataset and variable names are passed as arguments. As long as the raw dataset and variable are present in the global environment, the function will execute the algorithm's logic and create the target SDTM variable. {sdtm.oak} is designed to handle any type of input raw format. It is not tied to any specific data collection standards, making it both EDC and data standards agnostic. -# Why not use dplyr? +# Why not use {dplyr}? As you can see from the definition of the algorithms, all of them are a form of mutate statement. However, these functions provide a way to pass dataset and variable names as parameters and the ability to merge with the previous step by id variables. @@ -207,11 +208,11 @@ The SDTM mappings can also be used together in a single step, such as applying a When there is a need to apply controlled terminology, the algorithms perform additional checks, such as verifying the presence of the value in the study's controlled terminology specification, which is passed as an object to the function call. If the collected value is present, it applies the standard submission value. -While all these functionalities can be achieved with dplyr, {sdtm.oak} functions make it simpler to use, resulting in modular way to build SDTM datasets. +While all these functionalities can be achieved with dplyr, {sdtm.oak} functions make it simpler to use, resulting in a modular way to build SDTM datasets. # oak_id_vars -The oak_id_vars is a crucial link between the raw datasets and the mapped SDTM domain. +The `oak_id_vars` is a crucial link between the raw datasets and the mapped SDTM domain. As the user derives each SDTM variable, it is merged with the corresponding topic variable using oak_id_vars. In {sdtm.oak}, the variables oak_id, raw_source, and patient_number are considered as oak_id_vars. These three variables must be added to all raw datasets. @@ -226,7 +227,7 @@ patient_number:- Type: numeric- Value: equal to the subject number in CRF or Non # In this Release The v0.1.0 release of ‘sdtm.oak’ users can create the majority of the SDTM domains. -Domains that are NOT in scope for the V0.1.0 release are DM (Demographics), Trial Design Domains, SV (Subject Visits), SE (Subject Elements), RELREC (Related Records), Associated Person domains, creation of SUPP domain, and EPOCH Variable across all domains. +Domains that are NOT in scope for the v0.1.0 release are DM (Demographics), Trial Design Domains, SV (Subject Visits), SE (Subject Elements), RELREC (Related Records), Associated Person domains, creation of SUPP domain, and EPOCH Variable across all domains. # Roadmap From f234b4f9c1258398f7e018c839b420203d0b25fc Mon Sep 17 00:00:00 2001 From: Rammprasad Ganapathy Date: Wed, 23 Oct 2024 06:00:17 +0000 Subject: [PATCH 03/15] Address review comments --- inst/WORDLIST.txt | 1 + .../introducing_sdtm.oak.qmd | 43 +++++++++--------- .../reusable_algorithms.jpg | Bin 0 -> 113364 bytes 3 files changed, 23 insertions(+), 21 deletions(-) create mode 100644 posts/zzz_DO_NOT_EDIT_introducing.../reusable_algorithms.jpg diff --git a/inst/WORDLIST.txt b/inst/WORDLIST.txt index be25318e..710c4684 100644 --- a/inst/WORDLIST.txt +++ b/inst/WORDLIST.txt @@ -1187,3 +1187,4 @@ VSMETHOD VSPOS VSTEST Y’ +oakgarden diff --git a/posts/zzz_DO_NOT_EDIT_introducing.../introducing_sdtm.oak.qmd b/posts/zzz_DO_NOT_EDIT_introducing.../introducing_sdtm.oak.qmd index a0dcdeaf..df26011c 100644 --- a/posts/zzz_DO_NOT_EDIT_introducing.../introducing_sdtm.oak.qmd +++ b/posts/zzz_DO_NOT_EDIT_introducing.../introducing_sdtm.oak.qmd @@ -22,30 +22,20 @@ long_slug <- "zzz_DO_NOT_EDIT_introducing..." {sdtm.oak} v0.1 is now available on [CRAN](https://cran.r-project.org/web/packages/sdtm.oak/index.html). -In this blog post, we will introduce the package, key concepts, and examples. {sdtm.oak} is developed in collaboration with volunteers from several companies, including Roche, Pfizer, GSK, Transition Technologies Science, and Atorus Research. {sdtm.oak} is also sponsored by CDISC COSA with a vision of being part of CDISC 360 to address end-to-end standards development and implementation. +In this blog post, we will introduce the package, key concepts, and examples. {sdtm.oak} is developed in collaboration with volunteers from several companies, including Roche, Pfizer, GSK, Pattern Institute, Transition Technologies Science, and Atorus Research. {sdtm.oak} is also sponsored by CDISC COSA with a vision of being part of CDISC 360 to address end-to-end standards development and implementation. # Filling the Gap {sdtm.oak} package addresses a critical gap in the pharmaverse suite by enabling study programmers to create SDTM datasets in R, complementing the existing capabilities for ADaM, TLGs, eSubmission, etc. -Let's explore the challenges with SDTM programming. -Although SDTM is simpler with less complex derivations compared to ADaM, it presents unique challenges. -Unlike ADaM, which uses SDTM datasets as its source with a well-defined structure, SDTM relies on raw datasets as input. -These raw datasets can vary widely in structure, depending on the data collection and EDC system used. -Even the same eCRF, when designed in different EDC systems, can produce raw datasets with different structures. +Let's explore the challenges with SDTM programming. Although SDTM is simpler with less complex derivations compared to ADaM, it presents unique challenges. Unlike ADaM, which uses SDTM datasets as its source with a well-defined structure, SDTM relies on raw datasets as input. +These raw datasets can vary widely in structure, depending on the data collection and EDC system used. Even the same eCRF (electronic Case Report Form), when designed in different EDC (Electronic Data Capture) systems, can produce raw datasets with different structures. -Another challenge is the variability in data collection standards. -Although CDISC has established CDASH data collection standards, many pharmaceutical companies have their own standards, which can differ significantly from CDASH. -Additionally, since CDASH is not mandated by the FDA, sponsors can choose the data collection standards that best fit their needs. +Another challenge is the variability in data collection standards. Although CDISC has established CDASH data collection standards, many pharmaceutical companies have their own standards, which can differ significantly from CDASH. Additionally, since CDASH is not mandated by the FDA, sponsors can choose the data collection standards that best fit their needs. -There are hundreds of EDC systems available in the marketplace, and the data collection standards vary significantly. -Creating a single open-source package to work with all sorts of raw data formats and data collection standards seemed impossible. -But here's the good news: not anymore! -The {sdtm.oak} team has a solution to address this challenge. +There are hundreds of EDC systems available in the marketplace, and the data collection standards vary significantly. Creating a single open-source package to work with all sorts of raw data formats and data collection standards seemed impossible. But here's the good news: not anymore! The {sdtm.oak} team has a solution to address this challenge. -{sdtm.oak} is designed to be highly versatile, accommodating varying raw data structures from different EDC systems and external vendors. -Moreover, {sdtm.oak} is data standards agnostic, meaning it supports both CDISC-defined data collection standards (CDASH) and various proprietary data collection standards defined by pharmaceutical companies. -The reusable algorithms concept in {sdtm.oak} provides a framework for modular programming, making it a valuable addition to the Pharmaverse ecosystem. +{sdtm.oak} is designed to be highly versatile, accommodating varying raw data structures from different EDC systems and external vendors. Moreover, {sdtm.oak} is data standards agnostic, meaning it supports both CDISC-defined data collection standards (CDASH) and various proprietary data collection standards defined by pharmaceutical companies. The reusable algorithms concept in {sdtm.oak} provides a framework for modular programming, making it a valuable addition to the Pharmaverse ecosystem. # EDC & Data standards agnostic @@ -56,7 +46,7 @@ We adopted the following innovative approach to make {sdtm.oak} adaptable to var # Algorithms -The SDTM mappings that transform the collected source data (eCRF, eDT) into the target SDTM data model are grouped into algorithms. +The SDTM mappings that transform the collected source data (eCRF: Electronic Case Report Form, eDT: External Data Transfer) into the target SDTM data model are grouped into algorithms. These mapping algorithms form the backbone of {sdtm.oak}. Key Points: @@ -141,6 +131,11 @@ algorithms <- data.frame( knitr::kable(algorithms) ``` +Here is an example of reusing an algorithm across multiple domains, +variables, and also to a non-standard + +![](reusable_algorithms.jpg){width="600"} + # Functions and Parameters All the aforementioned algorithms are implemented as R functions, each accepting the raw dataset, raw variable, target SDTM dataset, and target SDTM variable as parameters. @@ -192,11 +187,9 @@ cm <- ) ``` -As you can see in this function call, the raw dataset and variable names are passed as arguments. -As long as the raw dataset and variable are present in the global environment, the function will execute the algorithm's logic and create the target SDTM variable. +As you can see in this function call, the raw dataset and variable names are passed as arguments. As long as the raw dataset and variable are present in the global environment, the function will execute the algorithm's logic and create the target SDTM variable. -{sdtm.oak} is designed to handle any type of input raw format. -It is not tied to any specific data collection standards, making it both EDC and data standards agnostic. +{sdtm.oak} is designed to handle any type of input raw format. It is not tied to any specific data collection standards, making it both EDC and data standards agnostic. # Why not use {dplyr}? @@ -240,6 +233,14 @@ We are planning to develop the below features in the subsequent releases. - Functions required to create SUPP domains.\ - Making the Algorithms part of the standard CDISC eCRF portal enabling automation of CDISC standard eCRFs. +# Get Involved +Please try the package and provide us with your feedback, or get involved in the development of new features. We can be reached through any of the following means: + +Slack: oakgarden.slack.com\ +GitHub: https://github.com/pharmaverse/sdtm.oak\ +CDISC Wiki: https://wiki.cdisc.org/display/oakgarden + + ```{r, echo=FALSE} diff --git a/posts/zzz_DO_NOT_EDIT_introducing.../reusable_algorithms.jpg b/posts/zzz_DO_NOT_EDIT_introducing.../reusable_algorithms.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5b5bd0278031dc27ebfb499ff4088fb21f2a49bd GIT binary patch literal 113364 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�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 Date: Wed, 23 Oct 2024 06:07:56 +0000 Subject: [PATCH 04/15] pipeline failures --- inst/WORDLIST.txt | 9 +++++---- .../introducing_sdtm.oak.qmd | 2 +- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/inst/WORDLIST.txt b/inst/WORDLIST.txt index 710c4684..d2eba159 100644 --- a/inst/WORDLIST.txt +++ b/inst/WORDLIST.txt @@ -1177,14 +1177,15 @@ MHOCCUR MHPRESP MHTERM NonCRF -oak’ -Pressure’ +oak +Pressure RELREC Roadmap SV -TEMP’ +TEMP VSMETHOD VSPOS VSTEST -Y’ +Y oakgarden + diff --git a/posts/zzz_DO_NOT_EDIT_introducing.../introducing_sdtm.oak.qmd b/posts/zzz_DO_NOT_EDIT_introducing.../introducing_sdtm.oak.qmd index df26011c..70eceace 100644 --- a/posts/zzz_DO_NOT_EDIT_introducing.../introducing_sdtm.oak.qmd +++ b/posts/zzz_DO_NOT_EDIT_introducing.../introducing_sdtm.oak.qmd @@ -219,7 +219,7 @@ patient_number:- Type: numeric- Value: equal to the subject number in CRF or Non # In this Release -The v0.1.0 release of ‘sdtm.oak’ users can create the majority of the SDTM domains. +The v0.1.0 release of {sdtm.oak} users can create the majority of the SDTM domains. Domains that are NOT in scope for the v0.1.0 release are DM (Demographics), Trial Design Domains, SV (Subject Visits), SE (Subject Elements), RELREC (Related Records), Associated Person domains, creation of SUPP domain, and EPOCH Variable across all domains. # Roadmap From 5f6a9b6135e58f6267b00bb5395860e70bc800f3 Mon Sep 17 00:00:00 2001 From: Rammprasad Ganapathy Date: Wed, 23 Oct 2024 06:19:14 +0000 Subject: [PATCH 05/15] spelling error --- posts/zzz_DO_NOT_EDIT_introducing.../introducing_sdtm.oak.qmd | 2 -- 1 file changed, 2 deletions(-) diff --git a/posts/zzz_DO_NOT_EDIT_introducing.../introducing_sdtm.oak.qmd b/posts/zzz_DO_NOT_EDIT_introducing.../introducing_sdtm.oak.qmd index 70eceace..4f83f171 100644 --- a/posts/zzz_DO_NOT_EDIT_introducing.../introducing_sdtm.oak.qmd +++ b/posts/zzz_DO_NOT_EDIT_introducing.../introducing_sdtm.oak.qmd @@ -189,8 +189,6 @@ cm <- As you can see in this function call, the raw dataset and variable names are passed as arguments. As long as the raw dataset and variable are present in the global environment, the function will execute the algorithm's logic and create the target SDTM variable. -{sdtm.oak} is designed to handle any type of input raw format. It is not tied to any specific data collection standards, making it both EDC and data standards agnostic. - # Why not use {dplyr}? As you can see from the definition of the algorithms, all of them are a form of mutate statement. From 8e828b5121b6a40936701a0e343cc4e90b357fbb Mon Sep 17 00:00:00 2001 From: Rammprasad Ganapathy Date: Wed, 23 Oct 2024 06:21:55 +0000 Subject: [PATCH 06/15] spelling mistakes --- posts/zzz_DO_NOT_EDIT_introducing.../introducing_sdtm.oak.qmd | 2 ++ 1 file changed, 2 insertions(+) diff --git a/posts/zzz_DO_NOT_EDIT_introducing.../introducing_sdtm.oak.qmd b/posts/zzz_DO_NOT_EDIT_introducing.../introducing_sdtm.oak.qmd index 4f83f171..f7815abf 100644 --- a/posts/zzz_DO_NOT_EDIT_introducing.../introducing_sdtm.oak.qmd +++ b/posts/zzz_DO_NOT_EDIT_introducing.../introducing_sdtm.oak.qmd @@ -189,6 +189,8 @@ cm <- As you can see in this function call, the raw dataset and variable names are passed as arguments. As long as the raw dataset and variable are present in the global environment, the function will execute the algorithm's logic and create the target SDTM variable. +{sdtm.oak} is designed to handle any type of raw input format. It is not tied to any specific data collection standards, making it both EDC-agnostic and data standards-agnostic. + # Why not use {dplyr}? As you can see from the definition of the algorithms, all of them are a form of mutate statement. From 4722a164aea254078e995f6a102008160bb6b203 Mon Sep 17 00:00:00 2001 From: Rammprasad Ganapathy Date: Wed, 23 Oct 2024 06:27:39 +0000 Subject: [PATCH 07/15] spelling --- inst/WORDLIST.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/inst/WORDLIST.txt b/inst/WORDLIST.txt index d2eba159..da030285 100644 --- a/inst/WORDLIST.txt +++ b/inst/WORDLIST.txt @@ -1186,6 +1186,8 @@ TEMP VSMETHOD VSPOS VSTEST +VSLAT +tgt Y oakgarden From 07d2e2553406040f073891371b3f85029f730fa8 Mon Sep 17 00:00:00 2001 From: Rammprasad Ganapathy Date: Wed, 23 Oct 2024 06:31:45 +0000 Subject: [PATCH 08/15] worddlist --- inst/WORDLIST.txt | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/inst/WORDLIST.txt b/inst/WORDLIST.txt index da030285..b8c8203b 100644 --- a/inst/WORDLIST.txt +++ b/inst/WORDLIST.txt @@ -1190,4 +1190,20 @@ VSLAT tgt Y oakgarden +stringsAsFactors +Rammprasad +mmHg +MDRAW +kable +Ganapathy +FASCAT +DOSU +dat +CORTISPORIN +CMSTTPT +CMMODIFY +CMDOSU +CMDOSE +clst +br From 31fab669d946b97532ccb03b8fced1dff2ca31fc Mon Sep 17 00:00:00 2001 From: Ram Ganapathy Date: Wed, 23 Oct 2024 13:05:27 -0700 Subject: [PATCH 09/15] Apply suggestions from code review Co-authored-by: StefanThoma <40463122+StefanThoma@users.noreply.github.com> Co-authored-by: Edoardo Mancini <53403957+manciniedoardo@users.noreply.github.com> --- .../introducing_sdtm.oak.qmd | 33 +++++++++---------- 1 file changed, 16 insertions(+), 17 deletions(-) diff --git a/posts/zzz_DO_NOT_EDIT_introducing.../introducing_sdtm.oak.qmd b/posts/zzz_DO_NOT_EDIT_introducing.../introducing_sdtm.oak.qmd index f7815abf..80ff60a4 100644 --- a/posts/zzz_DO_NOT_EDIT_introducing.../introducing_sdtm.oak.qmd +++ b/posts/zzz_DO_NOT_EDIT_introducing.../introducing_sdtm.oak.qmd @@ -29,20 +29,20 @@ In this blog post, we will introduce the package, key concepts, and examples. {s {sdtm.oak} package addresses a critical gap in the pharmaverse suite by enabling study programmers to create SDTM datasets in R, complementing the existing capabilities for ADaM, TLGs, eSubmission, etc. Let's explore the challenges with SDTM programming. Although SDTM is simpler with less complex derivations compared to ADaM, it presents unique challenges. Unlike ADaM, which uses SDTM datasets as its source with a well-defined structure, SDTM relies on raw datasets as input. -These raw datasets can vary widely in structure, depending on the data collection and EDC system used. Even the same eCRF (electronic Case Report Form), when designed in different EDC (Electronic Data Capture) systems, can produce raw datasets with different structures. +These raw datasets can vary widely in structure, depending on the data collection and EDC (Electronic Data Capture) system used. Even the same eCRF (electronic Case Report Form), when designed in different EDC systems, can produce raw datasets with different structures. Another challenge is the variability in data collection standards. Although CDISC has established CDASH data collection standards, many pharmaceutical companies have their own standards, which can differ significantly from CDASH. Additionally, since CDASH is not mandated by the FDA, sponsors can choose the data collection standards that best fit their needs. There are hundreds of EDC systems available in the marketplace, and the data collection standards vary significantly. Creating a single open-source package to work with all sorts of raw data formats and data collection standards seemed impossible. But here's the good news: not anymore! The {sdtm.oak} team has a solution to address this challenge. -{sdtm.oak} is designed to be highly versatile, accommodating varying raw data structures from different EDC systems and external vendors. Moreover, {sdtm.oak} is data standards agnostic, meaning it supports both CDISC-defined data collection standards (CDASH) and various proprietary data collection standards defined by pharmaceutical companies. The reusable algorithms concept in {sdtm.oak} provides a framework for modular programming, making it a valuable addition to the Pharmaverse ecosystem. +{sdtm.oak} is designed to be highly versatile, accommodating varying raw data structures from different EDC systems and external vendors. Moreover, {sdtm.oak} is data standards agnostic, meaning it supports both CDISC-defined data collection standards (CDASH) and various proprietary data collection standards defined by pharmaceutical companies. The reusable algorithms concept in {sdtm.oak} provides a framework for modular programming, making it a valuable addition to the pharmaverse ecosystem. # EDC & Data standards agnostic We adopted the following innovative approach to make {sdtm.oak} adaptable to various EDC systems and data collection standards: - SDTM mappings are categorized as algorithms and developed as R functions. -- Used datasets and variables as parameters to function calls. +- Used datasets and variables are specified as arguments to function calls. # Algorithms @@ -54,7 +54,7 @@ Key Points: - Programming language agnostic: This concept does not rely on a specific programming language for implementation. The {sdtm.oak} package includes R functions to handle these algorithms. -Some of the basic algorithms are below, also explaining how these Algorithms can be used across multiple domains. +Some of the basic algorithms are below, also explaining how these algorithms can be used across multiple domains. ```{r echo = FALSE, results = "asis"} library(knitr) @@ -98,7 +98,6 @@ algorithms <- data.frame( paste( "Algorithm that is used to filter the source data and/or target domain", "based on a condition. The mapping will be applied only if the condition is met.", - "The filter can be applied either at the source dataset or at target dataset or both.", " This algorithm has to be used in conjunction with other algorithms, that is if the", " condition is met perform the mapping using algorithms like assign_ct,", "assign_no_ct, hardcode_ct, hardcode_no_ct, assign_datetime." @@ -136,11 +135,11 @@ variables, and also to a non-standard ![](reusable_algorithms.jpg){width="600"} -# Functions and Parameters +# Functions and Arguments All the aforementioned algorithms are implemented as R functions, each accepting the raw dataset, raw variable, target SDTM dataset, and target SDTM variable as parameters. -```{r} +```{r, message = FALSE} library(sdtm.oak) library(dplyr) @@ -193,21 +192,21 @@ As you can see in this function call, the raw dataset and variable names are pas # Why not use {dplyr}? -As you can see from the definition of the algorithms, all of them are a form of mutate statement. -However, these functions provide a way to pass dataset and variable names as parameters and the ability to merge with the previous step by id variables. +As you can see from the definition of the algorithms, all of them are a form of {dplyr::mutate()} statement. +However, these functions provide a way to pass dataset and variable names as arguments and the ability to merge with the previous step by id variables. This enables users to build the code in a modular and simplistic fashion, mapping one SDTM variable at a time, connected by pipes. -The SDTM mappings can also be used together in a single step, such as applying a filter condition, executing an mapping, and merging the outcome with the previous step. -When there is a need to apply controlled terminology, the algorithms perform additional checks, such as verifying the presence of the value in the study's controlled terminology specification, which is passed as an object to the function call. +The SDTM mappings can also be used together in a single step, such as applying a filter condition, executing a mapping, and merging the outcome with the previous step. +When there is a need to apply controlled terminology, the algorithms perform additional checks, such as verifying the presence of the value in the study's controlled terminology specification, which is passed as an argument to the function call. If the collected value is present, it applies the standard submission value. While all these functionalities can be achieved with dplyr, {sdtm.oak} functions make it simpler to use, resulting in a modular way to build SDTM datasets. -# oak_id_vars +# `oak_id_vars` The `oak_id_vars` is a crucial link between the raw datasets and the mapped SDTM domain. -As the user derives each SDTM variable, it is merged with the corresponding topic variable using oak_id_vars. -In {sdtm.oak}, the variables oak_id, raw_source, and patient_number are considered as oak_id_vars. +As the user derives each SDTM variable, it is merged with the corresponding topic variable using `oak_id_vars`. +In {sdtm.oak}, the variables `oak_id`, `raw_source`, and `patient_number` are considered `oak_id_vars`. These three variables must be added to all raw datasets. Users can also extend this with any additional id vars. @@ -220,7 +219,7 @@ patient_number:- Type: numeric- Value: equal to the subject number in CRF or Non # In this Release The v0.1.0 release of {sdtm.oak} users can create the majority of the SDTM domains. -Domains that are NOT in scope for the v0.1.0 release are DM (Demographics), Trial Design Domains, SV (Subject Visits), SE (Subject Elements), RELREC (Related Records), Associated Person domains, creation of SUPP domain, and EPOCH Variable across all domains. +Domains that are NOT in scope for the v0.1.0 release are DM (Demographics), Trial Design Domains, SV (Subject Visits), SE (Subject Elements), RELREC (Related Records), Associated Person domains, creation of SUPP domain, and EPOCH variable across all domains. # Roadmap @@ -228,10 +227,10 @@ We are planning to develop the below features in the subsequent releases. - Functions required to derive reference date variables in the DM domain.\ - Metadata driven automation based on the standardized SDTM specification.\ -- Functions required to program the EPOCH Variable.\ +- Functions required to program the EPOCH variable.\ - Functions to derive standard units and results based on metadata.\ - Functions required to create SUPP domains.\ -- Making the Algorithms part of the standard CDISC eCRF portal enabling automation of CDISC standard eCRFs. +- Making the algorithms part of the standard CDISC eCRF portal enabling automation of CDISC standard eCRFs. # Get Involved Please try the package and provide us with your feedback, or get involved in the development of new features. We can be reached through any of the following means: From dcf215feeb7dac1321cd0c52aac196bf19141c5b Mon Sep 17 00:00:00 2001 From: Rammprasad Ganapathy Date: Wed, 23 Oct 2024 20:39:40 +0000 Subject: [PATCH 10/15] Review comments --- .../introducing_sdtm.oak.qmd | 51 +++++++++++++------ 1 file changed, 36 insertions(+), 15 deletions(-) diff --git a/posts/zzz_DO_NOT_EDIT_introducing.../introducing_sdtm.oak.qmd b/posts/zzz_DO_NOT_EDIT_introducing.../introducing_sdtm.oak.qmd index 80ff60a4..15c72a61 100644 --- a/posts/zzz_DO_NOT_EDIT_introducing.../introducing_sdtm.oak.qmd +++ b/posts/zzz_DO_NOT_EDIT_introducing.../introducing_sdtm.oak.qmd @@ -15,14 +15,16 @@ image: "logo.svg" ```{r setup, include=FALSE} +library(link) long_slug <- "zzz_DO_NOT_EDIT_introducing..." # renv::use(lockfile = "renv.lock") +link::auto(keep_pkg_prefix = FALSE) ``` {sdtm.oak} v0.1 is now available on [CRAN](https://cran.r-project.org/web/packages/sdtm.oak/index.html). -In this blog post, we will introduce the package, key concepts, and examples. {sdtm.oak} is developed in collaboration with volunteers from several companies, including Roche, Pfizer, GSK, Pattern Institute, Transition Technologies Science, and Atorus Research. {sdtm.oak} is also sponsored by CDISC COSA with a vision of being part of CDISC 360 to address end-to-end standards development and implementation. +In this blog post, we will introduce the package, key concepts, and examples. {sdtm.oak} is developed in collaboration with volunteers from several companies, including Roche, Pfizer, GSK, Pattern Institute, Transition Technologies Science, and Atorus Research. {sdtm.oak} is also sponsored by [CDISC COSA](https://www.cdisc.org/cosa) with a vision of being part of [CDISC 360](https://www.cdisc.org/cdisc-360) to address end-to-end standards development and implementation. # Filling the Gap @@ -46,12 +48,13 @@ We adopted the following innovative approach to make {sdtm.oak} adaptable to var # Algorithms -The SDTM mappings that transform the collected source data (eCRF: Electronic Case Report Form, eDT: External Data Transfer) into the target SDTM data model are grouped into algorithms. +The SDTM mappings that transform the collected source data (eDT: External Data Transfer) into the target SDTM data model are grouped into algorithms. These mapping algorithms form the backbone of {sdtm.oak}. Key Points: -- Algorithms can be re-used across multiple SDTM domains. -- Programming language agnostic: This concept does not rely on a specific programming language for implementation. +* Algorithms can be re-used across multiple SDTM domains. +* Programming language agnostic: This concept does not rely on a specific programming language for implementation. + The {sdtm.oak} package includes R functions to handle these algorithms. Some of the basic algorithms are below, also explaining how these algorithms can be used across multiple domains. @@ -131,7 +134,7 @@ knitr::kable(algorithms) ``` Here is an example of reusing an algorithm across multiple domains, -variables, and also to a non-standard +variables, and also to a non-standard mapping ![](reusable_algorithms.jpg){width="600"} @@ -200,21 +203,39 @@ The SDTM mappings can also be used together in a single step, such as applying a When there is a need to apply controlled terminology, the algorithms perform additional checks, such as verifying the presence of the value in the study's controlled terminology specification, which is passed as an argument to the function call. If the collected value is present, it applies the standard submission value. -While all these functionalities can be achieved with dplyr, {sdtm.oak} functions make it simpler to use, resulting in a modular way to build SDTM datasets. +While all these functionalities can be achieved with {dplyr}, the functions provided by {sdtm.oak} simplify the process and enhance efficiency. By leveraging metadata and controlled terminology, we further minimize errors and offer a modular approach to building SDTM datasets. # `oak_id_vars` The `oak_id_vars` is a crucial link between the raw datasets and the mapped SDTM domain. As the user derives each SDTM variable, it is merged with the corresponding topic variable using `oak_id_vars`. In {sdtm.oak}, the variables `oak_id`, `raw_source`, and `patient_number` are considered `oak_id_vars`. -These three variables must be added to all raw datasets. -Users can also extend this with any additional id vars. - -oak_id:- Type: numeric- Value: equal to the raw dataframe row number. +These three variables must be added to all raw datasets. Users can also extend this with any additional id vars.`oak_id_vars` can be added to the raw datasets using the function {sdtm.oak::generate_oak_id_vars()}. -raw_source:- Type: Character- Value: equal to the raw dataset (eCRF) name or eDT dataset name. -patient_number:- Type: numeric- Value: equal to the subject number in CRF or NonCRF data source. +```{r echo = FALSE, results = "asis"} +library(knitr) +oak_id_vars <- data.frame( + `Varialble_Name` = c( + "oak_id", + "raw_source", + "patient_number" + ), + `Type` = c( + "Numeric", + "Character", + "Numeric" + ), + `Description` = c( + paste( + "The row number of the raw dataframe" + ), + paste("The raw dataset (eCRF) name or eDT dataset name"), + paste("Subject number in eCRF or eDT data source") + ), stringsAsFactors = TRUE +) +knitr::kable(oak_id_vars) +``` # In this Release @@ -235,9 +256,9 @@ We are planning to develop the below features in the subsequent releases. # Get Involved Please try the package and provide us with your feedback, or get involved in the development of new features. We can be reached through any of the following means: -Slack: oakgarden.slack.com\ -GitHub: https://github.com/pharmaverse/sdtm.oak\ -CDISC Wiki: https://wiki.cdisc.org/display/oakgarden +Slack: [oakgarden.slack.com](oakgarden.slack.com)\ +GitHub: [https://github.com/pharmaverse/sdtm.oak](https://github.com/pharmaverse/sdtm.oak)\ +CDISC Wiki: [https://wiki.cdisc.org/display/oakgarden](https://wiki.cdisc.org/display/oakgarden) From f074f4589b70ab794eee91ad68f6816a32f72cf2 Mon Sep 17 00:00:00 2001 From: Rammprasad Ganapathy Date: Wed, 23 Oct 2024 20:48:28 +0000 Subject: [PATCH 11/15] pipeline failures --- inst/WORDLIST.txt | 1 + posts/zzz_DO_NOT_EDIT_introducing.../introducing_sdtm.oak.qmd | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/inst/WORDLIST.txt b/inst/WORDLIST.txt index b8c8203b..32901884 100644 --- a/inst/WORDLIST.txt +++ b/inst/WORDLIST.txt @@ -1206,4 +1206,5 @@ CMDOSU CMDOSE clst br +Varialble_Name diff --git a/posts/zzz_DO_NOT_EDIT_introducing.../introducing_sdtm.oak.qmd b/posts/zzz_DO_NOT_EDIT_introducing.../introducing_sdtm.oak.qmd index 15c72a61..5165c143 100644 --- a/posts/zzz_DO_NOT_EDIT_introducing.../introducing_sdtm.oak.qmd +++ b/posts/zzz_DO_NOT_EDIT_introducing.../introducing_sdtm.oak.qmd @@ -256,7 +256,7 @@ We are planning to develop the below features in the subsequent releases. # Get Involved Please try the package and provide us with your feedback, or get involved in the development of new features. We can be reached through any of the following means: -Slack: [oakgarden.slack.com](oakgarden.slack.com)\ +Slack: [https://oakgarden.slack.com](https://oakgarden.slack.com)\ GitHub: [https://github.com/pharmaverse/sdtm.oak](https://github.com/pharmaverse/sdtm.oak)\ CDISC Wiki: [https://wiki.cdisc.org/display/oakgarden](https://wiki.cdisc.org/display/oakgarden) From 4ada412e188eac901a172f876ca4a69573b567ea Mon Sep 17 00:00:00 2001 From: Rammprasad Ganapathy Date: Wed, 23 Oct 2024 20:51:05 +0000 Subject: [PATCH 12/15] fix pipeline --- inst/WORDLIST.txt | 2 +- posts/zzz_DO_NOT_EDIT_introducing.../introducing_sdtm.oak.qmd | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/inst/WORDLIST.txt b/inst/WORDLIST.txt index 32901884..e4a133bb 100644 --- a/inst/WORDLIST.txt +++ b/inst/WORDLIST.txt @@ -1206,5 +1206,5 @@ CMDOSU CMDOSE clst br -Varialble_Name +Varialble diff --git a/posts/zzz_DO_NOT_EDIT_introducing.../introducing_sdtm.oak.qmd b/posts/zzz_DO_NOT_EDIT_introducing.../introducing_sdtm.oak.qmd index 5165c143..3fcf39dd 100644 --- a/posts/zzz_DO_NOT_EDIT_introducing.../introducing_sdtm.oak.qmd +++ b/posts/zzz_DO_NOT_EDIT_introducing.../introducing_sdtm.oak.qmd @@ -216,7 +216,7 @@ These three variables must be added to all raw datasets. Users can also extend t ```{r echo = FALSE, results = "asis"} library(knitr) oak_id_vars <- data.frame( - `Varialble_Name` = c( + `Varialble` = c( "oak_id", "raw_source", "patient_number" From ac807f481f8b56bc126af80237eb87646aebb7da Mon Sep 17 00:00:00 2001 From: Edoardo Mancini Date: Thu, 24 Oct 2024 07:45:29 +0000 Subject: [PATCH 13/15] #163: added sdtm.oak to publish workflow to ensure the post will render --- .github/workflows/publish.yml | 1 + posts/zzz_DO_NOT_EDIT_introducing.../introducing_sdtm.oak.qmd | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index c2022b66..2a20386e 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -52,6 +52,7 @@ jobs: riskmetric tidyCDISC mirai + sdtm.oak - name: Install tinytex run: quarto install tool tinytex diff --git a/posts/zzz_DO_NOT_EDIT_introducing.../introducing_sdtm.oak.qmd b/posts/zzz_DO_NOT_EDIT_introducing.../introducing_sdtm.oak.qmd index 3fcf39dd..3ad15f45 100644 --- a/posts/zzz_DO_NOT_EDIT_introducing.../introducing_sdtm.oak.qmd +++ b/posts/zzz_DO_NOT_EDIT_introducing.../introducing_sdtm.oak.qmd @@ -193,7 +193,7 @@ As you can see in this function call, the raw dataset and variable names are pas {sdtm.oak} is designed to handle any type of raw input format. It is not tied to any specific data collection standards, making it both EDC-agnostic and data standards-agnostic. -# Why not use {dplyr}? +# Why not use dplyr? As you can see from the definition of the algorithms, all of them are a form of {dplyr::mutate()} statement. However, these functions provide a way to pass dataset and variable names as arguments and the ability to merge with the previous step by id variables. From d42ac6c1577ca08247b23a1c6c50f37c86911397 Mon Sep 17 00:00:00 2001 From: Edoardo Mancini Date: Thu, 24 Oct 2024 07:48:49 +0000 Subject: [PATCH 14/15] #163 updated logo image so it renders on the website --- .../introducing_sdtm.oak.qmd | 2 +- posts/zzz_DO_NOT_EDIT_introducing.../logo.svg | 11488 ---------------- .../sdtmoak.png | Bin 0 -> 34939 bytes 3 files changed, 1 insertion(+), 11489 deletions(-) delete mode 100644 posts/zzz_DO_NOT_EDIT_introducing.../logo.svg create mode 100644 posts/zzz_DO_NOT_EDIT_introducing.../sdtmoak.png diff --git a/posts/zzz_DO_NOT_EDIT_introducing.../introducing_sdtm.oak.qmd b/posts/zzz_DO_NOT_EDIT_introducing.../introducing_sdtm.oak.qmd index 3ad15f45..b2d7b060 100644 --- a/posts/zzz_DO_NOT_EDIT_introducing.../introducing_sdtm.oak.qmd +++ b/posts/zzz_DO_NOT_EDIT_introducing.../introducing_sdtm.oak.qmd @@ -9,7 +9,7 @@ date: "2024-10-19" # You can find the default categories in the repository README.md categories: [SDTM] # Feel free to change the image -image: "logo.svg" +image: "sdtmoak.png" --- diff --git a/posts/zzz_DO_NOT_EDIT_introducing.../logo.svg b/posts/zzz_DO_NOT_EDIT_introducing.../logo.svg deleted file mode 100644 index cf81b6f7..00000000 --- a/posts/zzz_DO_NOT_EDIT_introducing.../logo.svg +++ /dev/null @@ -1,11488 +0,0 @@ - - - - diff --git a/posts/zzz_DO_NOT_EDIT_introducing.../sdtmoak.png b/posts/zzz_DO_NOT_EDIT_introducing.../sdtmoak.png new file mode 100644 index 0000000000000000000000000000000000000000..fde50ffc8bf7e1aa85a5bb4ac75f24cdba3078d0 GIT binary patch literal 34939 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 Date: Thu, 24 Oct 2024 07:52:25 +0000 Subject: [PATCH 15/15] #163 spellcheck --- inst/WORDLIST.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/inst/WORDLIST.txt b/inst/WORDLIST.txt index e4a133bb..52ddf83b 100644 --- a/inst/WORDLIST.txt +++ b/inst/WORDLIST.txt @@ -1207,4 +1207,4 @@ CMDOSE clst br Varialble - +sdtmoak