diff --git a/.nojekyll b/.nojekyll index 601166ae..82f5b772 100644 --- a/.nojekyll +++ b/.nojekyll @@ -1 +1 @@ -fdd0a3de \ No newline at end of file +dde62fe1 \ No newline at end of file diff --git a/R/readme.html b/R/readme.html index 5a6a0569..a44fd047 100644 --- a/R/readme.html +++ b/R/readme.html @@ -35,10 +35,12 @@ - + + - + + - + + - + + +
+

As you can see, the data-frame contains the column GRADE_CRITERIA_CODE which contains comparisons of floating point values. And there was a discrepancy of what Gordon expected to see, and how R actually computed the comparison initially:

@@ -2119,8 +2907,8 @@ background-color: null; font-style: inherit;">TRUE)
-
- +
+
@@ -2192,7 +2980,7 @@ font-style: inherit;">1

Last updated

-

2024-01-04 14:30:59.620697

+

2024-01-05 13:10:44.484925

Details

source code, R environment

@@ -2511,7 +3299,7 @@ font-style: inherit;">"rhinosubmission.txt")

Last updated

-

2024-01-04 14:30:51.022125

+

2024-01-05 13:10:36.317363

Details

source code, R environment

@@ -3680,7 +4468,7 @@ Mancini, Edoardo. 2023. “Date/Time Functions and Imputation in

Last updated

-

2024-01-04 14:30:36.32313

+

2024-01-05 13:10:22.165884

Details

source code, R environment

@@ -4128,7 +4916,7 @@ font-style: inherit;">round(b)

Last updated

-

2024-01-04 14:30:43.48572

+

2024-01-05 13:10:29.020999

Details

source code, R environment

@@ -4317,7 +5105,7 @@ font-style: inherit;">DEMOEDY = AENDT)

Last updated

-

2024-01-04 14:31:03.737172

+

2024-01-05 13:10:48.142948

Details

source code, R environment

@@ -4574,7 +5362,7 @@ font-style: inherit;">"ADAE")

Last updated

-

2024-01-04 14:30:52.79134

+

2024-01-05 13:10:38.02142

Details

source code, R environment

@@ -4757,7 +5545,7 @@ font-style: inherit;">list_all_templates()

Last updated

-

2024-01-04 14:30:40.456831

+

2024-01-05 13:10:26.059533

Details

source code, R environment

@@ -4817,7 +5605,7 @@ Straub, Ben. 2023. “Blanks and NAs.” July 10, 2023.

Last updated

-

2024-01-04 14:30:41.815841

+

2024-01-05 13:10:27.429802

Details

source code, R environment

@@ -4907,7 +5695,7 @@ Shen, Vincent. 2023. “Falcon.” July 9, 2023.

Last updated

-

2024-01-04 14:31:05.11643

+

2024-01-05 13:10:49.483322

Details

source code, R environment

@@ -5789,7 +6577,7 @@ font-style: inherit;">2))

Last updated

-

2024-01-04 14:30:38.178846

+

2024-01-05 13:10:23.927892

Details

source code, R environment

@@ -5885,7 +6673,7 @@ Thoma, Stefan. 2023. “Hackathon Feedback Application.” June

Last updated

-

2024-01-04 14:30:46.916435

+

2024-01-05 13:10:32.369975

Details

source code, R environment

@@ -6103,7 +6891,7 @@ font-style: inherit;">"PARAMCD"))

Last updated

-

2024-01-04 14:31:06.995587

+

2024-01-05 13:10:51.281009

Details

source code, R environment

