Skip to content

Commit

Permalink
66 pharmaverse story (#87)
Browse files Browse the repository at this point in the history
* First ideas

* Introducing the context

* Updates with references

* Version to Review

* appendix

* Space between image

* Formatting packages names

* Grammar mistakes

* Apply suggestions from code review (Ross Farrugia)

Co-authored-by: Ross Farrugia <82581364+rossfarrugia@users.noreply.github.com>

* Adding Ari Siggaard Knoph (Novo Nordisk) as a council member.

* Wordlist

* Ben's suggestions

* Adding sections

* Apply suggestions from Stefan review

Co-authored-by: StefanThoma <40463122+StefanThoma@users.noreply.github.com>

* Stefan review

---------

Co-authored-by: Nicholas Eugenio <nicholas.eugenio@businesspartner.roche.com>
Co-authored-by: Ben Straub <ben.x.straub@gsk.com>
Co-authored-by: Ross Farrugia <82581364+rossfarrugia@users.noreply.github.com>
Co-authored-by: StefanThoma <40463122+StefanThoma@users.noreply.github.com>
  • Loading branch information
5 people authored Aug 22, 2023
1 parent c0a3c22 commit d8be6c6
Show file tree
Hide file tree
Showing 6 changed files with 223 additions and 5 deletions.
10 changes: 5 additions & 5 deletions R/create_blogpost.R
Original file line number Diff line number Diff line change
Expand Up @@ -15,12 +15,12 @@ c(

# Fill in the info, e.g.:
create_post(
post_name = "study_day", # needs to be character vector (length 1)
post_date = "2023-08-08", # needs to be character vector (length 1)
post_name = "pharmaverse story", # needs to be character vector (length 1)
post_date = "2023-08-30", # needs to be character vector (length 1)
description = "", # you can fill the description in later as well
author = c("Ben Straub"), # one or more authors are permitted
cover_image = "admiral", # chose one of the above (see line 8)
tags = c("admiral", "ADaMs") # chose (multiple) from line 10
author = c("Nicholas Eugenio"), # one or more authors are permitted
cover_image = "pharmaverse", # chose one of the above (see line 8)
tags = c("community") # chose (multiple) from line 10
)


Expand Down
38 changes: 38 additions & 0 deletions inst/WORDLIST.txt
Original file line number Diff line number Diff line change
Expand Up @@ -252,6 +252,36 @@ tlg
TLG
TLGs
xpt
APMDOS
atorus
Atorus
britannica
dev
Encyclopædia
envsetup
Farrugia
Gottfried
Hk
Isabela
Janssen
Kalappurakal
logrx
merck
metacore
Pharma
pharmaRTF
phuse
QOlIU
qp
Rimler
rinpharma
rtf
Stackhouse
Sumesh
tidytlg
Tplyr
Velásquez's
youtube
anderson
atorus
CAMIS
Expand Down Expand Up @@ -321,6 +351,14 @@ dy
lubridate
TRTSDTM
ymd
Ari
eclinical
Knoph
Nordisk
Novo
Siggaard
pharma
reproducibility
behaviour
Farrugia
ethz
78 changes: 78 additions & 0 deletions posts/2023-08-30_pharmaverse_story/appendix.R
Original file line number Diff line number Diff line change
@@ -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,
"index.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)
}
Binary file added posts/2023-08-30_pharmaverse_story/logos.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
102 changes: 102 additions & 0 deletions posts/2023-08-30_pharmaverse_story/pharmaverse_story.qmd
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@
---
title: "The pharmaverse (hi)story"
author:
- name: Nicholas Eugenio
description: ""
date: "2023-08-30"
# 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"
---

<!--------------- typical setup ----------------->

```{r setup, include=FALSE}
long_slug <- "2023-08-30_pharmaverse_story"
# renv::use(lockfile = "renv.lock")
```

<!--------------- post begins here ----------------->

Pharmaverse: from motivation to present

## Human history and pharmaverse context

Since the Australian Aboriginal, the earliest peoples recorded to have inhabited the Earth and who have been in Australia for at least 65,000 to 80,000 years ([Encyclopædia Britannica](https://www.britannica.com/topic/Australian-Aboriginal)), human beings live in group.
Whether to protect yourself, increase your life expectancy or simply share tasks.

For most aspects of life, it doesn't make sense to think, act or work alone for two main reasons:

1. You will spend more energy and time;

2. Someone else may be facing (or have faced) the same situation.

The English poet John Donne used to say *"No man is an island entire of itself; every man is a piece of the continent, a part of the main;"*.
I can't disagree with him.
And I dare say that Ari Siggaard Knoph (Novo Nordisk), Michael Rimler (GSK), Michael Stackhouse (Atorus), Ross Farrugia (Roche), and Sumesh Kalappurakal (Janssen) can't disagree with him either.
They are the founders of [pharmaverse](https://pharmaverse.org/), members of its Council and kindly shared their memories of how independent companies, in mid-2020, worked together in the creation of a set of packages developed to support the clinical reporting pipeline.

If you are not familiar with this pipeline, the important thing to know is that, in a nutshell, pharmaceutical companies must follow a bunch of standardized procedures and formats (from Clinical Data Interchange Standards Consortium, [CDISC](https://www.cdisc.org/)) when submitting clinical results to Health Authorities.
The focus is on this: **different** companies seeking the **same** standards for outputs.

Paraphrasing Ross Farrugia (Roche) *Breaking boundaries through open-source collaboration* presentation in [R/Pharma 2022](https://www.youtube.com/watch?v=APMDOS4v9Hk) and thinking of the development of a new drug, we are talking about a "post-competitive" scenario: the drug has already been discovered and the companies should "just" produce and deliver standardized results.

## Clinical reporting outputs

Rationally, we can say that companies face the same challenges in these steps of the process.
Not so intuitively, we can also say they were working in silos on that before 2018.
Just as Isaac Newton and Gottfried W. Leibniz [independently developed the theory of infinitesimal calculus](https://en.wikipedia.org/wiki/History_of_calculus), pharmaceutical companies were independently working on R solutions for this pipeline.

But on August 16 and 17 of the mentioned year above, they gathered at the first edition of [R/Pharma conference](https://rinpharma.com/) to discuss R and open-source tooling for drug development (the reasons why open-source is an advantageous approach can be found in this [post](https://pharmaverse.github.io/blog/posts/2023-07-20_cross_company_dev/cross_industry_dev.html) written by Stefan Thoma).
And according to Isabela Velásquez's article, [Pharmaverse: Packages for clinical reporting workflows](https://posit.co/blog/pharmaverse-packages-for-clinical-reporting-workflows/), one of the most popular questions in this conference was "Is the package code available or on [CRAN](https://cran.r-project.org/)?".

Well, many of them were.
And not necessarily at that date, but just to mention a few: [*pharmaRTF*](https://atorus-research.github.io/pharmaRTF/index.html) and [*Tplyr*](https://atorus-research.github.io/Tplyr/index.html) from Atorus, [*r2rtf*](https://merck.github.io/r2rtf/) from Merck, [*rtables*](https://insightsengineering.github.io/rtables/main/) from Roche, etc.
The thing is that, overall, there were almost 10000 other packages as well (today, almost 20000).
And that took to another two questions:

1. With this overwhelming number of packages on CRAN, how to find the ones related to solving "clinical reporting problems"?

2. Once the packages were found, how to choose which one to use among those that have the same functional purpose?

So, again, companies re-started to working in silos to find those answers.
But now, in collaborative silos and with common goals: create extremely useful packages to solve pharmaceutical-specific gaps once and solve them well!

## First partnerships

In 2020, Michael Stackhouse (Atorus) and Michael Rimler (GSK) talked and formed a partnership between their companies to develop a few more packages, including [*metacore*](https://github.com/atorus-research/metacore), to read, store and manipulate metadata for ADaMs/SDTMs in a standardized object; [*xportr*](https://github.com/atorus-research/xportr), to create submission compliant SAS transport files and perform pharma specific dataset level validation checks; and [*logrx*](https://github.com/pharmaverse/logrx) (ex-*timber*), to build log to support reproducibility and traceability of an R script.

Around the same time, Thomas Neitmann (currently at Denali Therapeutics, then at Roche) and Michael Rimler (GSK) discovered that both were working with ADaM in R, so Thomas Neitmann (currently at Denali Therapeutics, then at Roche), Ross Farrugia (Roche) and Michael Rimler (GSK) saw an opportunity there and GSK started their partnership with Roche to build and release [*admiral*](https://github.com/pharmaverse/admiral) package.

The idea of working together, the sense of community, and the appetite from organizations built more and more, with incentive and priority established up into the programming heads council.

Janssen had a huge effort in building R capabilities going on as well, by releasing [*tidytlg*](https://github.com/pharmaverse/tidytlg) and [*envsetup*](https://github.com/pharmaverse/envsetup)), so eventually Michael Rimler (GSK), Michael Stackhouse (Atorus) and Ross Farrugia (Roche) formalized [pharmaverse](https://pharmaverse.org/) and formed the council, adding in Sumesh Kalappurakal (Janssen) and Ari Siggaard Knoph (Novo Nordisk) later joined as the fifth council member.

## Release, growth and developments

At the end of their presentation ["Closing the Gap: Creating an End to End R Package Toolkit for the Clinical Reporting Pipeline."](https://www.youtube.com/watch?v=NW9qp5QOlIU), in [R/Pharma 2021](https://rinpharma.com/event/rinpharma2021/), Ben Straub (GSK) and Eli Miller (Atorus) welcomed the community to the [pharmaverse](https://pharmaverse.org/), a curated collection of packages developed by various pharmaceutical companies to support open-source clinical workflows.

From the outset, the name [pharmaverse](https://pharmaverse.org/) was chosen so that it could be a neutral home, unrelated to any company.
Also, it was established as not being a consortium, which means that founders don't own, fund, or maintain the packages.
Some individuals and companies maintain them but often allowing for community contributions and being licensed permissively so that there is always a feeling of community ownership.
The focus of [pharmaverse](https://pharmaverse.org/) early on, and today, is on inter organization cooperation, to build an environment where, if organizations identify that they have a joint problem that they want to solve, this is the right space to work on and release it.

[Pharmaverse](https://pharmaverse.org/) has grown a lot, at the time of writing this post we have \>25 packages recommended in [pharmaverse](https://pharmaverse.org/e2eclinical/), and this has led to a partnership with [PHUSE](https://phuse.global/About_PHUSE) to get support from their organization and platform, and because they are eager to advance and support [pharmaverse mission](https://pharmaverse.org/charter/).

Despite all its structure, it is impossible to say that we have a single solution for each clinical reporting analysis when it comes to [pharmaverse](https://pharmaverse.org/), a single pathway is impractical.
Instead, it is necessary to accept viable tools fitting different pathways into [pharmaverse](https://pharmaverse.org/) to direct and give people options as to what might work for them.
After all, even though we live together as a community, we still have our own unique internal problems.

![Sample of pharmaverse packages](logos.png)

<!--------------- appendices go here ----------------->

```{r, echo=FALSE}
source("appendix.R")
insert_appendix(
repo_spec = "pharmaverse/blog",
name = long_slug
)
```

0 comments on commit d8be6c6

Please sign in to comment.