-
Notifications
You must be signed in to change notification settings - Fork 11
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
create blog Inside the Pharmaverse #131
Changes from all commits
0a83396
a173043
2348c97
ceb76d7
783db0b
193b215
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
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, | ||
"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) | ||
} |
Original file line number | Diff line number | Diff line change | ||||
---|---|---|---|---|---|---|
@@ -0,0 +1,138 @@ | ||||||
--- | ||||||
title: "Inside the Pharmaverse" | ||||||
author: | ||||||
- name: Michael Rimler | ||||||
description: "A short blog to help the Pharmaverse community understand how Pharmaverse is governed" | ||||||
date: "2024-03-04" | ||||||
# 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 <- "2024-03-04_inside_the__phar..." | ||||||
# renv::use(lockfile = "renv.lock") | ||||||
``` | ||||||
|
||||||
<!--------------- post begins here -----------------> | ||||||
|
||||||
Greetings, Pharmaverse phriends! | ||||||
|
||||||
Now that the {pharmaverse} has been around for a few years and seems to be making an impact on clinical reporting (yay!), we wanted to take an opportunity to cast a light on some of the inner workings of Pharmaverse and its Council (us). | ||||||
Fortunately, some of you (you know who you are) innovated and created this fantastic channel for [Pharmaverse Blogs](https://pharmaverse.github.io/blog/). | ||||||
We can’t think of a better way to communicate than by the channel that the Pharmaverse community itself created. | ||||||
|
||||||
## Pharmaverse Inception | ||||||
|
||||||
The Pharmaverse Council was formed in 2020 as a coming together of 4 like-minded individuals embedded in the industry-wide efforts to increase the use of the R language for clinical trial analysis and reporting. | ||||||
These individuals included [Ross Farrugia](https://www.linkedin.com/in/ross-farrugia-820839204/) (Roche), [Sumesh Kalappurakal](https://www.linkedin.com/in/sumesh-kalappurakal-b8283ab/) (Johnson & Johnson), [Michael Rimler](https://www.linkedin.com/in/michaelrimler/) (GSK), and [Mike Stackhouse](https://www.linkedin.com/in/michael-s-stackhouse/) (Atorus). | ||||||
Each had historical experience with R adoption, through their primary roles within their respective organizations. | ||||||
|
||||||
Collectively, these 4 individuals saw the value in | ||||||
|
||||||
(i) reducing the choice set of R packages for users, | ||||||
|
||||||
(ii) identifying gaps in available R packages for delivering the clinical data pipeline, and | ||||||
|
||||||
(iii) encouraging the development of new packages and/or features to close those gaps. | ||||||
|
||||||
The result would be a subset of permissively licensed and open-sourced packages that anyone could use (or modify) to suit their specific use cases, thereby reducing the incidence of organizations privately solving typical problems in isolation. | ||||||
For more background, please refer to the [Pharmaverse Charter](https://pharmaverse.org/charter/). | ||||||
|
||||||
The current Pharmaverse Council companies include GSK, Roche, Johnson & Johnson, Atorus, and Novo Nordisk, represented by the original four founders and [Ari Siggaard Knoph](https://www.linkedin.com/in/ari-siggaard-knoph-7b852575/) from Novo Nordisk. | ||||||
|
||||||
In March 2023, the [PHUSE](https://phuse.global/) Board of Directors approached the Pharmaverse Council with a proposal offering support to Pharmaverse developers and leadership to advance the Pharmaverse mission. | ||||||
The PHUSE proposal aligned with its mission to promote “\[s\]haring ideas, tools and standards around data, statistical and reporting technologies to advance the future of life sciences.” PHUSE is currently a supporter of the Pharmaverse and its objectives, evident through activities such as: | ||||||
|
||||||
- the provision of access to PHUSE’s communication and file-sharing platforms to package teams, | ||||||
|
||||||
- the provision of project management support to package teams (if needed), | ||||||
|
||||||
- enablement and promotion of Pharmaverse innovations and activities, and | ||||||
|
||||||
- enablement of face-to-face community connections at PHUSE events. | ||||||
|
||||||
## Pharmaverse Objective | ||||||
|
||||||
Pharmaverse aims to promote the collaborative development of curated open-source R packages for clinical reporting in pharma. | ||||||
Indirectly, we also strive to encourage and increase R adoption within the industry and facilitate communication and collaboration among both R users and R developers. | ||||||
Comment on lines
+59
to
+62
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Should we lead with this section? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Good thought - I think it is okay as is. |
||||||
|
||||||
## Becoming a Council Member | ||||||
|
||||||
Membership to the **Pharmaverse Council** is granted to the organization and is open to any type of organization (requirements further described [here](https://pharmaverse.org/contribute/council/)). | ||||||
In layperson’s terms, the Council member organization must support a representative on the council and demonstrate a commitment to contributions to the Pharmaverse codebase. | ||||||
Specifically, *“Commitment to at least 2 open source packages under Pharmaverse via reviews, hands-on code development, product leads, or other roles which contribute to the design, development, testing, release, and/or maintenance.”* If any representative steps away from their council position, the member organization would identify the replacement. | ||||||
Council meeting minutes are published in the Pharmaverse GitHub [here](https://github.com/pharmaverse/pharmaverse/tree/main/static/council%20meeting%20minutes). | ||||||
|
||||||
## Package Inclusion | ||||||
|
||||||
Applications for a package to be included in the Pharmaverse may originate from anybody and anywhere. | ||||||
The Council (through its [Working Groups](https://pharmaverse.org/contribute/wg/)) reviews applications and either (i) approves the package into the Pharmaverse or (ii) rejects the package with a rationale. | ||||||
When a rejection has been issued, common reasons have been ‘not now’ with feedback to enhance testing, documentation, or other aspects that enrich the package. | ||||||
Working Groups may also steer the applicant to other packages with similar functionality. | ||||||
In this sense, respective package maintainers (product owners) are encouraged to work collaboratively to reduce duplicated features across packages and improve the overall experience of the user base. | ||||||
The Council and Working Groups are tasked with assessing this aspect of the Pharmaverse code base, but the decision on implementation ultimately resides with the individual package maintainers. | ||||||
|
||||||
Package reviews are conducted in the open: | ||||||
|
||||||
- **Example 1:** {riskassessment} from R Validation Hub working group – result successful: <https://github.com/pharmaverse/pharmaverse/issues/195> | ||||||
|
||||||
- **Example 2:** {rhino} from Appsilon – result successful: <https://github.com/pharmaverse/pharmaverse/issues/260> | ||||||
|
||||||
- **Example 3:** {synthetic.cdisc.data} from Roche – result unsuccessful: <https://github.com/pharmaverse/pharmaverse/issues/235> | ||||||
|
||||||
At the time of publication, there were over 250 contributors to Pharmaverse packages, across a network of organizations much broader than just the 5 Council member organizations. | ||||||
Pharmaverse Council encourages diversity of individual contributors and the organizations they are affiliated with. | ||||||
The decision on product development team rosters is the sole discretion of the packages. | ||||||
Of course, Council member organizations are providing people to support the Pharmaverse ecosystem (e.g., developers and product owners). | ||||||
However, both strategic and operational decisions on the development and maintenance of individual packages reside outside the Pharmaverse Council. | ||||||
|
||||||
## User adoption | ||||||
|
||||||
Pharma companies are free to choose any selection of R packages for clinical reporting and only they can justify their choices. | ||||||
The [Pharmaverse website](https://pharmaverse.org/) states that “\[a\]nyone is free to choose any selection of Pharmaverse recommended software or those from any other source.” In addition, Pharmaverse does not seek to engage or get endorsement from any health authority. | ||||||
We are merely trying to provide a public service to help individuals and organizations involved in clinical reporting navigate a vast field of available R packages licensed as open source. | ||||||
|
||||||
The Pharmaverse website provides illustrative [examples](https://pharmaverse.github.io/examples/) of how to use Pharmaverse and other packages to build common deliverables. | ||||||
|
||||||
## So, what really is Pharmaverse? | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. What about the example site and showing how we take pharmaverse and other There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I will add a simp;le sentence to connect the reader |
||||||
|
||||||
Pharmaverse is essentially two things: | ||||||
|
||||||
1. Pharmaverse is a list of packages curated by the Pharmaverse Council and Working Groups, primarily communicated via the Pharmaverse website. | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. The grammar may be poor, but I like the way it reads by reiterating 'Pharmaverse' |
||||||
Pharmaverse also maintains an [R-universe build](https://pharmaverse.r-universe.dev/builds) for ease of use outside GxP settings. | ||||||
|
||||||
2. Pharmaverse is a community of R users and R developers “working to promote collaborative development of curated open-source R packages for clinical reporting usage in pharma.” | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Also where does this quote come from? Might be beneficial to link a source? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. @manciniedoardo same comment as above. Quote comes from https://pharmaverse.org/ |
||||||
|
||||||
Pharmaverse Council provides a [Slack workspace](https://pharmaverse.slack.com/) to build community amongst all interested parties and serve as a communication platform for individuals and package teams. | ||||||
At present, membership to this workspace exceeds \>1200 members. | ||||||
|
||||||
Pharmaverse Council also provides a [GitHub organization](https://github.com/pharmaverse) for developers to work in, but hosting packages in the Pharmaverse GitHub is not required to be part of Pharmaverse. | ||||||
|
||||||
These elements are supported on an all-volunteer basis, mostly with community versions of various platforms (e.g., we use the free tier on Slack). | ||||||
|
||||||
## Thank you | ||||||
|
||||||
Thank you, each of you, for the part that you play. | ||||||
No matter how big or small, you are helping amplify the impact that open collaboration is having on how we deliver new medicines and vaccines to patients around the world. | ||||||
We hope you are finding, and continue to find, Pharmaverse a valuable piece of the clinical reporting puzzle. | ||||||
|
||||||
And, if not – let us know! | ||||||
|
||||||
*Pharmaverse Council – Ari, Michael, Mike, Ross, and Sumesh* | ||||||
|
||||||
**Disclaimer:** This blog contains opinions that are of the authors alone and do not necessarily reflect the strategy of their respective organizations. | ||||||
|
||||||
<!--------------- appendices go here -----------------> | ||||||
|
||||||
```{r, echo=FALSE} | ||||||
source("appendix.R") | ||||||
insert_appendix( | ||||||
repo_spec = "pharmaverse/blog", | ||||||
name = long_slug | ||||||
) | ||||||
``` |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Throughout the post, both {Pharmaverse} and Pharmaverse are used - suggest sticking to one?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I used {Pharmaverse} once, intentionally, for style. Unless you see other instances, I think it's ok.