# Load Packages
library(admiral)
library(dplyr)
library(lubridate)
library(stringr)
library(metacore)
library(metatools)
library(xportr)
library(readr)
library(pharmaversesdtm)
library(pharmaverseadam)
Pharmaverse PK Examples
A new pharmaverse examples website has some exciting new features to explore.
One of these is the ability to launch Posit Cloud to explore the example code and make your own modifications. This interactive Posit Cloud environment is preconfigured with all required package installations. Click here: Launch Posit Cloud to explore the examples code.
This sample code here is based on the Population PK Analysis Data (ADPPK) model which follows the recently released CDISC Implementation Guide.
Population PK models generally make use of nonlinear mixed effects models that require numeric variables. The data used in the models will include both dosing and concentration records, relative time variables, and numeric covariate variables. For more details see the {admiral}
vignette.
First Load Packages
First we will load the packages required for our project. We will use {admiral}
for the creation of analysis data. {admiral}
requires {dplyr}
, {lubridate}
and {stringr}
. We will use {metacore}
and {metatools}
to store and manipulate metadata from our specifications. We will use {xportr}
to perform checks on the final data and export to a transport file.
The source SDTM data will come from the CDISC pilot study data stored in {pharmaversesdtm}
and the ADaM ADSL data will come from {pharmaverseadam}
.
Next Load Specifications for Metacore
We have saved our specifications in an Excel file and will load them into {metacore}
with the metacore::spec_to_metacore()
function.
# ---- Load Specs for Metacore ----
<- spec_to_metacore("pk_spec.xlsx") %>%
metacore select_dataset("ADPPK")
Load Source Datasets
We will load our SDTM data from {pharmaversesdtm}
. The main components of the Population PK will be exposure data from EX
and pharmacokinetic concentration data from PC
. Here we will use ADSL
from {pharmaverseadam}
for baseline characteristics and we will derive additional baselines from vital signs VS
and laboratory data LB
.
# ---- Load source datasets ----
# Load PC, EX, VS, LB and ADSL
data("pc")
data("ex")
data("vs")
data("lb")
data("adsl")
<- convert_blanks_to_na(ex)
ex <- convert_blanks_to_na(pc)
pc <- convert_blanks_to_na(vs)
vs <- convert_blanks_to_na(lb) lb
Derive Covariates Using {metatools}
In this step we will create our numeric covariates using the metatools::create_var_from_codelist()
function.
#---- Derive Covariates ----
# Include numeric values for STUDYIDN, USUBJIDN, SEXN, RACEN etc.
<- adsl %>%
covar create_var_from_codelist(metacore, input_var = STUDYID, out_var = STUDYIDN) %>%
create_var_from_codelist(metacore, input_var = SEX, out_var = SEXN) %>%
create_var_from_codelist(metacore, input_var = RACE, out_var = RACEN) %>%
create_var_from_codelist(metacore, input_var = ETHNIC, out_var = AETHNIC) %>%
create_var_from_codelist(metacore, input_var = AETHNIC, out_var = AETHNICN) %>%
create_var_from_codelist(metacore, input_var = ARMCD, out_var = COHORT) %>%
create_var_from_codelist(metacore, input_var = ARMCD, out_var = COHORTC) %>%
create_var_from_codelist(metacore, input_var = COUNTRY, out_var = COUNTRYN) %>%
create_var_from_codelist(metacore, input_var = COUNTRY, out_var = COUNTRYL) %>%
mutate(
STUDYIDN = as.numeric(word(USUBJID, 1, sep = fixed("-"))),
SITEIDN = as.numeric(word(USUBJID, 2, sep = fixed("-"))),
USUBJIDN = as.numeric(word(USUBJID, 3, sep = fixed("-"))),
SUBJIDN = as.numeric(SUBJID),
ROUTE = unique(ex$EXROUTE),
FORM = unique(ex$EXDOSFRM),
REGION1 = COUNTRY,
REGION1N = COUNTRYN,
SUBJTYPC = "Volunteer",
%>%
) create_var_from_codelist(metacore, input_var = FORM, out_var = FORMN) %>%
create_var_from_codelist(metacore, input_var = ROUTE, out_var = ROUTEN) %>%
create_var_from_codelist(metacore, input_var = SUBJTYPC, out_var = SUBJTYP)
Derive Additional Baselines
Next we add additional baselines from vital signs and laboratory data. Several common variables are computed using some of the built in functions in {admiral}
.
<- lb %>%
labsbl filter(LBBLFL == "Y" & LBTESTCD %in% c("CREAT", "ALT", "AST", "BILI")) %>%
mutate(LBTESTCDB = paste0(LBTESTCD, "BL")) %>%
select(STUDYID, USUBJID, LBTESTCDB, LBSTRESN)
<- covar %>%
covar_vslb derive_vars_merged(
dataset_add = vs,
filter_add = VSTESTCD == "HEIGHT",
by_vars = exprs(STUDYID, USUBJID),
new_vars = exprs(HTBL = VSSTRESN)
%>%
) derive_vars_merged(
dataset_add = vs,
filter_add = VSTESTCD == "WEIGHT" & VSBLFL == "Y",
by_vars = exprs(STUDYID, USUBJID),
new_vars = exprs(WTBL = VSSTRESN)
%>%
) derive_vars_transposed(
dataset_merge = labsbl,
by_vars = exprs(STUDYID, USUBJID),
key_var = LBTESTCDB,
value_var = LBSTRESN
%>%
) mutate(
BMIBL = compute_bmi(height = HTBL, weight = WTBL),
BSABL = compute_bsa(
height = HTBL,
weight = HTBL,
method = "Mosteller"
),CRCLBL = compute_egfr(
creat = CREATBL, creatu = "SI", age = AGE, weight = WTBL, sex = SEX,
method = "CRCL"
),EGFRBL = compute_egfr(
creat = CREATBL, creatu = "SI", age = AGE, weight = WTBL, sex = SEX,
method = "CKD-EPI"
)%>%
) rename(TBILBL = BILIBL)
This covariate section of the code will be combined with the dosing and observation records from EX
and PC
.
The rest of the code can be seen on the pharmaverse examples website or in the Posit Cloud environment.
Happy exploring!
Last updated
2024-12-13 13:35:26.055111
Details
Reuse
Citation
@online{dickinson2024,
author = {Dickinson, Jeff},
title = {PK {Examples}},
date = {2024-01-26},
url = {https://pharmaverse.github.io/blog/posts/2023-12-20_p_k__examples/p_k__examples.html},
langid = {en}
}