diff --git a/listings.json b/listings.json index 21b5d2ae..08a4129c 100644 --- a/listings.json +++ b/listings.json @@ -3,7 +3,7 @@ "listing": "/index.html", "items": [ "/posts/2024-01-04_end_of__year__up.../end_of__year__update_from_the__pharmaverse__council.html", - "/posts/2023-12-21_end_of__year__up.../end_of__year__update_from_the__pharmaverse__council.html", + "/posts/2023-12-18_admiral_1_0/admiral_1_0.html", "/posts/2023-11-27_higher_order/higher_order.html", "/posts/2023-10-30_floating_point/floating_point.html", "/posts/2023-08-14_rhino_submission_2/rhino_submission_2.html", diff --git a/posts/2023-06-27__hackathon_app/index.html b/posts/2023-06-27__hackathon_app/index.html index d71630c1..00f89b26 100644 --- a/posts/2023-06-27__hackathon_app/index.html +++ b/posts/2023-06-27__hackathon_app/index.html @@ -72,10 +72,12 @@ - + + - + + - + + - + + - + + - + + - + + - + + - + + - + + - + + - + + - + + - + + - + + - + + - + + - + + - + + - + + - + + - + + - + + - + + - + + - + + - + + - + + +
+

As you can see, the data-frame contains the column GRADE_CRITERIA_CODE which contains comparisons of floating point values. And there was a discrepancy of what Gordon expected to see, and how R actually computed the comparison initially:

@@ -563,8 +566,8 @@

Potential solutions reactable(defaultPageSize = 4, highlight = TRUE, bordered = TRUE, striped = TRUE, resizable = TRUE)

-
- +
+
@@ -606,7 +609,7 @@

Conclusion

Last updated

-

2024-01-04 14:30:59.620697

+

2024-01-05 13:10:44.484925

Details

source code, R environment

@@ -640,6 +643,121 @@

Conclusion

} } toggleBodyColorPrimary(); + const disableStylesheet = (stylesheets) => { + for (let i=0; i < stylesheets.length; i++) { + const stylesheet = stylesheets[i]; + stylesheet.rel = 'prefetch'; + } + } + const enableStylesheet = (stylesheets) => { + for (let i=0; i < stylesheets.length; i++) { + const stylesheet = stylesheets[i]; + stylesheet.rel = 'stylesheet'; + } + } + const manageTransitions = (selector, allowTransitions) => { + const els = window.document.querySelectorAll(selector); + for (let i=0; i < els.length; i++) { + const el = els[i]; + if (allowTransitions) { + el.classList.remove('notransition'); + } else { + el.classList.add('notransition'); + } + } + } + const toggleColorMode = (alternate) => { + // Switch the stylesheets + const alternateStylesheets = window.document.querySelectorAll('link.quarto-color-scheme.quarto-color-alternate'); + manageTransitions('#quarto-margin-sidebar .nav-link', false); + if (alternate) { + enableStylesheet(alternateStylesheets); + for (const sheetNode of alternateStylesheets) { + if (sheetNode.id === "quarto-bootstrap") { + toggleBodyColorMode(sheetNode); + } + } + } else { + disableStylesheet(alternateStylesheets); + toggleBodyColorPrimary(); + } + manageTransitions('#quarto-margin-sidebar .nav-link', true); + // Switch the toggles + const toggles = window.document.querySelectorAll('.quarto-color-scheme-toggle'); + for (let i=0; i < toggles.length; i++) { + const toggle = toggles[i]; + if (toggle) { + if (alternate) { + toggle.classList.add("alternate"); + } else { + toggle.classList.remove("alternate"); + } + } + } + // Hack to workaround the fact that safari doesn't + // properly recolor the scrollbar when toggling (#1455) + if (navigator.userAgent.indexOf('Safari') > 0 && navigator.userAgent.indexOf('Chrome') == -1) { + manageTransitions("body", false); + window.scrollTo(0, 1); + setTimeout(() => { + window.scrollTo(0, 0); + manageTransitions("body", true); + }, 40); + } + } + const isFileUrl = () => { + return window.location.protocol === 'file:'; + } + const hasAlternateSentinel = () => { + let styleSentinel = getColorSchemeSentinel(); + if (styleSentinel !== null) { + return styleSentinel === "alternate"; + } else { + return false; + } + } + const setStyleSentinel = (alternate) => { + const value = alternate ? "alternate" : "default"; + if (!isFileUrl()) { + window.localStorage.setItem("quarto-color-scheme", value); + } else { + localAlternateSentinel = value; + } + } + const getColorSchemeSentinel = () => { + if (!isFileUrl()) { + const storageValue = window.localStorage.getItem("quarto-color-scheme"); + return storageValue != null ? storageValue : localAlternateSentinel; + } else { + return localAlternateSentinel; + } + } + let localAlternateSentinel = 'default'; + // Dark / light mode switch + window.quartoToggleColorScheme = () => { + // Read the current dark / light value + let toAlternate = !hasAlternateSentinel(); + toggleColorMode(toAlternate); + setStyleSentinel(toAlternate); + }; + // Ensure there is a toggle, if there isn't float one in the top right + if (window.document.querySelector('.quarto-color-scheme-toggle') === null) { + const a = window.document.createElement('a'); + a.classList.add('top-right'); + a.classList.add('quarto-color-scheme-toggle'); + a.href = ""; + a.onclick = function() { try { window.quartoToggleColorScheme(); } catch {} return false; }; + const i = window.document.createElement("i"); + i.classList.add('bi'); + a.appendChild(i); + window.document.body.appendChild(a); + } + // Switch to dark mode if need be + if (hasAlternateSentinel()) { + toggleColorMode(true); + } else { + toggleColorMode(false); + } const icon = ""; const anchorJS = new window.AnchorJS(); anchorJS.options = { diff --git a/posts/2023-11-27_higher_order/higher_order.html b/posts/2023-11-27_higher_order/higher_order.html index a1bd1d6c..a765ae56 100644 --- a/posts/2023-11-27_higher_order/higher_order.html +++ b/posts/2023-11-27_higher_order/higher_order.html @@ -72,10 +72,12 @@ - + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ +
+
+
+

admiral 1.0.0

+
+
+ 1.0.0 brings a commitment to stability, new features, a few bug fixes, argument alignment and onboarding resources! +
+
+
+
admiral
+
ADaMs
+
+
+
+ + +
+ +
+
Author
+
+

Ben Straub

+
+
+ +
+
Published
+
+

January 4, 2024

+
+
+ + +
+ + +
+ + +
+ + + +
+ + + + + + +

admiral 1.0.0 is out on CRAN. This release brings several new features to your tool set for working with ADaMs in R. admiral 1.0.0 also brings needed stability to users who were wishing to adopt admiral, but were a little worried by the fast deprecation and experimentation for pre-v1.0.0 releases.

+

This blog post will discuss our commitment to stability, walk you through the new features available, discuss some of the bug fixes, a push for common APIs across our functions, and showcase the resources available to help you on-board to admiral.

+
+

Commitment to Stability

+

{admiral} was born out of a conversation between Thomas Neitmann and Michael Rimler almost three years ago. Check out this history blog post for some of additional context on its development. Over the last three years, we have worked at a furious pace to produce functions that can do almost all derivations needed for common ADaMs. However, we have noticed that some functions are very similar to others and with some minor tweaks could be made redundant in favor of other functions. This has lead to some deprecation of either whole functions or arguments as we have sought to consolidate. Unfortunately, this creates a lot of frustration for users.

+

Enter Superseded!!

+

Now with the release of 1.0.0 we are going to supersede functions going forward. This is the process where when we introduce new functions to replace other functions, we will no longer fast-deprecate the replaced functions. Now we will supersede them, i.e. we will keep the function in the codebase for a long time, but recommend the use of the new function. If the function were to be removed from the codebase this will be done many years from the time it is superseded. Please note that although superseded functions are not in scope for active development, any bugs identified within them will nevertheless be fixed.

+
+
+

New Features

+

We have 3 new functions available in this release:

+ +

and a new option in derive_var_atoxgr_dir() and derive_var_anrind() to handle floating point issues.

+
+

derive_vars_extreme_event()

+

This function takes available records from user-defined events by selecting the extreme observations and appending them as a variable(s) to your dataset. derive_vars_extreme_event() works similar to derive_extreme_event(), but instead of adding observations the function will add variable(s).

+

Let’s take a peek with a very simple example where we just use ADSL! The documentation for derive_vars_extreme_event() has a much richer example with events from other domains that is more aligned to where you would use this function.

+

Let us make some dummy ADSL data and load up our packages. The goal here is to add two new variables LSTALVDT and DTHFL based on a list of objects that are used to specify the following:

+
    +
  • the dataset to look at
  • +
  • a set of conditions
  • +
  • what to set the values for the new variables
  • +
+
+
library(tibble)
+library(admiral)
+library(lubridate)
+
+adsl <- tribble(
+  ~STUDYID, ~USUBJID, ~TRTEDT, ~DTHDT,
+  "PILOT01", "01-1130", ymd("2014-08-16"), ymd("2014-09-13"),
+  "PILOT01", "01-1133", ymd("2013-04-28"), ymd(""),
+  "PILOT01", "01-1211", ymd("2013-01-12"), ymd(""),
+  "PILOT01", "09-1081", ymd("2014-04-27"), ymd(""),
+  "PILOT01", "09-1088", ymd("2014-10-09"), ymd("2014-11-01"),
+)
+
+

In this example, we only use ADSL as the source dataset, so it is a bit contrived, but much more compact for us. Note the use of the events that is taking in our list of event objects and the different conditions and values we set to create our LSTALVDT and DTHFL variables.

+
+
derive_vars_extreme_event(
+  adsl,
+  by_vars = exprs(STUDYID, USUBJID),
+  events = list(
+    event(
+      dataset_name = "adsl",
+      condition = !is.na(DTHDT),
+      set_values_to = exprs(LSTALVDT = DTHDT, DTHFL = "Y")
+    ),
+    event(
+      dataset_name = "adsl",
+      condition = !is.na(TRTEDT),
+      set_values_to = exprs(LSTALVDT = TRTEDT, DTHFL = "N")
+    )
+  ),
+  source_datasets = list(adsl = adsl),
+  order = exprs(LSTALVDT),
+  mode = "last",
+  new_vars = exprs(LSTALVDT = LSTALVDT, DTHFL = DTHFL)
+)
+
+
# A tibble: 5 × 6
+  STUDYID USUBJID TRTEDT     DTHDT      LSTALVDT   DTHFL
+  <chr>   <chr>   <date>     <date>     <date>     <chr>
+1 PILOT01 01-1130 2014-08-16 2014-09-13 2014-09-13 Y    
+2 PILOT01 01-1133 2013-04-28 NA         2013-04-28 N    
+3 PILOT01 01-1211 2013-01-12 NA         2013-01-12 N    
+4 PILOT01 09-1081 2014-04-27 NA         2014-04-27 N    
+5 PILOT01 09-1088 2014-10-09 2014-11-01 2014-11-01 Y    
+
+
+

Okay! We used a very small example to showcase how to find extreme observations and appending this information as new variables to our ADSL dataset. Highly recommend checking out the more detailed example in the function documentation to see its true power!

+
+
+

derive_var_merged_ef_msrc()

+

This function has some similarity to derive_vars_extreme_event(), but now we are only looking at adding a single flag variable based on checking conditions across multiple datasets.

+

We develop some simple dummy data for ADSL, CM and PR. Our goal is to flag patients who have CMCAT = "ANTI-CANCER" in the CM dataset or have records in the PR dataset. Any participants who meet these conditions will have our new variable CANCTRFL set as "Y".

+
+
adsl <- tribble(
+  ~USUBJID,
+  "1",
+  "2",
+  "3",
+  "4",
+)
+
+cm <- tribble(
+  ~USUBJID, ~CMCAT,        ~CMSEQ,
+  "1",      "ANTI-CANCER",      1,
+  "1",      "GENERAL",          2,
+  "2",      "GENERAL",          1,
+  "3",      "ANTI-CANCER",      1
+)
+
+pr <- tribble(
+  ~USUBJID, ~PRSEQ,
+  "2",      1,
+  "3",      1
+)
+
+

Now we have the argument flag_events that takes a list of objects where we define the conditions and datasets to check in.

+
+
derive_var_merged_ef_msrc(
+  adsl,
+  flag_events = list(
+    flag_event(
+      dataset_name = "cm",
+      condition = CMCAT == "ANTI-CANCER"
+    ),
+    flag_event(
+      dataset_name = "pr"
+    )
+  ),
+  source_datasets = list(cm = cm, pr = pr),
+  by_vars = exprs(USUBJID),
+  new_var = CANCTRFL
+)
+
+
# A tibble: 4 × 2
+  USUBJID CANCTRFL
+  <chr>   <chr>   
+1 1       Y       
+2 2       Y       
+3 3       Y       
+4 4       <NA>    
+
+
+

Let’s go! We searched over multiple datasets, CM and PR, with multiple conditions and appended a new variable CANCTRFL to ADSL setting to "Y" if those conditions were met.

+
+
+

derive_vars_computed()

+

This function is very similar to derive_param_computed(), but instead of adding observations we are going to add variable(s). Very handy when wanting to add some additional variables to ADSL, e.g. baseline variables.

+

Let’s make some dummy data for an ADSL and ADVS. Our goal is to derive a BMIBL variable pulled from ADVS and append to ADSL.

+
+
adsl <- tribble(
+  ~STUDYID,   ~USUBJID, ~AGE,   ~AGEU,
+  "PILOT01", "01-1302",   61, "YEARS",
+  "PILOT01", "17-1344",   64, "YEARS"
+)
+
+advs <- tribble(
+  ~STUDYID, ~USUBJID, ~PARAMCD, ~PARAM, ~VISIT, ~AVAL, ~AVALU, ~ABLFL,
+  "PILOT01", "01-1302", "HEIGHT", "Height (cm)", "SCREENING", 177.8, "cm", "Y",
+  "PILOT01", "01-1302", "WEIGHT", "Weight (kg)", "SCREENING", 81.19, "kg", "N",
+  "PILOT01", "01-1302", "WEIGHT", "Weight (kg)", "BASELINE", 82.1, "kg", "Y",
+  "PILOT01", "01-1302", "WEIGHT", "Weight (kg)", "WEEK 2", 81.19, "kg", "N",
+  "PILOT01", "01-1302", "WEIGHT", "Weight (kg)", "WEEK 4", 82.56, "kg", "N",
+  "PILOT01", "01-1302", "WEIGHT", "Weight (kg)", "WEEK 6", 80.74, "kg", "N",
+  "PILOT01", "17-1344", "HEIGHT", "Height (cm)", "SCREENING", 163.5, "cm", "Y",
+  "PILOT01", "17-1344", "WEIGHT", "Weight (kg)", "SCREENING", 58.06, "kg", "N",
+  "PILOT01", "17-1344", "WEIGHT", "Weight (kg)", "BASELINE", 58.06, "kg", "Y",
+  "PILOT01", "17-1344", "WEIGHT", "Weight (kg)", "WEEK 2", 58.97, "kg", "N",
+  "PILOT01", "17-1344", "WEIGHT", "Weight (kg)", "WEEK 4", 57.97, "kg", "N",
+  "PILOT01", "17-1344", "WEIGHT", "Weight (kg)", "WEEK 6", 58.97, "kg", "N"
+)
+
+

Take a look at how we use new_vars and filter_add. We use a function inside of new_vars to help us calculate the BMI while using the filter_add argument to only look at baseline records for the calculation.

+
+
derive_vars_computed(
+  dataset = adsl,
+  dataset_add = advs,
+  by_vars = exprs(STUDYID, USUBJID),
+  parameters = c("WEIGHT"),
+  constant_by_vars = exprs(STUDYID, USUBJID),
+  constant_parameters = c("HEIGHT"),
+  new_vars = exprs(BMIBL = compute_bmi(height = AVAL.HEIGHT, weight = AVAL.WEIGHT)),
+  filter_add = ABLFL == "Y"
+)
+
+
# A tibble: 2 × 5
+  STUDYID USUBJID   AGE AGEU  BMIBL
+  <chr>   <chr>   <dbl> <chr> <dbl>
+1 PILOT01 01-1302    61 YEARS  26.0
+2 PILOT01 17-1344    64 YEARS  21.7
+
+
+

Alright! Simple enough. We just took records from ADVSto help us calculate the BMI at baseline using this function and appended our new variable to ADSL.

+
+
+
+

Argument Alignment and Bug Fixes

+
+

Argument Alignment

+

A huge push was made for 1.0.0 to help align our arguments across all of {admiral} functions. What does this mean? We identified arguments in functions where the argument did the same things but was slightly named differently. For 1.0.0, we really want users to have a solid API for {admiral} functions.

+

Let’s take a peak at the function consolidate_metadata() to even better understand our goal here.

+
consolidate_metadata(
+  datasets,
+  key_vars,
+  source_var = SOURCE,
+  check_vars = "warning",
+  check_keys,
+  check_type = "error"
+)
+

In previous versions of {admiral} the consolidate_metadata() function had the argument check_keys, which helps to check uniqueness. Other functions had a similar argument, but were called check_unique. Therefore, to better align our common API for {admiral} functions we decided to rename the check_keys argument to check_unique. You can follow the discussion around this renaming effort in this GitHub Issue.

+
+
+
+
+

+
+
+
+
+

The argument has a deprecated tag in the function documentation and will issue a warning to users. There was quite a bit of renaming of arguments for 1.0.0 so there are quite a few of these tags in our documentation. In subsequent releases, these arguments will be removed. Please see the changelog if you would like to explore other functions that had arguments renamed. The issues are linked to each rename so you can follow along with the discussions!

+
+
+

Bug Fixes

+

We love fixing bugs and take them incredibly seriously - especially when identified by members from the community.

+

If you find a pesky bug, please fill out a Bug Report on our Issues Tab.

+

Each bug fixed by our development team is documented in our changelog with the Issue linked.

+
+
+
+
+

+
+
+
+
+

For example, if you click through the issue for derive_extreme_event() that identified a problem where the condition was ignored if the mode argument was used, you can see the Bug Report along with a reproducible example. You can also see the Pull Request for the exact code changes that are addressing this bug linked in the Issue! Way cool!

+
+
+
+

New On-boarding Resources

+

{admiral} has a lot of functions for working with ADaMs. This can be overwhelming for new users and we really sympathize. To help new users onboarding to {admiral} we have developed the following resources:

+
+

admiraldiscovery

+

This is a dedicated website that lists out in a tabular format standard ADaM datasets and their common variables with corresponding {admiral} functions that could be used to create the variables. Very handy when you just want to get some starter code on deriving EOSDT or TRTSDT!

+
+
+
+
+

+
+
+
+
+
+
+

admiral Cheat Sheet

+

Inspired by other R package cheat sheets! We try and surface commonly needed functions for doing ADaM derivations with simple tables to show how the data is transforming.

+
+
+
+
+

+
+
+
+
+
+
+

Way Back Machine

+

Studies can last a long time. Adopting R as your primary analysis language for your study can introduce certain risks around package dependencies. Fixing those dependencies to certain package versions can help mitigate those risks. Unfortunately, as package websites are updated those helpful documents, examples and vignettes can be lost as the version changes. Do not lose heart {admiral} users. If you decided to fix to a certain version of {admiral}, we have you covered with our Way Back Machine that allows you to change the website documentation back to the version you are using.

+
+
+
+
+

+
+
+
+
+ +
+
+
+ + +
+
+ + +
+ +

Last updated

+ +

2024-01-05 13:10:53.498743

+

Details

Reuse

Citation

BibTeX citation:
@online{straub2024,
+  author = {Straub, Ben},
+  title = {Admiral 1.0.0},
+  date = {2024-01-04},
+  url = {https://pharmaverse.github.io/blog/posts/2023-12-18_admiral_1_0/admiral_1_0.html},
+  langid = {en}
+}
+
For attribution, please cite this work as:
+Straub, Ben. 2024. “Admiral 1.0.0.” January 4, 2024. https://pharmaverse.github.io/blog/posts/2023-12-18_admiral_1_0/admiral_1_0.html. +
+ +
+ + + + \ No newline at end of file diff --git a/posts/2023-12-18_admiral_1_0/admiraldisc.png b/posts/2023-12-18_admiral_1_0/admiraldisc.png new file mode 100644 index 00000000..17388602 Binary files /dev/null and b/posts/2023-12-18_admiral_1_0/admiraldisc.png differ diff --git a/posts/2023-12-18_admiral_1_0/cheatsheet.png b/posts/2023-12-18_admiral_1_0/cheatsheet.png new file mode 100644 index 00000000..bdde2ba3 Binary files /dev/null and b/posts/2023-12-18_admiral_1_0/cheatsheet.png differ diff --git a/posts/2023-12-18_admiral_1_0/check.png b/posts/2023-12-18_admiral_1_0/check.png new file mode 100644 index 00000000..6b17f7fa Binary files /dev/null and b/posts/2023-12-18_admiral_1_0/check.png differ diff --git a/posts/2023-12-18_admiral_1_0/issue_tag.png b/posts/2023-12-18_admiral_1_0/issue_tag.png new file mode 100644 index 00000000..c529e81e Binary files /dev/null and b/posts/2023-12-18_admiral_1_0/issue_tag.png differ diff --git a/posts/2023-12-18_admiral_1_0/new_features.jpg b/posts/2023-12-18_admiral_1_0/new_features.jpg new file mode 100644 index 00000000..b0a67b14 Binary files /dev/null and b/posts/2023-12-18_admiral_1_0/new_features.jpg differ diff --git a/posts/2023-12-18_admiral_1_0/wayback.png b/posts/2023-12-18_admiral_1_0/wayback.png new file mode 100644 index 00000000..56dcd308 Binary files /dev/null and b/posts/2023-12-18_admiral_1_0/wayback.png differ diff --git a/posts/2023-12-21_end_of__year__up.../end_of__year__update_from_the__pharmaverse__council.html b/posts/2023-12-21_end_of__year__up.../end_of__year__update_from_the__pharmaverse__council.html deleted file mode 100644 index 379166a3..00000000 --- a/posts/2023-12-21_end_of__year__up.../end_of__year__update_from_the__pharmaverse__council.html +++ /dev/null @@ -1,452 +0,0 @@ - - - - - - - - - - - -Pharmaverse Blog - End of Year Update from the Pharmaverse Council - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- -
- -
-
-
-

End of Year Update from the Pharmaverse Council

-
-
community
-
-
-
- - -
- -
-
Author
-
-

Mike Stackhouse

-
-
- -
-
Published
-
-

December 21, 2023

-
-
- - -
- - -
- - -
- - - -
- - - - - - -
-

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. Novo Nordisk spoke publicly of an R based submission to the FDA. 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 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. 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 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 webpage was launched to show pharmaverse packages in action, and the pharmaverse 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 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, write examples, or author a blog post. 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!

- -
-
-
- - -
-
- - - -

Last updated

- -

2024-01-04 14:31:08.384806

-

Details

Reuse

Citation

BibTeX citation:
@online{stackhouse2023,
-  author = {Stackhouse, Mike},
-  title = {End of {Year} {Update} from the {Pharmaverse} {Council}},
-  date = {2023-12-21},
-  url = {https://pharmaverse.github.io/blog/posts/2023-12-21_end_of__year__up.../end_of__year__update_from_the__pharmaverse__council.html},
-  langid = {en}
-}
-
For attribution, please cite this work as:
-Stackhouse, Mike. 2023. “End of Year Update from the Pharmaverse -Council.” December 21, 2023. https://pharmaverse.github.io/blog/posts/2023-12-21_end_of__year__up.../end_of__year__update_from_the__pharmaverse__council.html. -
- -
- - - - \ No newline at end of file diff --git a/posts/2023-12-21_end_of__year__up.../pharmaverse.png b/posts/2023-12-21_end_of__year__up.../pharmaverse.png deleted file mode 100644 index 0d7fc797..00000000 Binary files a/posts/2023-12-21_end_of__year__up.../pharmaverse.png and /dev/null differ diff --git a/posts/2024-01-04_end_of__year__up.../end_of__year__update_from_the__pharmaverse__council.html b/posts/2024-01-04_end_of__year__up.../end_of__year__update_from_the__pharmaverse__council.html index ade50d4b..5714cb90 100644 --- a/posts/2024-01-04_end_of__year__up.../end_of__year__update_from_the__pharmaverse__council.html +++ b/posts/2024-01-04_end_of__year__up.../end_of__year__update_from_the__pharmaverse__council.html @@ -37,10 +37,12 @@ - + + - + +