This article describes about creating ADFACE ADaM
dataset which is part of Vaccine - Reactogenicity based on the Center
for Biologics Evaluation and Research (CBER) guidelines.
See the below links for more information:
Center for Biologics Evaluation and Research (CBER) Guidelines
Therapeutic Area Data Standards User Guide for Vaccines (TAUG-Vax)
Examples are currently tested using ADSL (ADaM) and
face, vs, ex (SDTM) inputs.
Note: All examples assume CDISC SDTM and/or ADaM format as input unless otherwise specified.
FACE with
EXADSL Variables Needed
for AnalysisVS
DomainADT, ADTM, ADY,
ADTF, ATMF)APxxSDT, APxxEDT, …)PARAMCD, PARAM,
PARAMN, PARCAT1To start, all data frames needed for the creation of
ADFACE should be read into the environment. Some of the
data frames needed are VS,EX and
FACE.
library(admiral)
library(admiralvaccine)
library(admiraldev)
library(pharmaversesdtm)
library(dplyr, warn.conflicts = FALSE)
library(lubridate)
library(stringr)
library(tidyr)
library(tibble)
data("face_vaccine")
data("suppface_vaccine")
data("ex_vaccine")
data("suppex_vaccine")
data("vs_vaccine")
data("admiralvaccine_adsl")
face <- convert_blanks_to_na(face_vaccine)
ex <- convert_blanks_to_na(ex_vaccine)
vs <- convert_blanks_to_na(vs_vaccine)
suppface <- convert_blanks_to_na(suppface_vaccine)
suppex <- convert_blanks_to_na(suppex_vaccine)
adsl <- convert_blanks_to_na(admiralvaccine_adsl)This step involves company-specific pre-processing of required input
dataset for further analysis. In this step, we will filter records that
has only reactogenicity events and combine the face and
ex with their supplementary datasets suppface
and suppex respectively.
face <- face %>%
filter(FACAT == "REACTOGENICITY" & grepl("ADMIN|SYS", FASCAT)) %>%
mutate(FAOBJ = str_to_upper(FAOBJ)) %>%
metatools::combine_supp(suppface)
ex <- metatools::combine_supp(ex, suppex)| USUBJID | FAOBJ | FATESTCD | FACAT | FASCAT | FATPTREF | FADTC |
|---|---|---|---|---|---|---|
| ABC-1001 | CHILLS | OCCUR | REACTOGENICITY | SYSTEMIC | VACCINATION 1 | 2021-11-03T18:00:23 |
| ABC-1001 | CHILLS | OCCUR | REACTOGENICITY | SYSTEMIC | VACCINATION 1 | 2021-11-04T18:01:09 |
| ABC-1001 | CHILLS | OCCUR | REACTOGENICITY | SYSTEMIC | VACCINATION 1 | 2021-11-05T19:04:07 |
| ABC-1001 | CHILLS | OCCUR | REACTOGENICITY | SYSTEMIC | VACCINATION 1 | 2021-11-06T18:00:33 |
| ABC-1001 | CHILLS | OCCUR | REACTOGENICITY | SYSTEMIC | VACCINATION 1 | 2021-11-07T18:01:25 |
| ABC-1001 | CHILLS | OCCUR | REACTOGENICITY | SYSTEMIC | VACCINATION 1 | 2021-11-08T18:00:26 |
| ABC-1001 | CHILLS | OCCUR | REACTOGENICITY | SYSTEMIC | VACCINATION 1 | 2021-11-09T18:08:04 |
| ABC-1001 | PAIN AT INJECTION SITE | OCCUR | REACTOGENICITY | ADMINISTRATION SITE | VACCINATION 1 | 2021-11-03T18:00:23 |
| ABC-1001 | PAIN AT INJECTION SITE | OCCUR | REACTOGENICITY | ADMINISTRATION SITE | VACCINATION 1 | 2021-11-04T18:01:09 |
| ABC-1001 | PAIN AT INJECTION SITE | SEV | REACTOGENICITY | ADMINISTRATION SITE | VACCINATION 1 | 2021-11-04T18:01:09 |
FACE with EXIn this step, we will merge face with ex
domain and add required variables from ex domain to the
input dataset. If subjects have multiple vaccination at same visit then
this function will not merge input dataset with ex dataset
and throws a warning.
The function derive_vars_merged_vaccine() is used to
merge face with ex domain.
adface <- derive_vars_merged_vaccine(
dataset = face,
dataset_ex = ex,
by_vars_sys = exprs(USUBJID, FATPTREF = EXLNKGRP),
by_vars_adms = exprs(USUBJID, FATPTREF = EXLNKGRP, FALOC = EXLOC, FALAT = EXLAT),
ex_vars = exprs(EXTRT, EXDOSE, EXSEQ, EXSTDTC, EXENDTC, VISIT, VISITNUM)
)| USUBJID | FAOBJ | FATESTCD | FATPTREF | EXTRT |
|---|---|---|---|---|
| ABC-1001 | PAIN AT INJECTION SITE | OCCUR | VACCINATION 1 | VACCINE A |
| ABC-1001 | PAIN AT INJECTION SITE | OCCUR | VACCINATION 1 | VACCINE A |
| ABC-1001 | PAIN AT INJECTION SITE | SEV | VACCINATION 1 | VACCINE A |
| ABC-1001 | PAIN AT INJECTION SITE | OCCUR | VACCINATION 1 | VACCINE A |
| ABC-1001 | PAIN AT INJECTION SITE | SEV | VACCINATION 1 | VACCINE A |
| ABC-1001 | PAIN AT INJECTION SITE | OCCUR | VACCINATION 1 | VACCINE A |
| ABC-1001 | PAIN AT INJECTION SITE | SEV | VACCINATION 1 | VACCINE A |
| ABC-1001 | PAIN AT INJECTION SITE | OCCUR | VACCINATION 1 | VACCINE A |
| ABC-1001 | PAIN AT INJECTION SITE | SEV | VACCINATION 1 | VACCINE A |
| ABC-1001 | PAIN AT INJECTION SITE | OCCUR | VACCINATION 1 | VACCINE A |
This call would return the input dataset with columns from
ex_vars added if the subjects does not have multiple
vaccination at same visit.
Though the function will throw warning if subjects have multiple vaccination at same visit, this call would return the input dataset merging it with supplementary dataset.
ADSL Variables Needed for AnalysisAt this step, it may be useful to join ADSL to your
face domain. Only the ADSL variables used for
derivations are selected at this step. The rest of the relevant
ADSL variables would be added later.
adsl_vars <- exprs(RFSTDTC, RFENDTC)
adface <- derive_vars_merged(
face,
dataset_add = adsl,
new_vars = adsl_vars,
by_vars = get_admiral_option("subject_keys")
)| USUBJID | RFSTDTC | RFENDTC |
|---|---|---|
| ABC-1001 | 2021-11-03T10:50:00 | 2022-04-27 |
| ABC-1001 | 2021-11-03T10:50:00 | 2022-04-27 |
| ABC-1001 | 2021-11-03T10:50:00 | 2022-04-27 |
| ABC-1001 | 2021-11-03T10:50:00 | 2022-04-27 |
| ABC-1001 | 2021-11-03T10:50:00 | 2022-04-27 |
| ABC-1001 | 2021-11-03T10:50:00 | 2022-04-27 |
| ABC-1001 | 2021-11-03T10:50:00 | 2022-04-27 |
| ABC-1001 | 2021-11-03T10:50:00 | 2022-04-27 |
| ABC-1001 | 2021-11-03T10:50:00 | 2022-04-27 |
| ABC-1001 | 2021-11-03T10:50:00 | 2022-04-27 |
This call would return the input dataset with columns
RFSTDTC, RFENDTC added.
VS DomainIn this step, we will merge fever records from the VS
domain with the input dataset if the fever records does not present in
the input dataset.
The function derive_fever_records() is used to merge
fever records. These records will also be used in maximum temperature
calculation.
adface <- derive_fever_records(
dataset = adface,
dataset_source = ungroup(vs),
filter_source = VSCAT == "REACTOGENICITY" & VSTESTCD == "TEMP",
faobj = "FEVER"
)| USUBJID | FAOBJ | FATESTCD | FAORRES | VSSTRESN |
|---|---|---|---|---|
| ABC-1001 | FEVER | OCCUR | N | 36.61 |
| ABC-1001 | FEVER | OCCUR | N | 37.28 |
| ABC-1001 | FEVER | OCCUR | N | 36.28 |
| ABC-1001 | FEVER | OCCUR | N | 36.83 |
| ABC-1001 | FEVER | OCCUR | N | 36.56 |
| ABC-1001 | FEVER | OCCUR | N | 37.28 |
| ABC-1001 | FEVER | OCCUR | N | 36.72 |
| ABC-1001 | FEVER | OCCUR | NA | NA |
| ABC-1001 | FEVER | OCCUR | NA | NA |
| ABC-1001 | FEVER | OCCUR | NA | NA |
This call returns the input dataset with FEVER records
added if the input dataset does not have FEVER records. If
the input dataset has FEVER records, the output dataset
will be same as the input dataset.
ADT,
ADTM, ADTF, ATMF,
ADY)The function derive_vars_dt() can be used to derive
ADT. This function allows the user to impute the date as
well.
Similarly, ADTM can be created using the function
derive_vars_dtm(). Imputation can be done on both the date
and time components of ADTM.
Example calls:
adface <- adface %>%
derive_vars_dt(
new_vars_prefix = "A",
dtc = FADTC
) %>%
derive_vars_dtm(
new_vars_prefix = "A",
dtc = FADTC,
highest_imputation = "n"
)Once ADT is derived, the function
derive_vars_dy() can be used to derive ADY.
This example assumes both ADT and RFSTDTC
exist on the data frame.
adface <- adface %>%
mutate(RFSTDTC = as.Date(RFSTDTC)) %>%
derive_vars_dy(reference_date = RFSTDTC, source_vars = exprs(ADT))| USUBJID | FATPTREF | FAOBJ | ADT | ADTM | ADY |
|---|---|---|---|---|---|
| ABC-1001 | VACCINATION 1 | CHILLS | 2021-11-03 | 2021-11-03 18:00:23 | 1 |
| ABC-1001 | VACCINATION 1 | CHILLS | 2021-11-04 | 2021-11-04 18:01:09 | 2 |
| ABC-1001 | VACCINATION 1 | CHILLS | 2021-11-05 | 2021-11-05 19:04:07 | 3 |
| ABC-1001 | VACCINATION 1 | CHILLS | 2021-11-06 | 2021-11-06 18:00:33 | 4 |
| ABC-1001 | VACCINATION 1 | CHILLS | 2021-11-07 | 2021-11-07 18:01:25 | 5 |
| ABC-1001 | VACCINATION 1 | CHILLS | 2021-11-08 | 2021-11-08 18:00:26 | 6 |
| ABC-1001 | VACCINATION 1 | CHILLS | 2021-11-09 | 2021-11-09 18:08:04 | 7 |
| ABC-1001 | VACCINATION 1 | PAIN AT INJECTION SITE | 2021-11-03 | 2021-11-03 18:00:23 | 1 |
| ABC-1001 | VACCINATION 1 | PAIN AT INJECTION SITE | 2021-11-04 | 2021-11-04 18:01:09 | 2 |
| ABC-1001 | VACCINATION 1 | PAIN AT INJECTION SITE | 2021-11-04 | 2021-11-04 18:01:09 | 2 |
APxxSDT,
APxxEDT, …)The {admiral} core package has separate functions to
handle period variables since these variables are study specific.
See the “Visit and Period Variables” vignette for more information.
If the variables are not derived based on a period reference dataset, they may be derived at a later point of the flow. For example, phases like “Treatment Phase” and “Follow up” could be derived based on treatment start and end date.
period_ref <- create_period_dataset(
dataset = adsl,
new_vars = exprs(
APERSDT = APxxSDT, APEREDT = APxxEDT, TRTA = TRTxxA,
TRTP = TRTxxP
)
)
adface <- derive_vars_joined(
adface,
dataset_add = period_ref,
by_vars = get_admiral_option("subject_keys"),
filter_join = ADT >= APERSDT & ADT <= APEREDT,
join_type = "all"
)| USUBJID | APERSDT | APEREDT | TRTA | TRTP |
|---|---|---|---|---|
| ABC-1001 | 2021-11-03 | 2021-12-29 | VACCINE A | VACCINE A |
| ABC-1001 | 2021-11-03 | 2021-12-29 | VACCINE A | VACCINE A |
| ABC-1001 | 2021-11-03 | 2021-12-29 | VACCINE A | VACCINE A |
| ABC-1001 | 2021-11-03 | 2021-12-29 | VACCINE A | VACCINE A |
| ABC-1001 | 2021-11-03 | 2021-12-29 | VACCINE A | VACCINE A |
| ABC-1001 | 2021-11-03 | 2021-12-29 | VACCINE A | VACCINE A |
| ABC-1001 | 2021-11-03 | 2021-12-29 | VACCINE A | VACCINE A |
| ABC-1001 | 2021-11-03 | 2021-12-29 | VACCINE A | VACCINE A |
| ABC-1001 | 2021-11-03 | 2021-12-29 | VACCINE A | VACCINE A |
| ABC-1001 | 2021-11-03 | 2021-12-29 | VACCINE A | VACCINE A |
In this step,we will create the user defined function to assign
AVAL values from AVALC which will be used in
further steps.
The user defined functions would look like the following:
sev_to_numeric <- function(x, y) {
case_when(
x == "NONE" ~ 0,
x == "MILD" ~ 1,
x == "MODERATE" ~ 2,
x == "SEVERE" ~ 3,
TRUE ~ y
)
}The mapping of these variables is left to the User. An example mapping may be:
adface <- adface %>%
mutate(
AVALC = as.character(FASTRESC),
AVAL = suppressWarnings(as.numeric(FASTRESN)),
AVAL = sev_to_numeric(AVALC, AVAL),
ATPTREF = FATPTREF,
ATPT = FATPT,
ATPTN = FATPTNUM
)| USUBJID | FAOBJ | AVAL | AVALC | ATPTREF | ATPTN |
|---|---|---|---|---|---|
| ABC-1001 | CHILLS | NA | N | VACCINATION 1 | 1 |
| ABC-1001 | CHILLS | NA | N | VACCINATION 1 | 2 |
| ABC-1001 | CHILLS | NA | N | VACCINATION 1 | 3 |
| ABC-1001 | CHILLS | NA | N | VACCINATION 1 | 4 |
| ABC-1001 | CHILLS | NA | N | VACCINATION 1 | 5 |
| ABC-1001 | CHILLS | NA | N | VACCINATION 1 | 6 |
| ABC-1001 | CHILLS | NA | N | VACCINATION 1 | 7 |
| ABC-1001 | PAIN AT INJECTION SITE | NA | N | VACCINATION 1 | 1 |
| ABC-1001 | PAIN AT INJECTION SITE | NA | Y | VACCINATION 1 | 2 |
| ABC-1001 | PAIN AT INJECTION SITE | 2 | MODERATE | VACCINATION 1 | 2 |
Creating ANL01FL which would flag the records that will be considered for analysis and if there is any Investigator and Subject record for the same day, it would flag the Investigator record over the subject record.
Note: Please, consider which assessment is needed for your analysis. If you want to prioritize Investigator assessment, please proceed as follows. Otherwise, change FAEVAL order.
adface <- adface %>% derive_var_extreme_flag(
by = exprs(STUDYID, USUBJID, FATPTREF, FAOBJ, FATESTCD, FATPTNUM),
order = exprs(STUDYID, USUBJID, FATPTREF, FAOBJ, FATESTCD, FATPTNUM, FAEVAL),
new_var = ANL01FL,
mode = "first",
true_value = "Y",
false_value = NA_character_
)| USUBJID | FAOBJ | ATPTREF | FATESTCD | FATEST | AVAL | ANL01FL |
|---|---|---|---|---|---|---|
| ABC-1001 | CHILLS | VACCINATION 1 | OCCUR | Occurrence Indicator | NA | Y |
| ABC-1001 | CHILLS | VACCINATION 1 | OCCUR | Occurrence Indicator | NA | Y |
| ABC-1001 | CHILLS | VACCINATION 1 | OCCUR | Occurrence Indicator | NA | Y |
| ABC-1001 | CHILLS | VACCINATION 1 | OCCUR | Occurrence Indicator | NA | Y |
| ABC-1001 | CHILLS | VACCINATION 1 | OCCUR | Occurrence Indicator | NA | Y |
| ABC-1001 | CHILLS | VACCINATION 1 | OCCUR | Occurrence Indicator | NA | Y |
| ABC-1001 | CHILLS | VACCINATION 1 | OCCUR | Occurrence Indicator | NA | Y |
| ABC-1001 | DIARRHEA | VACCINATION 1 | OCCUR | Occurrence Indicator | NA | Y |
| ABC-1001 | DIARRHEA | VACCINATION 1 | OCCUR | Occurrence Indicator | NA | Y |
| ABC-1001 | DIARRHEA | VACCINATION 1 | OCCUR | Occurrence Indicator | NA | Y |
The function derive_diam_to_sev_records() is used to
derive the severity records from the diameter records for an event.
The severity records created will be useful for calculating the maximum severity.
adface <- derive_diam_to_sev_records(
dataset = adface,
filter_add = ANL01FL == "Y",
diam_code = "DIAMETER",
faobj_values = c("REDNESS", "SWELLING"),
testcd_sev = "SEV",
test_sev = "Severity/Intensity",
none = 0,
mild = 2,
mod = 5,
sev = 10
)| USUBJID | FAOBJ | ATPTREF | FATESTCD | FATEST | AVAL | AVALC |
|---|---|---|---|---|---|---|
| ABC-1001 | REDNESS | VACCINATION 1 | SEV | Severity/Intensity | 2 | MODERATE |
| ABC-1001 | SWELLING | VACCINATION 1 | SEV | Severity/Intensity | 0 | NONE |
| ABC-1001 | SWELLING | VACCINATION 1 | SEV | Severity/Intensity | 2 | MODERATE |
| ABC-1001 | SWELLING | VACCINATION 1 | SEV | Severity/Intensity | 1 | MILD |
| ABC-1001 | SWELLING | VACCINATION 1 | SEV | Severity/Intensity | 1 | MILD |
| ABC-1001 | SWELLING | VACCINATION 1 | SEV | Severity/Intensity | 1 | MILD |
| ABC-1001 | SWELLING | VACCINATION 1 | SEV | Severity/Intensity | 1 | MILD |
| ABC-1001 | SWELLING | VACCINATION 1 | SEV | Severity/Intensity | 0 | NONE |
| ABC-1002 | REDNESS | VACCINATION 1 | SEV | Severity/Intensity | 1 | MILD |
| ABC-1002 | REDNESS | VACCINATION 2 | SEV | Severity/Intensity | 1 | MILD |
This call returns the input dataset with severity records derived from the diameter records for an event.
By default, we will populate SEV and
Severity/Intensity as the FATESTCD and
FATEST for the newly added records. The function allows the
user to change the FATESTCD and FATEST as
well.
In this step, we will derive maximum records for severity, diameter,
temperature using the function
derive_extreme_records().
adface <- derive_extreme_records(
dataset = adface,
dataset_add = adface,
filter_add = FATESTCD == "SEV" & ANL01FL == "Y",
by_vars = exprs(USUBJID, FAOBJ, ATPTREF),
order = exprs(AVAL),
check_type = "none",
mode = "last",
set_values_to = exprs(
FATEST = "Maximum Severity",
FATESTCD = "MAXSEV"
)
)
adface <- derive_extreme_records(
dataset = adface,
dataset_add = adface,
filter_add = FAOBJ %in% c("REDNESS", "SWELLING") & FATESTCD == "DIAMETER" & ANL01FL == "Y",
by_vars = exprs(USUBJID, FAOBJ, FALNKGRP),
order = exprs(AVAL),
check_type = "none",
mode = "last",
set_values_to = exprs(
FATEST = "Maximum Diameter",
FATESTCD = "MAXDIAM"
)
)
adface <- derive_extreme_records(
dataset = adface,
dataset_add = adface,
filter_add = FAOBJ == "FEVER" & ANL01FL == "Y",
by_vars = exprs(USUBJID, FAOBJ, ATPTREF),
order = exprs(VSSTRESN),
check_type = "none",
mode = "last",
set_values_to = exprs(
FATEST = "Maximum Temperature",
FATESTCD = "MAXTEMP"
)
)| USUBJID | FAOBJ | ATPTREF | FATESTCD | FATEST | AVAL | AVALC |
|---|---|---|---|---|---|---|
| ABC-1001 | FATIGUE | VACCINATION 1 | MAXSEV | Maximum Severity | 1 | MILD |
| ABC-1001 | NEW OR WORSENED JOINT PAIN | VACCINATION 1 | MAXSEV | Maximum Severity | 1 | MILD |
| ABC-1001 | NEW OR WORSENED MUSCLE PAIN | VACCINATION 1 | MAXSEV | Maximum Severity | 1 | MILD |
| ABC-1001 | PAIN AT INJECTION SITE | VACCINATION 1 | MAXSEV | Maximum Severity | 2 | MODERATE |
| ABC-1001 | REDNESS | VACCINATION 1 | MAXSEV | Maximum Severity | 2 | MODERATE |
| ABC-1001 | SWELLING | VACCINATION 1 | MAXSEV | Maximum Severity | 2 | MODERATE |
| ABC-1002 | HEADACHE | VACCINATION 1 | MAXSEV | Maximum Severity | 2 | MODERATE |
| ABC-1002 | HEADACHE | VACCINATION 2 | MAXSEV | Maximum Severity | 1 | MILD |
| ABC-1002 | PAIN AT INJECTION SITE | VACCINATION 2 | MAXSEV | Maximum Severity | 1 | MILD |
| ABC-1002 | REDNESS | VACCINATION 1 | MAXSEV | Maximum Severity | 1 | MILD |
This call returns the input dataset with maximum records added for the severity, diameter, temperature.
PARAMCD, PARAM,
PARAMN, PARCAT1To assign parameter level values such as PARAMCD,
PARAM, PARAMN, etc., a lookup needs to be
created to join to the source data. PARCAT1,
PARCAT2 variables are assigned from FACAT,
FASCAT variables.
For example, when creating ADFACE dataset, a lookup
based on the SDTM --TESTCD value can be created:
FATESTCD |
PARAMCD |
PARAMN |
FATEST |
|---|---|---|---|
| SEV | SEVREDN | 1 | Severity |
| DIAMETER | DIARE | 2 | Diameter |
| MAXDIAM | MDIRE | 3 | Maximum Diameter cm |
| MAXTEMP | MAXTEMP | 4 | Maximum Temperature |
| MAXSEV | MAXSWEL | 5 | Maximum Severity |
| OCCUR | OCFEVER | 6 | Occurrence Indicator |
| OCCUR | OCERYTH | 7 | Occurrence Indicator |
| SEV | SEVPAIN | 8 | Severity |
| OCCUR | OCPAIN | 9 | Occurrence Indicator |
| OCCUR | OCSWEL | 10 | Occurrence Indicator |
This lookup can now be joined to the source data:
adface <- derive_vars_params(
dataset = adface,
lookup_dataset = lookup_dataset,
merge_vars = exprs(PARAMCD, PARAMN)
)| USUBJID | FAOBJ | ATPTREF | FATEST | PARAMCD | PARAM | PARAMN | PARCAT1 | PARCAT2 |
|---|---|---|---|---|---|---|---|---|
| ABC-1001 | REDNESS | VACCINATION 1 | Severity/Intensity | SEVREDN | Redness severity/intensity deltoid muscle left | 1 | REACTOGENICITY | ADMINISTRATION SITE |
| ABC-1001 | SWELLING | VACCINATION 1 | Severity/Intensity | SEVSWEL | Swelling severity/intensity deltoid muscle left | 22 | REACTOGENICITY | ADMINISTRATION SITE |
| ABC-1001 | SWELLING | VACCINATION 1 | Severity/Intensity | SEVSWEL | Swelling severity/intensity deltoid muscle left | 22 | REACTOGENICITY | ADMINISTRATION SITE |
| ABC-1001 | SWELLING | VACCINATION 1 | Severity/Intensity | SEVSWEL | Swelling severity/intensity deltoid muscle left | 22 | REACTOGENICITY | ADMINISTRATION SITE |
| ABC-1001 | SWELLING | VACCINATION 1 | Severity/Intensity | SEVSWEL | Swelling severity/intensity deltoid muscle left | 22 | REACTOGENICITY | ADMINISTRATION SITE |
| ABC-1001 | SWELLING | VACCINATION 1 | Severity/Intensity | SEVSWEL | Swelling severity/intensity deltoid muscle left | 22 | REACTOGENICITY | ADMINISTRATION SITE |
| ABC-1001 | SWELLING | VACCINATION 1 | Severity/Intensity | SEVSWEL | Swelling severity/intensity deltoid muscle left | 22 | REACTOGENICITY | ADMINISTRATION SITE |
| ABC-1001 | SWELLING | VACCINATION 1 | Severity/Intensity | SEVSWEL | Swelling severity/intensity deltoid muscle left | 22 | REACTOGENICITY | ADMINISTRATION SITE |
| ABC-1002 | REDNESS | VACCINATION 1 | Severity/Intensity | SEVREDN | Redness severity/intensity deltoid muscle left | 1 | REACTOGENICITY | ADMINISTRATION SITE |
| ABC-1002 | REDNESS | VACCINATION 2 | Severity/Intensity | SEVREDN | Redness severity/intensity deltoid muscle left | 1 | REACTOGENICITY | ADMINISTRATION SITE |
PARAMCD will be always derived from lookup dataset
whereas PARAMN, PARAM, PARCAT1,
PARCAT2 can be either derived from lookup dataset if
mentioned in merge_vars argument or derived in the
function.
The function derive_vars_max_flag() is used to derive
flag variable for the maximum values of an event.
flag1 - Flags the maximum value per subject per event
per Vaccination. flag2 - Flags the maximum value per
subject per event for Overall.
adface <- derive_vars_max_flag(
dataset = adface,
flag1 = "ANL02FL",
flag2 = "ANL03FL"
)
#> Joining with `by = join_by(STUDYID, DOMAIN, USUBJID, FASEQ, FALNKGRP, PARAM,
#> FALAT, FALNKID, FALOC, FATESTCD, FATEST, FAOBJ, FACAT, FASCAT, FAEVAL, FAORRES,
#> FAORRESU, EPOCH, FADTC, FADY, FATPT, FATPTNUM, FATPTREF, FARFTDTC, FAEVLINT,
#> FAEVINTX, FASTAT, FAREASND, FASTRESC, FASTRESN, FASTRESU, CLTYP, RFSTDTC,
#> RFENDTC, VSSTRESN, ADT, ADTM, ADY, APERIOD, APERSDT, APEREDT, TRTA, TRTP,
#> AVALC, AVAL, ATPTREF, ATPT, ATPTN, ANL01FL, PARAMCD, PARAMN, PARCAT1, PARCAT2)`
#> Joining with `by = join_by(STUDYID, DOMAIN, USUBJID, FASEQ, FALNKGRP, PARAM,
#> FALAT, FALNKID, FALOC, FATESTCD, FATEST, FAOBJ, FACAT, FASCAT, FAEVAL, FAORRES,
#> FAORRESU, EPOCH, FADTC, FADY, FATPT, FATPTNUM, FATPTREF, FARFTDTC, FAEVLINT,
#> FAEVINTX, FASTAT, FAREASND, FASTRESC, FASTRESN, FASTRESU, CLTYP, RFSTDTC,
#> RFENDTC, VSSTRESN, ADT, ADTM, ADY, APERIOD, APERSDT, APEREDT, TRTA, TRTP,
#> AVALC, AVAL, ATPTREF, ATPT, ATPTN, ANL01FL, PARAMCD, PARAMN, PARCAT1, PARCAT2,
#> ANL02FL)`| USUBJID | FAOBJ | ATPTREF | AVAL | AVALC | ANL01FL | ANL02FL |
|---|---|---|---|---|---|---|
| ABC-1001 | REDNESS | VACCINATION 1 | 2 | MODERATE | Y | Y |
| ABC-1001 | SWELLING | VACCINATION 1 | 0 | NONE | Y | NA |
| ABC-1001 | SWELLING | VACCINATION 1 | 2 | MODERATE | Y | Y |
| ABC-1001 | SWELLING | VACCINATION 1 | 1 | MILD | Y | NA |
| ABC-1001 | SWELLING | VACCINATION 1 | 1 | MILD | Y | NA |
| ABC-1001 | SWELLING | VACCINATION 1 | 1 | MILD | Y | NA |
| ABC-1001 | SWELLING | VACCINATION 1 | 1 | MILD | Y | NA |
| ABC-1001 | SWELLING | VACCINATION 1 | 0 | NONE | Y | NA |
| ABC-1002 | REDNESS | VACCINATION 1 | 1 | MILD | Y | Y |
| ABC-1002 | REDNESS | VACCINATION 2 | 1 | MILD | Y | Y |
This call would return the input dataset with columns
ANL02FL, ANL03FL added by default. This
function allows the user to change the name of the new variables
created.
The function derive_vars_event_flag() is used to derive
flag variable for the events that occurred.
new_var1 - Flags the record if at least one of the event
occurred within the observation period. new_var2 - Flags
the record if the event is occurred.
adface <- derive_vars_event_flag(
dataset = adface,
by_vars = exprs(USUBJID, FAOBJ, ATPTREF),
aval_cutoff = 2.5,
new_var1 = EVENTFL,
new_var2 = EVENTDFL
)| USUBJID | FAOBJ | ATPTREF | AVAL | AVALC | EVENTFL | EVENTDFL |
|---|---|---|---|---|---|---|
| ABC-1001 | REDNESS | VACCINATION 1 | 2 | MODERATE | Y | Y |
| ABC-1001 | SWELLING | VACCINATION 1 | 0 | NONE | Y | N |
| ABC-1001 | SWELLING | VACCINATION 1 | 2 | MODERATE | Y | Y |
| ABC-1001 | SWELLING | VACCINATION 1 | 1 | MILD | Y | Y |
| ABC-1001 | SWELLING | VACCINATION 1 | 1 | MILD | Y | Y |
| ABC-1001 | SWELLING | VACCINATION 1 | 1 | MILD | Y | Y |
| ABC-1001 | SWELLING | VACCINATION 1 | 1 | MILD | Y | Y |
| ABC-1001 | SWELLING | VACCINATION 1 | 0 | NONE | Y | N |
| ABC-1002 | REDNESS | VACCINATION 1 | 1 | MILD | Y | Y |
| ABC-1002 | REDNESS | VACCINATION 2 | 1 | MILD | Y | Y |
This call would return the input dataset with columns
EVENTFL, EVENTDFL added by default. This
function allows the user to change the name of the new variables created
as well.
In this step, we will remove values for all the derived records in SDTM variables.
If needed, the other ADSL variables can now be added.
List of ADSL variables already merged held in vector
adsl_vars
adsl <- adsl %>%
convert_blanks_to_na() %>%
filter(!is.na(USUBJID))
adface <- derive_vars_merged(
dataset = adface,
dataset_add = select(adsl, !!!negate_vars(adsl_vars)),
by_vars = get_admiral_option("subject_keys")
)| USUBJID | TRTSDT | TRTEDT | AGE | SEX |
|---|---|---|---|---|
| ABC-1001 | 2021-11-03 | 2021-12-30 | 74 | F |
| ABC-1001 | 2021-11-03 | 2021-12-30 | 74 | F |
| ABC-1001 | 2021-11-03 | 2021-12-30 | 74 | F |
| ABC-1001 | 2021-11-03 | 2021-12-30 | 74 | F |
| ABC-1001 | 2021-11-03 | 2021-12-30 | 74 | F |
| ABC-1001 | 2021-11-03 | 2021-12-30 | 74 | F |
| ABC-1001 | 2021-11-03 | 2021-12-30 | 74 | F |
| ABC-1001 | 2021-11-03 | 2021-12-30 | 74 | F |
| ABC-1002 | 2021-10-07 | 2021-12-16 | 70 | F |
| ABC-1002 | 2021-10-07 | 2021-12-16 | 70 | F |
| ADaM | Sample Code |
|---|---|
| ADFACE | ad_adface.R |