From 0b064e4174868d33baec79fee0b9bc2abea5a3da Mon Sep 17 00:00:00 2001 From: Michael Stackhouse Date: Thu, 4 Jan 2024 07:39:24 -0500 Subject: [PATCH 1/2] Council End of Year Blog Post (#101) * Initial blog post * Corrections and add to wordlist * Fix link * Update posts/2023-12-21_end_of__year__up.../end_of__year__update_from_the__pharmaverse__council.qmd Co-authored-by: Ross Farrugia <82581364+rossfarrugia@users.noreply.github.com> * Update posts/2023-12-21_end_of__year__up.../end_of__year__update_from_the__pharmaverse__council.qmd Co-authored-by: Edoardo Mancini <53403957+manciniedoardo@users.noreply.github.com> * Add line on keynote. * Add panel session reference --------- Co-authored-by: Ross Farrugia <82581364+rossfarrugia@users.noreply.github.com> Co-authored-by: Edoardo Mancini <53403957+manciniedoardo@users.noreply.github.com> --- inst/WORDLIST.txt | 11 +++ .../2023-12-21_end_of__year__up.../appendix.R | 78 ++++++++++++++++++ ..._update_from_the__pharmaverse__council.qmd | 56 +++++++++++++ .../pharmaverse.png | Bin 0 -> 21533 bytes 4 files changed, 145 insertions(+) create mode 100644 posts/2023-12-21_end_of__year__up.../appendix.R create mode 100644 posts/2023-12-21_end_of__year__up.../end_of__year__update_from_the__pharmaverse__council.qmd create mode 100644 posts/2023-12-21_end_of__year__up.../pharmaverse.png diff --git a/inst/WORDLIST.txt b/inst/WORDLIST.txt index 0d0bf7ee..f30b21fc 100644 --- a/inst/WORDLIST.txt +++ b/inst/WORDLIST.txt @@ -500,3 +500,14 @@ VSDY VSORRES VSSEQ VSTESTCD +analytics +Analytics +csp +dS +eventID +frontend +nqJsLSLd +pageID +QHuA +thome +traceRedir diff --git a/posts/2023-12-21_end_of__year__up.../appendix.R b/posts/2023-12-21_end_of__year__up.../appendix.R new file mode 100644 index 00000000..ece5203f --- /dev/null +++ b/posts/2023-12-21_end_of__year__up.../appendix.R @@ -0,0 +1,78 @@ +# 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 code") { + path <- paste( + host, + repo_spec, + "tree", + branch, + collection, + name, + "code_sections.qmd", + 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 = "R environment") { + path <- paste( + host, + repo_spec, + "tree", + branch, + collection, + name, + "renv.lock", + sep = "/" + ) + return(markdown_link(text, path)) +} + + + +# top level function ------------------------------------------------------ + +insert_appendix <- function(repo_spec, name, collection = "posts") { + appendices <- paste( + markdown_appendix( + name = "Last updated", + content = insert_timestamp() + ), + " ", + markdown_appendix( + name = "Details", + content = paste( + insert_source(repo_spec, name, collection), + insert_lockfile(repo_spec, name, collection), + sep = ", " + ) + ), + sep = "\n" + ) + knitr::asis_output(appendices) +} diff --git a/posts/2023-12-21_end_of__year__up.../end_of__year__update_from_the__pharmaverse__council.qmd b/posts/2023-12-21_end_of__year__up.../end_of__year__update_from_the__pharmaverse__council.qmd new file mode 100644 index 00000000..4142904a --- /dev/null +++ b/posts/2023-12-21_end_of__year__up.../end_of__year__update_from_the__pharmaverse__council.qmd @@ -0,0 +1,56 @@ +--- +title: "End of Year Update from the Pharmaverse Council" +author: + - name: Mike Stackhouse +description: "" +date: "2023-12-21" +# please do not use any non-default categories. +# You can find the default categories in the repository README.md +categories: [community] +# feel free to change the image +image: "pharmaverse.png" + +--- + + + +```{r setup, include=FALSE} +long_slug <- "2023-12-21_end_of__year__up..." +# renv::use(lockfile = "renv.lock") +``` + + + +## 2023 Was a Big Year + +This was a big year for open-source work in clinical submissions in general. We saw Roche speak about shifting to an [open-source backbone for clinical trials](https://www.youtube.com/watch?v=nqJsLSLd39A). Novo Nordisk spoke publicly of an [R based submission to the FDA](https://www.youtube.com/watch?v=t33dS17QHuA). These are true marks of progress being made in R becoming a first class language for clinical reporting. + +Back in August, Nicholas Eugenio released a [blog post](https://pharmaverse.github.io/blog/posts/2023-10-10_pharmaverse_story/pharmaverse_story.html) on the history of pharmaverse. It's funny to think about the fact that only 3 years ago, the idea of cross organization collaboration on R packages and building a community around this in the clinical world was just a conversation between friends. Since then, we have a community of more than 1200 people on Slack, 350 on LinkedIn, interest from over 150 organizations, and over 30 packages. If 2020 through 2022 was the birth of Pharmaverse, 2023 was finding our identity as a community. For the council, 2024 will be about continuing to mature and find more ways that we can continue to support the community. + +## What We Accomplished + +One of our biggest moves in 2023 was to form our partnership with [PHUSE](https://phuse.global/PHUSE_Open_Source_Technology). This latched us into an existing community with shared values and a platform that helps us continue to build the pharmaverse community. At the [PHUSE EU Connect](https://www.phuse-events.org/attend/frontend/reg/thome.csp?pageID=11403&eventID=19&traceRedir=2) we had our first opportunity to host a pharmaverse meetup and bring together pharmaverse contributors in person. Additionally, there was an excellent panel session highlighting our use and adoption of open-source across industry, including the pharmaceutical, commercial, and software perspectives. As we move forward, we'll continue to use this platform to find ways we can host events and encourage collaboration within the pharmaverse community. + +This year our community was also able to launch new platforms to share updates and knowledge throughout the industry. The [pharmaverse examples](https://pharmaverse.github.io/examples/) webpage was launched to show pharmaverse packages in action, and the [pharmaverse blog](https://pharmaverse.github.io/blog/) (which I'm using right here!) provides a platform to share updates and community news. + +## Where Next? + +Back in October, I had the opportunity to do an interview with Michael Rimler for the [PHUSE video series](https://youtu.be/F3vehIoJgdA?si=80p0pKobZqjlXChj) Open Source Technologies in Clinical Data Analytics. The last question he asked me was what I expect the state of data analytics in life science to be in 2 to 3 years. My response was that when that time comes, I hope I couldn't have predicted where we would be - because back in 2020 I could never have predicted where we are now. The progress we've made is unbelievable, and the pharmaverse community has played a huge role in getting us where we are today. For the pharmaverse community, I hope to see that progress continue as we move into next year. As a council, our goal is to continue to mature this community. How can we support and foster collaboration between our organizations? How can we leverage this platform to drive the industry forward? + +For you as an individual, there's always an opportunity to get involved - and you don't have to be a package developer to contribute. You can [join a working group](https://pharmaverse.org/contribute/wg/), write [examples](https://github.com/pharmaverse/examples), or author a [blog post](https://github.com/pharmaverse/blog). Furthermore, you can get started with the pharmaverse packages, provide feedback via issues, and advocate for their use within your own organization. The pharmaverse community doesn't exist without you, and we're happy to have you all here to help us build this together. + +## P.S. + +At PHUSE US Connect 2024 this coming February, be on the lookout for one of the keynote presentations from Michael Rimler and Ross Farrugia! We hope to see you there! + +Here's to a 2024 full of progress and collaboration! + + + +```{r, echo=FALSE} +source("appendix.R") +insert_appendix( + repo_spec = "pharmaverse/blog", + name = long_slug +) +``` diff --git a/posts/2023-12-21_end_of__year__up.../pharmaverse.png b/posts/2023-12-21_end_of__year__up.../pharmaverse.png new file mode 100644 index 0000000000000000000000000000000000000000..0d7fc797c590be7d0c604d20dde5c0dcda36e1ae GIT binary patch literal 21533 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 veb`vt_ELiCK4l Date: Thu, 4 Jan 2024 09:03:41 -0500 Subject: [PATCH 2/2] fix: #102 deprecated arg in derive_param_computed (#103) * fix: #102 deprecated arg in derive_param_computed * chore: #102 spelling * chore: #102 links --- inst/WORDLIST.txt | 4 ++++ posts/2023-06-27__hackathon_app/index.qmd | 4 ++-- .../valuelevel/derive_param_computed.qmd | 6 +++--- .../blanks_and_nas.qmd | 4 ++-- .../code_sections.qmd | 6 +++--- posts/2023-08-08_study_day/study_day.qmd | 4 ++-- .../date_functions_and_imputation.qmd | 20 +++++++++---------- 7 files changed, 26 insertions(+), 22 deletions(-) diff --git a/inst/WORDLIST.txt b/inst/WORDLIST.txt index f30b21fc..3ff11afd 100644 --- a/inst/WORDLIST.txt +++ b/inst/WORDLIST.txt @@ -511,3 +511,7 @@ pageID QHuA thome traceRedir +pKobZqjlXChj +si +vehIoJgdA +youtu diff --git a/posts/2023-06-27__hackathon_app/index.qmd b/posts/2023-06-27__hackathon_app/index.qmd index 3d0b6964..610afa76 100644 --- a/posts/2023-06-27__hackathon_app/index.qmd +++ b/posts/2023-06-27__hackathon_app/index.qmd @@ -23,7 +23,7 @@ long_slug <- "2023-06-19_shiny_run_script" We recently created a shiny application for the [`admiral` hackathon](https://cosa.cdisc.org/events/Admiral) in February 2023. -The [`admiral` hackathon](https://cosa.cdisc.org/events/Admiral) was an event designed to make statistical programmers from the pharmaceutical industry more comfortable with the [`admiral`](https://pharmaverse.github.io/admiral/cran-release/) R package which allows users to efficiently transform data from one data standard (SDTM) to another (ADaM). +The [`admiral` hackathon](https://cosa.cdisc.org/events/Admiral) was an event designed to make statistical programmers from the pharmaceutical industry more comfortable with the [`admiral`](https://pharmaverse.github.io/admiral/) R package which allows users to efficiently transform data from one data standard (SDTM) to another (ADaM). Hackathon participants formed groups of up to five people and were then tasked to create R-scripts that map the SDTM data to ADaM according to specifics defined in the metadata. @@ -32,7 +32,7 @@ The purpose of the shiny app was threefold: 1. Allow participants to easily register as a team. -2. Let participants upload their R-scripts, so that the [`admiral` team](https://github.com/pharmaverse/admiral/graphs/contributors) can see how the [`admiral`](https://pharmaverse.github.io/admiral/cran-release/) package is being used -- and how the functions and the documentation could be improved. +2. Let participants upload their R-scripts, so that the [`admiral` team](https://github.com/pharmaverse/admiral/graphs/contributors) can see how the [`admiral`](https://pharmaverse.github.io/admiral/) package is being used -- and how the functions and the documentation could be improved. 3. Run participants R-scripts on the cloud and compare the produced file to a solution file. diff --git a/posts/2023-06-27_admiral/valuelevel/derive_param_computed.qmd b/posts/2023-06-27_admiral/valuelevel/derive_param_computed.qmd index aff4d30a..490b8ba4 100644 --- a/posts/2023-06-27_admiral/valuelevel/derive_param_computed.qmd +++ b/posts/2023-06-27_admiral/valuelevel/derive_param_computed.qmd @@ -29,7 +29,7 @@ options(width = narrow) When creating ADaM Basic Data Structure (BDS) datasets, we often encounter deriving a new parameter based on the analysis values (e.g., AVAL) of other parameters. -The [`admiral`](https://pharmaverse.github.io/admiral/cran-release/) function [`derive_param_computed()`](https://pharmaverse.github.io/admiral/cran-release/reference/derive_param_computed.html) adds a parameter computed from the analysis value of other parameters. +The [`admiral`](https://pharmaverse.github.io/admiral/) function [`derive_param_computed()`](https://pharmaverse.github.io/admiral/reference/derive_param_computed.html) adds a parameter computed from the analysis value of other parameters. It works like a calculator to derive new records without worrying about merging and combining datasets, all you need is a derivation formula, which also improves the readability of the code. @@ -69,10 +69,10 @@ adex_admiral <- derive_param_computed( adex, by_vars = exprs(USUBJID), parameters = c("TOTDOSE", "NUMCYC"), - analysis_value = AVAL.TOTDOSE / AVAL.NUMCYC, set_values_to = exprs( PARAMCD = "ADPCYMG", - PARAM = "Actual Dose per Cycle (mg)" + PARAM = "Actual Dose per Cycle (mg)", + AVAL = AVAL.TOTDOSE / AVAL.NUMCYC ) ) ``` diff --git a/posts/2023-07-10_blanks_and_nas/blanks_and_nas.qmd b/posts/2023-07-10_blanks_and_nas/blanks_and_nas.qmd index 999ca980..8a0d4ef9 100644 --- a/posts/2023-07-10_blanks_and_nas/blanks_and_nas.qmd +++ b/posts/2023-07-10_blanks_and_nas/blanks_and_nas.qmd @@ -28,7 +28,7 @@ to bring in your source data to construct your ADaMs or SDTMs. Unfortunately, while using [haven](https://haven.tidyverse.org/) the character blanks (missing data) found in a typical SAS-based dataset are left as blanks. These blanks will typically prove problematic while using functions like `is.na` in combination with `dplyr::filter()` to subset data. Check out [Bayer's SAS2R catalog: handling-of-missing-values](https://bayer-group.github.io/sas2r/r-and-sas-syntax.html#handling-of-missing-values) for more discussion on missing values and `NAs`. -In the [admiral](https://pharmaverse.github.io/admiral/cran-release/) package, we have built a simple function called `convert_blanks_to_na()` to help us quickly remedy this problem. You can supply an entire dataframe to this function and it will convert any character blanks to `NA_character_` +In the [admiral](https://pharmaverse.github.io/admiral/) package, we have built a simple function called `convert_blanks_to_na()` to help us quickly remedy this problem. You can supply an entire dataframe to this function and it will convert any character blanks to `NA_character_` ## Loading Packages and Making Dummy Data @@ -64,7 +64,7 @@ df_na %>% filter(is.na(RFICDTC)) ## That's it! -A simple call to this function can make your derivation life so much easier while working in R if working with SAS-based datasets. In [admiral](https://pharmaverse.github.io/admiral/cran-release/), we make use of this function at the start of all ADaM templates for common ADaM datasets. You can use the function `use_ad_template()` to get the full R script for the below ADaMs. +A simple call to this function can make your derivation life so much easier while working in R if working with SAS-based datasets. In [admiral](https://pharmaverse.github.io/admiral/), we make use of this function at the start of all ADaM templates for common ADaM datasets. You can use the function `use_ad_template()` to get the full R script for the below ADaMs. ```{r} list_all_templates() diff --git a/posts/2023-07-14_code_sections/code_sections.qmd b/posts/2023-07-14_code_sections/code_sections.qmd index 1abe7899..647f7c78 100644 --- a/posts/2023-07-14_code_sections/code_sections.qmd +++ b/posts/2023-07-14_code_sections/code_sections.qmd @@ -23,7 +23,7 @@ long_slug <- "2023-07-14_code_sections" ## Introduction -The [`admiral`](https://pharmaverse.github.io/admiral/cran-release/) package embraces a modular style of programming, where blocks of code are pieced together in sequence to create an ADaM dataset. However, with the well-documented advantages of the modular approach comes the recognition that scripts will on average be longer. As such, astute programmers working in RStudio are constantly on the lookout for quick ways to effectively navigate their scripts. Enter **code sections**! +The [`admiral`](https://pharmaverse.github.io/admiral/) package embraces a modular style of programming, where blocks of code are pieced together in sequence to create an ADaM dataset. However, with the well-documented advantages of the modular approach comes the recognition that scripts will on average be longer. As such, astute programmers working in RStudio are constantly on the lookout for quick ways to effectively navigate their scripts. Enter **code sections**! ## So, what are code sections and why are they useful? @@ -73,7 +73,7 @@ For a complete list of Code Sections shortcuts, and for further information, see # Code Sections on `admiral` -Within the [`admiral`](https://pharmaverse.github.io/admiral/cran-release/) package, heavy use of code sections is made in scripts such as our template ADaM programs. This ensures that they are more traversable and also encourages good commenting practices throughout the program. Here is an example using the ADAE template program: +Within the [`admiral`](https://pharmaverse.github.io/admiral/) package, heavy use of code sections is made in scripts such as our template ADaM programs. This ensures that they are more traversable and also encourages good commenting practices throughout the program. Here is an example using the ADAE template program: ```{r, eval = FALSE, message = FALSE} library(admiral) @@ -87,7 +87,7 @@ knitr::include_graphics("adae_code_sections.png") ``` ## Conclusion -Code sections are an easy way to navigate long scripts and foster good commenting practices. They are used extensively in the [`admiral`](https://pharmaverse.github.io/admiral/cran-release/) package, but there is no reason that you cannot start using them yourself in your day-to-day R programming! +Code sections are an easy way to navigate long scripts and foster good commenting practices. They are used extensively in the [`admiral`](https://pharmaverse.github.io/admiral/) package, but there is no reason that you cannot start using them yourself in your day-to-day R programming! diff --git a/posts/2023-08-08_study_day/study_day.qmd b/posts/2023-08-08_study_day/study_day.qmd index e3c4077d..384ba1fe 100644 --- a/posts/2023-08-08_study_day/study_day.qmd +++ b/posts/2023-08-08_study_day/study_day.qmd @@ -21,7 +21,7 @@ long_slug <- "2023-08-08_study_day" -Creating `--DY` variables for your ADaMs is super easy using [`derive_vars_dy()`](https://pharmaverse.github.io/admiral/v0.11.1/reference/derive_vars_dy.html) from the [admiral package](https://pharmaverse.github.io/admiral/cran-release/). +Creating `--DY` variables for your ADaMs is super easy using [`derive_vars_dy()`](https://pharmaverse.github.io/admiral/v0.11.1/reference/derive_vars_dy.html) from the [admiral package](https://pharmaverse.github.io/admiral/). Let's build some dummy data with 4 subjects, a start date/time for treatment (`TRTSDTM`), an analysis start date/time variable (`ASTDTM`) and an analysis end date variable (`AENDT`). @@ -73,7 +73,7 @@ derive_vars_dy( ``` -If you want to get `--DT` or `--DTM` variables using `admiral` then check out [`derive_vars_dt()`](https://pharmaverse.github.io/admiral/cran-release/reference/derive_vars_dt.html) and [`derive_vars_dtm()`](https://pharmaverse.github.io/admiral/cran-release/reference/derive_vars_dtm.html). If things are messy in your data, e.g. partial dates, both functions have great imputation abilities, which we will cover in an upcoming blog post! +If you want to get `--DT` or `--DTM` variables using `admiral` then check out [`derive_vars_dt()`](https://pharmaverse.github.io/admiral/reference/derive_vars_dt.html) and [`derive_vars_dtm()`](https://pharmaverse.github.io/admiral/reference/derive_vars_dtm.html). If things are messy in your data, e.g. partial dates, both functions have great imputation abilities, which we will cover in an upcoming blog post! diff --git a/posts/2023-09-26_date_functions_and_imputation/date_functions_and_imputation.qmd b/posts/2023-09-26_date_functions_and_imputation/date_functions_and_imputation.qmd index 017dba0e..650984b1 100644 --- a/posts/2023-09-26_date_functions_and_imputation/date_functions_and_imputation.qmd +++ b/posts/2023-09-26_date_functions_and_imputation/date_functions_and_imputation.qmd @@ -36,19 +36,19 @@ In this article, we first examine the arsenal of functions provided by`{admiral} `{admiral}` provides the following functions for date/datetime imputation: - Derivations for adding variables - - [derive_vars_dt()](https://pharmaverse.github.io/admiral/cran-release/reference/derive_vars_dt.html): Adds a date variable and a date imputation flag variable (optional) based on a --DTC variable and imputation rules. - - [derive_vars_dtm()](https://pharmaverse.github.io/admiral/cran-release/reference/derive_vars_dtm.html): Adds a datetime variable, a date imputation flag variable, and a time imputation flag variable (both optional) based on a --DTC variable and imputation rules. + - [derive_vars_dt()](https://pharmaverse.github.io/admiral/reference/derive_vars_dt.html): Adds a date variable and a date imputation flag variable (optional) based on a --DTC variable and imputation rules. + - [derive_vars_dtm()](https://pharmaverse.github.io/admiral/reference/derive_vars_dtm.html): Adds a datetime variable, a date imputation flag variable, and a time imputation flag variable (both optional) based on a --DTC variable and imputation rules. - Computation functions - - [impute_dtc_dtm()](https://pharmaverse.github.io/admiral/cran-release/reference/impute_dtc_dtm.html): Returns a complete ISO 8601 datetime or `NA` based on a partial ISO 8601 datetime and imputation rules. - - [impute_dtc_dt()](https://pharmaverse.github.io/admiral/cran-release/reference/impute_dtc_dt.html): Returns a complete ISO 8601 date (without time) or `NA` based on a partial ISO 8601 date(time) and imputation rules. - - [convert_dtc_to_dt()](https://pharmaverse.github.io/admiral/cran-release/reference/convert_dtc_to_dt.html): Returns a date if the input ISO 8601 date is complete. Otherwise, `NA` is returned. - - [convert_dtc_to_dtm()](https://pharmaverse.github.io/admiral/cran-release/reference/convert_dtc_to_dtm.html): Returns a datetime if the input ISO 8601 date is complete (with missing time replaced by `"00:00:00"` as default). Otherwise, NA is returned. - - [compute_dtf()](https://pharmaverse.github.io/admiral/cran-release/reference/compute_dtf.html): Returns the date imputation flag. - - [compute_tmf()](https://pharmaverse.github.io/admiral/cran-release/reference/compute_tmf.html): Returns the time imputation flag. + - [impute_dtc_dtm()](https://pharmaverse.github.io/admiral/reference/impute_dtc_dtm.html): Returns a complete ISO 8601 datetime or `NA` based on a partial ISO 8601 datetime and imputation rules. + - [impute_dtc_dt()](https://pharmaverse.github.io/admiral/reference/impute_dtc_dt.html): Returns a complete ISO 8601 date (without time) or `NA` based on a partial ISO 8601 date(time) and imputation rules. + - [convert_dtc_to_dt()](https://pharmaverse.github.io/admiral/reference/convert_dtc_to_dt.html): Returns a date if the input ISO 8601 date is complete. Otherwise, `NA` is returned. + - [convert_dtc_to_dtm()](https://pharmaverse.github.io/admiral/reference/convert_dtc_to_dtm.html): Returns a datetime if the input ISO 8601 date is complete (with missing time replaced by `"00:00:00"` as default). Otherwise, NA is returned. + - [compute_dtf()](https://pharmaverse.github.io/admiral/reference/compute_dtf.html): Returns the date imputation flag. + - [compute_tmf()](https://pharmaverse.github.io/admiral/reference/compute_tmf.html): Returns the time imputation flag. From the point of view of a typical ADaM programmer, the functions `impute_*`, `convert_*` and `compute_*` above can be viewed as utilities for treating dates and/or imputation within any custom code. In contrast, their `derive_*` find their use in directly deriving new timing variables and/or carrying out imputation at an ADaM dataset scale. -For a detailed look at the Imputation rules applied by these `{admiral}` functions, please visit [this vignette](https://pharmaverse.github.io/admiral/cran-release/articles/imputation.html#imputation-rules) on the documentation website. +For a detailed look at the Imputation rules applied by these `{admiral}` functions, please visit [this vignette](https://pharmaverse.github.io/admiral/articles/imputation.html#imputation-rules) on the documentation website. # Simple Examples with Vectors @@ -313,7 +313,7 @@ dataset_vignette(vs) Deriving timing variables and carrying out imputations is tricky at the best of times, but hopefully this blog post can shed some light on how make this all easier using the `{admiral}` package! As `{admiral}` developers we are always interested in knowing how users are employing the package for their ADaM needs, so if you have any comments or feedback related to this topic, don't be afraid to leave a comment on our [Slack channel](https://app.slack.com/client/T028PB489D3/C02M8KN8269) or on the [Github repository](https://github.com/pharmaverse/admiral/), either as an issue or as a discussion. -For an even more detailed treatment of this topic, users are once again invited to read the corresponding [vignette](https://pharmaverse.github.io/admiral/cran-release/articles/imputation.html) on the documentation website, from which this article was adapted. +For an even more detailed treatment of this topic, users are once again invited to read the corresponding [vignette](https://pharmaverse.github.io/admiral/articles/imputation.html) on the documentation website, from which this article was adapted.