Nothing
# compute_bmi ----
## Test 1: BMI calculation - single height & weight values ----
test_that("compute_bmi Test 1: BMI calculation - single height & weight values", {
# Expected values are taken from the Center of Disease Control and Prevention's
# (CDC) 'Adult BMI Calculator' at
# https://cdc.gov/healthyweight/assessing/bmi/adult_bmi/metric_bmi_calculator/bmi_calculator.html
expect_equal(round(compute_bmi(height = 180, weight = 75), 3L), 23.148)
})
## Test 2: compute_bmi BMI calculation - height & weight vectors ----
test_that("compute_bmi Test 2: compute_bmi BMI calculation - height & weight vectors", {
expect_equal(
round(compute_bmi(height = c(180, 200), weight = c(75, 100)), 3L),
c(23.148, 25)
)
})
## Test 3: BMI height & weight vectors - missing values ----
test_that("compute_bmi Test 3: BMI height & weight vectors - missing values", {
expect_equal(
compute_bmi(height = c(NA, 200, 0), weight = c(75, NA, 75)),
c(NA_real_, NA_real_, NA_real_)
)
})
# compute_bsa ----
## compute_bsa: Mosteller method ----
# sqrt (Height x Weight / 3600)
## Test 4: Mosteller method - single height & weight values ----
test_that("compute_bsa Test 4: Mosteller method - single height & weight values", {
expect_equal(
round(compute_bsa(height = 170, weight = 75, method = "Mosteller"), 3L),
1.882
)
})
## Test 5: Mosteller method - height & weight vectors ----
test_that("compute_bsa Test 5: Mosteller method - height & weight vectors", {
expect_equal(
round(compute_bsa(height = c(170, 185), weight = c(75, 90), method = "Mosteller"), 3L),
c(1.882, 2.151)
)
})
## Test 6: Mosteller method - height & weight vectors - missing values ----
test_that("compute_bsa Test 6: Mosteller method - height & weight vectors - missing values", {
expect_equal(
compute_bsa(height = c(NA, 185), weight = c(75, NA), method = "Mosteller"),
c(NA_real_, NA_real_)
)
})
## compute_bsa: DuBois-DuBois method ----
# FORMULA : 0.20247 x (HGT/100)^0.725 x WGT^0.425
## Test 7: DuBois-DuBois method - single height & weight values ----
test_that("compute_bsa Test 7: DuBois-DuBois method - single height & weight values", {
expect_equal(
round(compute_bsa(height = 170, weight = 75, method = "DuBois-DuBois"), 3L),
1.864
)
})
## Test 8: DuBois-DuBois method - height & weight vectors ----
test_that("compute_bsa Test 8: DuBois-DuBois method - height & weight vectors", {
expect_equal(
round(compute_bsa(height = c(170, 185), weight = c(75, 90), method = "DuBois-DuBois"), 3L),
c(1.864, 2.141)
)
})
## Test 9: DuBois-DuBois method - hgt and wgt vectors - missing values ----
test_that("compute_bsa Test 9: DuBois-DuBois method - hgt and wgt vectors - missing values", {
expect_equal(
compute_bsa(height = c(NA, 185), weight = c(75, NA), method = "DuBois-DuBois"),
c(NA_real_, NA_real_)
)
})
## compute_bsa: Haycock method (Test 03.xx) ----
# 0.024265 x HGT^0.3964 x WGT^0.5378
## Test 10: Haycock method - single height & weight values ----
test_that("compute_bsa Test 10: Haycock method - single height & weight values", {
expect_equal(
round(compute_bsa(height = 170, weight = 75, method = "Haycock"), 3L),
1.895
)
})
## Test 11: Haycock method - height & weight vectors ----
test_that("compute_bsa Test 11: Haycock method - height & weight vectors", {
expect_equal(
round(compute_bsa(height = c(170, 185), weight = c(75, 90), method = "Haycock"), 3L),
c(1.895, 2.161)
)
})
## Test 12: Haycock method - height & weight vectors - missing values ----
test_that("compute_bsa Test 12: Haycock method - height & weight vectors - missing values", {
expect_equal(
compute_bsa(height = c(NA, 185), weight = c(75, NA), method = "Haycock"),
c(NA_real_, NA_real_)
)
})
## compute_bsa: Gehan-George method ----
# 0.0235 x HGT^0.42246 x WGT^0.51456
## Test 13: Gehan-George method - single height & weight values ----
test_that("compute_bsa Test 13: Gehan-George method - single height & weight values", {
expect_equal(
round(compute_bsa(height = 170, weight = 75, method = "Gehan-George"), 3L),
1.897
)
})
## Test 14: Gehan-George method - height & weight vectors ----
test_that("compute_bsa Test 14: Gehan-George method - height & weight vectors", {
expect_equal(
round(compute_bsa(height = c(170, 185), weight = c(75, 90), method = "Gehan-George"), 3L),
c(1.897, 2.16)
)
})
## Test 15: Gehan-George method - height & weight vectors - missing values ----
test_that("compute_bsa Test 15: Gehan-George method - height & weight vectors - missing values", {
expect_equal(
compute_bsa(height = c(NA, 185), weight = c(75, NA), method = "Gehan-George"),
c(NA_real_, NA_real_)
)
})
## compute_bsa: Boyd method ----
# 0.0003207 x (HGT^0.3) x (1000 x WGT)^(0.7285 - (0.0188 x log10(1000 x WGT)))
## Test 16: Boyd method - single height & weight values ----
test_that("compute_bsa Test 16: Boyd method - single height & weight values", {
expect_equal(
round(compute_bsa(height = 170, weight = 75, method = "Boyd"), 3L),
1.905
)
})
## Test 17: Boyd method - height & weight vectors ----
test_that("compute_bsa Test 17: Boyd method - height & weight vectors", {
expect_equal(
round(compute_bsa(height = c(170, 185), weight = c(75, 90), method = "Boyd"), 3L),
c(1.905, 2.158)
)
})
## Test 18: Boyd method - height & weight vectors - missing values ----
test_that("compute_bsa Test 18: Boyd method - height & weight vectors - missing values", {
expect_equal(
compute_bsa(height = c(NA, 185), weight = c(75, NA), method = "Boyd"),
c(NA_real_, NA_real_)
)
})
## compute_bsa: Fujimoto method ----
# 0.008883 x HGT^0.663 x WGT^0.444
## Test 19: Fujimoto method - single height & weight values ----
test_that("compute_bsa Test 19: Fujimoto method - single height & weight values", {
expect_equal(
round(compute_bsa(height = 170, weight = 75, method = "Fujimoto"), 3L),
1.819
)
})
## Test 20: Fujimoto method - height & weight vectors ----
test_that("compute_bsa Test 20: Fujimoto method - height & weight vectors", {
expect_equal(
round(compute_bsa(height = c(170, 185), weight = c(75, 90), method = "Fujimoto"), 3L),
c(1.819, 2.086)
)
})
## Test 21: Fujimoto method - height & weight vectors - missing values ----
test_that("compute_bsa Test 21: Fujimoto method - height & weight vectors - missing values", {
expect_equal(
compute_bsa(height = c(NA, 185), weight = c(75, NA), method = "Fujimoto"),
c(NA_real_, NA_real_)
)
})
## compute_bsa: Takahira method ----
# 0.007241 x HGT^0.725 x WGT^0.425
## Test 22: Takahira method - single height & weight values ----
test_that("compute_bsa Test 22: Takahira method - single height & weight values", {
expect_equal(
round(compute_bsa(height = 170, weight = 75, method = "Takahira"), 3L),
1.878
)
})
## Test 23: Takahira method - height & weight vectors ----
test_that("compute_bsa Test 23: Takahira method - height & weight vectors", {
expect_equal(
round(compute_bsa(height = c(170, 185), weight = c(75, 90), method = "Takahira"), 3L),
c(1.878, 2.158)
)
})
## Test 24: Takahira method - height & weight vectors - missing values ----
test_that("compute_bsa Test 24: Takahira method - height & weight vectors - missing values", {
expect_equal(
compute_bsa(height = c(NA, 185), weight = c(75, NA), method = "Takahira"),
c(NA_real_, NA_real_)
)
})
## compute_bsa: Check error messages ----
## Test 25: an error is issued if an invalid method is specified ----
test_that("compute_bsa Test 25: an error is issued if an invalid method is specified", {
expect_error(
compute_bsa(height = c(170, 185), weight = c(75, 90), method = "unknown-method"),
paste(
"`method` must be one of 'Mosteller', 'DuBois-DuBois', 'Haycock', 'Gehan-George',",
"'Boyd', 'Fujimoto' or 'Takahira' but is 'unknown-method'"
)
)
})
# compute_map ----
## compute_map: DBP & SBP ----
# ((2 x DBP) + SBP) / 3
## Test 26: MAP based on diastolic & systolic BP - single values ----
test_that("compute_map Test 26: MAP based on diastolic & systolic BP - single values", {
expect_equal(round(compute_map(diabp = 51, sysbp = 121), 3L), 74.333)
})
## Test 27: MAP based on diastolic & systolic BP - vectors ----
test_that("compute_map Test 27: MAP based on diastolic & systolic BP - vectors", {
expect_equal(
round(compute_map(diabp = c(51, 61), sysbp = c(121, 141)), 3L), c(74.333, 87.667)
)
})
## Test 28: MAP based on diastolic & systolic BP with missing values ----
test_that("compute_map Test 28: MAP based on diastolic & systolic BP with missing values", {
expect_equal(
compute_map(diabp = c(NA, 61), sysbp = c(121, NA)), c(NA_real_, NA_real_)
)
})
## compute_map: DBP, SBP & HR ----
# DBP + 0.01 x exp(4.14 - 40.74 / PULSE) x (SBP - DBP)
## Test 29: MAP based on DBP & SBP & heart rate - single values ----
test_that("compute_map Test 29: MAP based on DBP & SBP & heart rate - single values", {
expect_equal(
round(compute_map(diabp = 51, sysbp = 121, hr = 59), 3L), 73.039
)
})
## Test 30: MAP based on diastolic, systolic BP & heart rate - vectors ----
test_that("compute_map Test 30: MAP based on diastolic, systolic BP & heart rate - vectors", {
expect_equal(
round(compute_map(diabp = c(51, 91), sysbp = c(121, 101), hr = c(59, 62)), 3L),
c(73.039, 94.255)
)
})
## Test 31: MAP based on DBP, SBP & heart rate - with missing values ----
test_that("compute_map Test 31: MAP based on DBP, SBP & heart rate - with missing values", {
expect_equal(
compute_map(diabp = c(NA, 61, 51), sysbp = c(121, NA, 121), hr = c(59, 62, NA)),
c(NA_real_, NA_real_, NA_real_)
)
})
# derive_param_bmi ----
## derive_param_bmi: Error checks ----
## Test 32: BMI parameter NOT added - wrong hgt unit ----
test_that("derive_param_bmi Test 32: BMI parameter NOT added - wrong hgt unit", {
input <- tibble::tribble(
~USUBJID, ~PARAMCD, ~PARAM, ~VISIT, ~VSSTRESU, ~AVAL,
# Wrong unit for HEIGHT should be cm
"01-701-1015", "HEIGHT", "Height (cm)", "BASELINE", "m", 170,
"01-701-1015", "WEIGHT", "Weight (kg)", "BASELINE", "kg", 85,
)
expect_error(
derive_param_bmi(input, by_vars = exprs(USUBJID, VISIT), get_unit_expr = VSSTRESU),
paste(
"It is expected that 'HEIGHT' is measured in 'cm'.\nIn the",
"input dataset it is measured in 'm'."
)
)
})
## Test 33: BMI parameter NOT added - wrong wgt unit ----
test_that("derive_param_bmi Test 33: BMI parameter NOT added - wrong wgt unit", {
input <- tibble::tribble(
~USUBJID, ~PARAMCD, ~PARAM, ~VISIT, ~VSSTRESU, ~AVAL,
"01-701-1015", "HEIGHT", "Height (cm)", "BASELINE", "cm", 170,
# Wrong unit for WEIGHT should be kg
"01-701-1015", "WEIGHT", "Weight (kg)", "BASELINE", "g", 85,
)
expect_error(
derive_param_bmi(input, by_vars = exprs(USUBJID, VISIT), get_unit_expr = VSSTRESU),
paste(
"It is expected that 'WEIGHT' is measured in 'kg'.\nIn the",
"input dataset it is measured in 'g'."
)
)
})
## Test 34: BMI parameter NOT added - multiple unit for wgt ----
test_that("derive_param_bmi Test 34: BMI parameter NOT added - multiple unit for wgt", {
input <- tibble::tribble(
~USUBJID, ~PARAMCD, ~PARAM, ~VISIT, ~VSSTRESU, ~AVAL,
"01-701-1015", "HEIGHT", "Height (cm)", "BASELINE", "cm", 170,
# Multiple units for WEIGHT
"01-701-1015", "WEIGHT", "Weight (kg)", "BASELINE", "kg", 85,
"01-701-1016", "WEIGHT", "Weight (kg)", "BASELINE", "g", 8500,
)
expect_error(
derive_param_bmi(input, by_vars = exprs(USUBJID, VISIT), get_unit_expr = VSSTRESU),
paste0(
"Multiple units 'kg' and 'g' found for 'WEIGHT'.",
"\nPlease review and update the units."
)
)
})
## Test 35: BMI parameter NOT added - PARAMCD not set ----
test_that("derive_param_bmi Test 35: BMI parameter NOT added - PARAMCD not set", {
input <- tibble::tribble(
~USUBJID, ~PARAMCD, ~PARAM, ~VISIT, ~VSSTRESU, ~AVAL,
"01-701-1015", "HEIGHT", "Height (cm)", "BASELINE", "cm", 170,
"01-701-1015", "WEIGHT", "Weight (kg)", "BASELINE", "kg", 85,
)
expect_error(
derive_param_bmi(
input,
by_vars = exprs(USUBJID, VISIT),
set_values_to = exprs(PARAM = "Body Mass Index"),
get_unit_expr = VSSTRESU
),
"The following required elements are missing in `set_values_to`: 'PARAMCD'"
)
})
## derive_param_bmi: No obs added ----
## Test 36: BMI parameter NOT added ----
test_that("derive_param_bmi Test 36: BMI parameter NOT added", {
expected_output <- tibble::tribble(
~USUBJID, ~PARAMCD, ~PARAM, ~VISIT, ~VSSTRESU, ~AVAL,
"01-701-1015", "HEIGHT", "Height (cm)", "BASELINE", "cm", 170,
# WEIGHT set to NA - so BMI not calculated
"01-701-1015", "WEIGHT", "Weight (kg)", "BASELINE", "kg", NA,
"01-701-1015", "WEIGHT", "Weight (kg)", "MONTH 1", "kg", 78,
# HEIGHT set to NA - so BMI not calculated
"01-701-1028", "HEIGHT", "Height (cm)", "BASELINE", "cm", NA,
"01-701-1028", "WEIGHT", "Weight (kg)", "BASELINE", "kg", 90,
"01-701-1028", "HEIGHT", "Height (cm)", "MONTH 1", "cm", 88,
)
input <- expected_output
expect_dfs_equal(
derive_param_bmi(input, by_vars = exprs(USUBJID, VISIT), get_unit_expr = VSSTRESU),
expected_output,
keys = c("USUBJID", "PARAMCD", "VISIT")
)
})
## derive_param_bmi: Obs created ----
bmi <- function(hgt, wgt) {
wgt / (hgt / 100)^2
}
## Test 37: BMI parameter is correctly added ----
test_that("derive_param_bmi Test 37: BMI parameter is correctly added", {
expected_output <- tibble::tribble(
~USUBJID, ~PARAMCD, ~PARAM, ~VISIT, ~VSSTRESU, ~AVAL,
"01-701-1015", "HEIGHT", "Height (cm)", "BASELINE", "cm", 170,
"01-701-1015", "WEIGHT", "Weight (kg)", "BASELINE", "kg", 75,
# New row added for BMI for SUBJID="01-701-1015" and VISIT="BASELINE"
# WEIGHT = 75 and HEIGHT = 170
"01-701-1015", "BMI", NA, "BASELINE", NA, bmi(170, 75),
"01-701-1015", "WEIGHT", "Weight (kg)", "MONTH 1", "kg", 78,
"01-701-1028", "HEIGHT", "Height (cm)", "BASELINE", "cm", 185,
"01-701-1028", "WEIGHT", "Weight (kg)", "BASELINE", "kg", 90,
# New row added for BMI for SUBJID="01-701-1028" and VISIT='BASELINE'
# WEIGHT = 90 and HEIGHT = 185
"01-701-1028", "BMI", NA, "BASELINE", NA, bmi(185, 90),
"01-701-1028", "WEIGHT", "Weight (kg)", "MONTH 1", "kg", 88,
)
input <- expected_output %>% filter(PARAMCD != "BMI")
expect_dfs_equal(
derive_param_bmi(input, by_vars = exprs(USUBJID, VISIT), get_unit_expr = VSSTRESU),
expected_output,
keys = c("USUBJID", "PARAMCD", "VISIT")
)
})
# Derive BMI where height is measured only once
## Test 38: Derive BMI where height is measured only once ----
test_that("derive_param_bmi Test 38: Derive BMI where height is measured only once", {
input <- tibble::tribble(
~USUBJID, ~PARAMCD, ~PARAM, ~AVAL, ~AVALU, ~VISIT,
"01-701-1015", "HEIGHT", "Height (cm)", 147.0, "cm", "SCREENING",
"01-701-1015", "WEIGHT", "Weight (kg)", 54.0, "kg", "SCREENING",
"01-701-1015", "WEIGHT", "Weight (kg)", 54.4, "kg", "BASELINE",
"01-701-1015", "WEIGHT", "Weight (kg)", 53.1, "kg", "WEEK 2",
"01-701-1028", "HEIGHT", "Height (cm)", 163.0, "cm", "SCREENING",
"01-701-1028", "WEIGHT", "Weight (kg)", 78.5, "kg", "SCREENING",
"01-701-1028", "WEIGHT", "Weight (kg)", 80.3, "kg", "BASELINE",
"01-701-1028", "WEIGHT", "Weight (kg)", 80.7, "kg", "WEEK 2"
)
expected_output <- derive_param_computed(
input,
by_vars = exprs(USUBJID, VISIT),
parameters = "WEIGHT",
set_values_to = exprs(
AVAL = AVAL.WEIGHT / (AVAL.HEIGHT / 100)^2,
PARAMCD = "BMI",
PARAM = "Body Mass Index (kg/m^2)",
AVALU = "kg/m^2"
),
constant_parameters = c("HEIGHT"),
constant_by_vars = exprs(USUBJID)
)
expect_dfs_equal(
expected_output,
derive_param_bmi(
input,
by_vars = exprs(USUBJID, VISIT),
weight_code = "WEIGHT",
height_code = "HEIGHT",
set_values_to = exprs(
PARAMCD = "BMI",
PARAM = "Body Mass Index (kg/m^2)",
AVALU = "kg/m^2"
),
get_unit_expr = extract_unit(PARAM),
constant_by_vars = exprs(USUBJID)
),
keys = c("USUBJID", "PARAMCD", "VISIT")
)
})
# derive_param_bsa ----
## derive_param_bsa: Error checks ----
## Test 39: BSA parameter NOT added - wrong unit for height ----
test_that("derive_param_bsa Test 39: BSA parameter NOT added - wrong unit for height", {
input <- tibble::tribble(
~USUBJID, ~PARAMCD, ~PARAM, ~VISIT, ~VSSTRESU, ~AVAL,
# Wrong unit for HEIGHT should be cm
"01-701-1015", "HEIGHT", "Height (cm)", "BASELINE", "m", 170,
"01-701-1015", "WEIGHT", "Weight (kg)", "BASELINE", "kg", 85,
)
expect_error(
derive_param_bsa(
input,
by_vars = exprs(USUBJID, VISIT),
method = "Mosteller",
get_unit_expr = VSSTRESU
),
paste(
"It is expected that 'HEIGHT' is measured in 'cm'.\nIn the",
"input dataset it is measured in 'm'."
)
)
})
## Test 40: BSA parameter NOT added - wrong unit for weight ----
test_that("derive_param_bsa Test 40: BSA parameter NOT added - wrong unit for weight", {
input <- tibble::tribble(
~USUBJID, ~PARAMCD, ~PARAM, ~VISIT, ~VSSTRESU, ~AVAL,
"01-701-1015", "HEIGHT", "Height (cm)", "BASELINE", "cm", 170,
# Wrong unit for WEIGHT should be kg
"01-701-1015", "WEIGHT", "Weight (kg)", "BASELINE", "g", 85,
)
expect_error(
derive_param_bsa(
input,
by_vars = exprs(USUBJID, VISIT),
method = "Mosteller",
get_unit_expr = VSSTRESU
),
paste(
"It is expected that 'WEIGHT' is measured in 'kg'.\nIn the",
"input dataset it is measured in 'g'."
)
)
})
## Test 41: BSA parameter NOT added - multiple unit for weight ----
test_that("derive_param_bsa Test 41: BSA parameter NOT added - multiple unit for weight", {
input <- tibble::tribble(
~USUBJID, ~PARAMCD, ~PARAM, ~VISIT, ~VSSTRESU, ~AVAL,
"01-701-1015", "HEIGHT", "Height (cm)", "BASELINE", "cm", 170,
# Multiple units for WEIGHT
"01-701-1015", "WEIGHT", "Weight (kg)", "BASELINE", "kg", 85,
"01-701-1016", "WEIGHT", "Weight (kg)", "BASELINE", "g", 8500,
)
expect_error(
derive_param_bsa(
input,
by_vars = exprs(USUBJID, VISIT),
method = "Mosteller",
get_unit_expr = VSSTRESU
),
paste0(
"Multiple units 'kg' and 'g' found for 'WEIGHT'.",
"\nPlease review and update the units."
)
)
})
## Test 42: BSA parameter NOT added - PARAMCD not set ----
test_that("derive_param_bsa Test 42: BSA parameter NOT added - PARAMCD not set", {
input <- tibble::tribble(
~USUBJID, ~PARAMCD, ~PARAM, ~VISIT, ~VSSTRESU, ~AVAL,
"01-701-1015", "HEIGHT", "Height (cm)", "BASELINE", "cm", 170,
"01-701-1015", "WEIGHT", "Weight (kg)", "BASELINE", "kg", 85,
)
expect_error(
derive_param_bsa(
input,
by_vars = exprs(USUBJID, VISIT),
method = "Mosteller",
set_values_to = exprs(PARAM = "Body Surface Area"),
get_unit_expr = VSSTRESU
),
paste(
"The following required elements are missing in",
"`set_values_to`: 'PARAMCD'"
)
)
})
## derive_param_bsa: No obs added ----
## Test 43: BSA parameter NOT added ----
test_that("derive_param_bsa Test 43: BSA parameter NOT added", {
expected_output <- tibble::tribble(
~USUBJID, ~PARAMCD, ~PARAM, ~VISIT, ~VSSTRESU, ~AVAL,
"01-701-1015", "HEIGHT", "Height (cm)", "BASELINE", "cm", 170,
# WEIGHT set to NA - so BSA not calculated
"01-701-1015", "WEIGHT", "Weight (kg)", "BASELINE", "kg", NA,
"01-701-1015", "WEIGHT", "Weight (kg)", "MONTH 1", "kg", 78,
# HEIGHT set to NA - so BSA not calculated
"01-701-1028", "HEIGHT", "Height (cm)", "BASELINE", "cm", NA,
"01-701-1028", "WEIGHT", "Weight (kg)", "BASELINE", "kg", 90,
"01-701-1028", "HEIGHT", "Height (cm)", "MONTH 1", "cm", 88,
)
input <- expected_output
expect_dfs_equal(
derive_param_bsa(
input,
by_vars = exprs(USUBJID, VISIT),
method = "Mosteller",
get_unit_expr = VSSTRESU
),
expected_output,
keys = c("USUBJID", "PARAMCD", "VISIT")
)
})
## derive_param_bsa: Obs created ----
mosteller <- function(hgt, wgt) {
sqrt(hgt * wgt / 3600)
}
## Test 44: BSA parameter (Mosteller Method) is correctly added ----
test_that("derive_param_bsa Test 44: BSA parameter (Mosteller Method) is correctly added", {
expected_output <- tibble::tribble(
~USUBJID, ~PARAMCD, ~PARAM, ~VISIT, ~VSSTRESU, ~AVAL,
"01-701-1015", "HEIGHT", "Height (cm)", "BASELINE", "cm", 170,
"01-701-1015", "WEIGHT", "Weight (kg)", "BASELINE", "kg", 75,
# New row added for BMI for SUBJID="01-701-1015" and VISIT="BASELINE"
# WEIGHT = 75 and HEIGHT = 170
"01-701-1015", "BSA", NA, "BASELINE", NA, mosteller(170, 75),
"01-701-1015", "WEIGHT", "Weight (kg)", "MONTH 1", "kg", 78,
"01-701-1028", "HEIGHT", "Height (cm)", "BASELINE", "cm", 185,
"01-701-1028", "WEIGHT", "Weight (kg)", "BASELINE", "kg", 90,
# New row added for BMI for SUBJID="01-701-1028" and VISIT='BASELINE'
# WEIGHT = 90 and HEIGHT = 185
"01-701-1028", "BSA", NA, "BASELINE", NA, mosteller(185, 90),
"01-701-1028", "WEIGHT", "Weight (kg)", "MONTH 1", "kg", 88,
)
input <- expected_output %>% filter(PARAMCD != "BSA")
expect_dfs_equal(
derive_param_bsa(input,
by_vars = exprs(USUBJID, VISIT),
method = "Mosteller",
get_unit_expr = VSSTRESU
),
expected_output,
keys = c("USUBJID", "PARAMCD", "VISIT")
)
})
dubois <- function(hgt, wgt) {
0.20247 * (hgt / 100)^0.725 * wgt^0.425
}
## Test 45: BSA parameter (DuBois-DuBois method) is correctly added ----
test_that("derive_param_bsa Test 45: BSA parameter (DuBois-DuBois method) is correctly added", {
expected_output <- tibble::tribble(
~USUBJID, ~PARAMCD, ~PARAM, ~VISIT, ~VSSTRESU, ~AVAL,
"01-701-1015", "HEIGHT", "Height (cm)", "BASELINE", "cm", 170,
"01-701-1015", "WEIGHT", "Weight (kg)", "BASELINE", "kg", 75,
# New row added for BMI for SUBJID="01-701-1015" and VISIT="BASELINE"
# WEIGHT = 75 and HEIGHT = 170
"01-701-1015", "BSA", NA, "BASELINE", NA, dubois(170, 75),
"01-701-1015", "WEIGHT", "Weight (kg)", "MONTH 1", "kg", 78,
"01-701-1028", "HEIGHT", "Height (cm)", "BASELINE", "cm", 185,
"01-701-1028", "WEIGHT", "Weight (kg)", "BASELINE", "kg", 90,
# New row added for BMI for SUBJID="01-701-1028" and VISIT='BASELINE'
# WEIGHT = 90 and HEIGHT = 185
"01-701-1028", "BSA", NA, "BASELINE", NA, dubois(185, 90),
"01-701-1028", "WEIGHT", "Weight (kg)", "MONTH 1", "kg", 88,
)
input <- expected_output %>% filter(PARAMCD != "BSA")
expect_dfs_equal(
derive_param_bsa(
input,
by_vars = exprs(USUBJID, VISIT),
method = "DuBois-DuBois",
get_unit_expr = VSSTRESU
),
expected_output,
keys = c("USUBJID", "PARAMCD", "VISIT")
)
})
haycock <- function(hgt, wgt) {
0.024265 * hgt^0.3964 * wgt^0.5378
}
## Test 46: BSA parameter (Haycock method) is correctly added ----
test_that("derive_param_bsa Test 46: BSA parameter (Haycock method) is correctly added", {
expected_output <- tibble::tribble(
~USUBJID, ~PARAMCD, ~PARAM, ~VISIT, ~VSSTRESU, ~AVAL,
"01-701-1015", "HEIGHT", "Height (cm)", "BASELINE", "cm", 170,
"01-701-1015", "WEIGHT", "Weight (kg)", "BASELINE", "kg", 75,
# New row added for BMI for SUBJID="01-701-1015" and VISIT="BASELINE"
# WEIGHT = 75 and HEIGHT = 170
"01-701-1015", "BSA", NA, "BASELINE", NA, haycock(170, 75),
"01-701-1015", "WEIGHT", "Weight (kg)", "MONTH 1", "kg", 78,
"01-701-1028", "HEIGHT", "Height (cm)", "BASELINE", "cm", 185,
"01-701-1028", "WEIGHT", "Weight (kg)", "BASELINE", "kg", 90,
# New row added for BMI for SUBJID="01-701-1028" and VISIT='BASELINE'
# WEIGHT = 90 and HEIGHT = 185
"01-701-1028", "BSA", NA, "BASELINE", NA, haycock(185, 90),
"01-701-1028", "WEIGHT", "Weight (kg)", "MONTH 1", "kg", 88,
)
input <- expected_output %>% filter(PARAMCD != "BSA")
expect_dfs_equal(
derive_param_bsa(input,
by_vars = exprs(USUBJID, VISIT),
method = "Haycock",
get_unit_expr = VSSTRESU
),
expected_output,
keys = c("USUBJID", "PARAMCD", "VISIT")
)
})
gehan <- function(hgt, wgt) {
0.0235 * hgt^0.42246 * wgt^0.51456
}
## Test 47: BSA parameter (Gehan-George method) is correctly added ----
test_that("derive_param_bsa Test 47: BSA parameter (Gehan-George method) is correctly added", {
expected_output <- tibble::tribble(
~USUBJID, ~PARAMCD, ~PARAM, ~VISIT, ~VSSTRESU, ~AVAL,
"01-701-1015", "HEIGHT", "Height (cm)", "BASELINE", "cm", 170,
"01-701-1015", "WEIGHT", "Weight (kg)", "BASELINE", "kg", 75,
# New row added for BMI for SUBJID="01-701-1015" and VISIT="BASELINE"
# WEIGHT = 75 and HEIGHT = 170
"01-701-1015", "BSA", NA, "BASELINE", NA, gehan(170, 75),
"01-701-1015", "WEIGHT", "Weight (kg)", "MONTH 1", "kg", 78,
"01-701-1028", "HEIGHT", "Height (cm)", "BASELINE", "cm", 185,
"01-701-1028", "WEIGHT", "Weight (kg)", "BASELINE", "kg", 90,
# New row added for BMI for SUBJID="01-701-1028" and VISIT='BASELINE'
# WEIGHT = 90 and HEIGHT = 185
"01-701-1028", "BSA", NA, "BASELINE", NA, gehan(185, 90),
"01-701-1028", "WEIGHT", "Weight (kg)", "MONTH 1", "kg", 88,
)
input <- expected_output %>% filter(PARAMCD != "BSA")
expect_dfs_equal(
derive_param_bsa(
input,
by_vars = exprs(USUBJID, VISIT),
method = "Gehan-George",
get_unit_expr = VSSTRESU
),
expected_output,
keys = c("USUBJID", "PARAMCD", "VISIT")
)
})
boyd <- function(hgt, wgt) {
0.0003207 * (hgt^0.3) * (1000 * wgt)^(0.7285 - (0.0188 * log10(1000 * wgt))) # nolint
}
## Test 48: BSA parameter (Boyd method) is correctly added ----
test_that("derive_param_bsa Test 48: BSA parameter (Boyd method) is correctly added", {
expected_output <- tibble::tribble(
~USUBJID, ~PARAMCD, ~PARAM, ~VISIT, ~VSSTRESU, ~AVAL,
"01-701-1015", "HEIGHT", "Height (cm)", "BASELINE", "cm", 170,
"01-701-1015", "WEIGHT", "Weight (kg)", "BASELINE", "kg", 75,
# New row added for BMI for SUBJID="01-701-1015" and VISIT="BASELINE"
# WEIGHT = 75 and HEIGHT = 170
"01-701-1015", "BSA", NA, "BASELINE", NA, boyd(170, 75),
"01-701-1015", "WEIGHT", "Weight (kg)", "MONTH 1", "kg", 78,
"01-701-1028", "HEIGHT", "Height (cm)", "BASELINE", "cm", 185,
"01-701-1028", "WEIGHT", "Weight (kg)", "BASELINE", "kg", 90,
# New row added for BMI for SUBJID="01-701-1028" and VISIT='BASELINE'
# WEIGHT = 90 and HEIGHT = 185
"01-701-1028", "BSA", NA, "BASELINE", NA, boyd(185, 90),
"01-701-1028", "WEIGHT", "Weight (kg)", "MONTH 1", "kg", 88,
)
input <- expected_output %>% filter(PARAMCD != "BSA")
expect_dfs_equal(
derive_param_bsa(input,
by_vars = exprs(USUBJID, VISIT),
method = "Boyd",
get_unit_expr = VSSTRESU
),
expected_output,
keys = c("USUBJID", "PARAMCD", "VISIT")
)
})
fujimoto <- function(hgt, wgt) {
0.008883 * hgt^0.663 * wgt^0.444
}
## Test 49: BSA parameter (Fujimoto method) is correctly added ----
test_that("derive_param_bsa Test 49: BSA parameter (Fujimoto method) is correctly added", {
expected_output <- tibble::tribble(
~USUBJID, ~PARAMCD, ~PARAM, ~VISIT, ~VSSTRESU, ~AVAL,
"01-701-1015", "HEIGHT", "Height (cm)", "BASELINE", "cm", 170,
"01-701-1015", "WEIGHT", "Weight (kg)", "BASELINE", "kg", 75,
# New row added for BMI for SUBJID="01-701-1015" and VISIT="BASELINE"
# WEIGHT = 75 and HEIGHT = 170
"01-701-1015", "BSA", NA, "BASELINE", NA, fujimoto(170, 75),
"01-701-1015", "WEIGHT", "Weight (kg)", "MONTH 1", "kg", 78,
"01-701-1028", "HEIGHT", "Height (cm)", "BASELINE", "cm", 185,
"01-701-1028", "WEIGHT", "Weight (kg)", "BASELINE", "kg", 90,
# New row added for BMI for SUBJID="01-701-1028" and VISIT='BASELINE'
# WEIGHT = 90 and HEIGHT = 185
"01-701-1028", "BSA", NA, "BASELINE", NA, fujimoto(185, 90),
"01-701-1028", "WEIGHT", "Weight (kg)", "MONTH 1", "kg", 88,
)
input <- expected_output %>% filter(PARAMCD != "BSA")
expect_dfs_equal(
derive_param_bsa(
input,
by_vars = exprs(USUBJID, VISIT),
method = "Fujimoto",
get_unit_expr = VSSTRESU
),
expected_output,
keys = c("USUBJID", "PARAMCD", "VISIT")
)
})
takahira <- function(hgt, wgt) {
0.007241 * hgt^0.725 * wgt^0.425
}
## Test 50: BSA parameter (Takahira method) is correctly added ----
test_that("derive_param_bsa Test 50: BSA parameter (Takahira method) is correctly added", {
expected_output <- tibble::tribble(
~USUBJID, ~PARAMCD, ~PARAM, ~VISIT, ~VSSTRESU, ~AVAL,
"01-701-1015", "HEIGHT", "Height (cm)", "BASELINE", "cm", 170,
"01-701-1015", "WEIGHT", "Weight (kg)", "BASELINE", "kg", 75,
# New row added for BMI for SUBJID="01-701-1015" and VISIT="BASELINE"
# WEIGHT = 75 and HEIGHT = 170
"01-701-1015", "BSA", NA, "BASELINE", NA, takahira(170, 75),
"01-701-1015", "WEIGHT", "Weight (kg)", "MONTH 1", "kg", 78,
"01-701-1028", "HEIGHT", "Height (cm)", "BASELINE", "cm", 185,
"01-701-1028", "WEIGHT", "Weight (kg)", "BASELINE", "kg", 90,
# New row added for BMI for SUBJID="01-701-1028" and VISIT='BASELINE'
# WEIGHT = 90 and HEIGHT = 185
"01-701-1028", "BSA", NA, "BASELINE", NA, takahira(185, 90),
"01-701-1028", "WEIGHT", "Weight (kg)", "MONTH 1", "kg", 88,
)
input <- expected_output %>% filter(PARAMCD != "BSA")
expect_dfs_equal(
derive_param_bsa(
input,
by_vars = exprs(USUBJID, VISIT),
method = "Takahira",
get_unit_expr = VSSTRESU
),
expected_output,
keys = c("USUBJID", "PARAMCD", "VISIT")
)
})
## Test 51: Derive BSA where height is measured only once ----
test_that("derive_param_bsa Test 51: Derive BSA where height is measured only once", {
input <- tibble::tribble(
~USUBJID, ~PARAMCD, ~PARAM, ~AVAL, ~AVALU, ~VISIT,
"01-701-1015", "HEIGHT", "Height (cm)", 147.0, "cm", "SCREENING",
"01-701-1015", "WEIGHT", "Weight (kg)", 54.0, "kg", "SCREENING",
"01-701-1015", "WEIGHT", "Weight (kg)", 54.4, "kg", "BASELINE",
"01-701-1015", "WEIGHT", "Weight (kg)", 53.1, "kg", "WEEK 2",
"01-701-1028", "HEIGHT", "Height (cm)", 163.0, "cm", "SCREENING",
"01-701-1028", "WEIGHT", "Weight (kg)", 78.5, "kg", "SCREENING",
"01-701-1028", "WEIGHT", "Weight (kg)", 80.3, "kg", "BASELINE",
"01-701-1028", "WEIGHT", "Weight (kg)", 80.7, "kg", "WEEK 2"
)
expected_output <- derive_param_computed(
input,
by_vars = exprs(USUBJID, VISIT),
parameters = "WEIGHT",
set_values_to = exprs(
AVAL = compute_bsa(
height = AVAL.HEIGHT, weight = AVAL.WEIGHT,
method = "Mosteller"
),
PARAMCD = "BSA",
PARAM = "Body Surface Area (m^2)",
AVALU = "m^2"
),
constant_parameters = c("HEIGHT"),
constant_by_vars = exprs(USUBJID)
)
expect_dfs_equal(
expected_output,
derive_param_bsa(
input,
by_vars = exprs(USUBJID, VISIT),
method = "Mosteller",
set_values_to = exprs(
PARAMCD = "BSA",
PARAM = "Body Surface Area (m^2)",
AVALU = "m^2"
),
get_unit_expr = extract_unit(PARAM),
constant_by_vars = exprs(USUBJID)
),
keys = c("USUBJID", "PARAMCD", "VISIT")
)
})
# derive_param_map ----
## derive_param_map: Error checks ----
## Test 52: MAP parameter NOT added - wrong DIABP unit ----
test_that("derive_param_map Test 52: MAP parameter NOT added - wrong DIABP unit", {
input <- tibble::tribble(
~USUBJID, ~PARAMCD, ~PARAM, ~AVAL, ~VISIT,
"01-701-1015", "DIABP", "Diastolic Blood Pressure (mHg)", 51, "BASELINE",
"01-701-1015", "SYSBP", "Systolic Blood Pressure (mmHg)", 121, "BASELINE",
)
expect_error(
derive_param_map(
input,
by_vars = exprs(USUBJID, VISIT),
get_unit_expr = extract_unit(PARAM)
),
paste(
"It is expected that 'DIABP' is measured in 'mmHg'.\nIn the",
"input dataset it is measured in 'mHg'."
)
)
})
## Test 53: MAP parameter NOT added - wrong SYSBP unit ----
test_that("derive_param_map Test 53: MAP parameter NOT added - wrong SYSBP unit", {
input <- tibble::tribble(
~USUBJID, ~PARAMCD, ~PARAM, ~AVAL, ~VISIT,
"01-701-1015", "DIABP", "Diastolic Blood Pressure (mmHg)", 51, "BASELINE",
"01-701-1015", "SYSBP", "Systolic Blood Pressure (mHg)", 121, "BASELINE",
)
expect_error(
derive_param_map(
input,
by_vars = exprs(USUBJID, VISIT),
get_unit_expr = extract_unit(PARAM)
),
paste(
"It is expected that 'SYSBP' is measured in 'mmHg'.\nIn the",
"input dataset it is measured in 'mHg'."
)
)
})
## Test 54: MAP parameter NOT added - wrong PULSE unit ----
test_that("derive_param_map Test 54: MAP parameter NOT added - wrong PULSE unit", {
input <- tibble::tribble(
~USUBJID, ~PARAMCD, ~PARAM, ~AVAL, ~VISIT,
"01-701-1015", "DIABP", "Diastolic Blood Pressure (mmHg)", 51, "BASELINE",
"01-701-1015", "SYSBP", "Systolic Blood Pressure (mmHg)", 121, "BASELINE",
"01-701-1015", "PULSE", "Pulse (beats/m)", 65, "BASELINE",
)
expect_error(
derive_param_map(
input,
by_vars = exprs(USUBJID, VISIT),
hr_code = "PULSE",
get_unit_expr = extract_unit(PARAM)
),
paste(
"It is expected that 'PULSE' is measured in 'beats/min'.\nIn the",
"input dataset it is measured in 'beats/m'."
)
)
})
## Test 55: MAP parameter NOT added - PARAMCD not set ----
test_that("derive_param_map Test 55: MAP parameter NOT added - PARAMCD not set", {
input <- tibble::tribble(
~USUBJID, ~PARAMCD, ~PARAM, ~AVAL, ~VISIT,
"01-701-1015", "DIABP", "Diastolic Blood Pressure (mmHg)", 51, "BASELINE",
"01-701-1015", "SYSBP", "Systolic Blood Pressure (mmHg)", 121, "BASELINE",
)
expect_error(
derive_param_map(
input,
by_vars = exprs(USUBJID, VISIT),
set_values_to = exprs(PARAM = "Mean Arterial Pressure"),
get_unit_expr = extract_unit(PARAM)
),
paste(
"The following required elements are missing in",
"`set_values_to`: 'PARAMCD'"
)
)
})
## derive_param_map: No obs added ----
## Test 56: MAP parameter NOT added ----
test_that("derive_param_map Test 56: MAP parameter NOT added", {
expected_output <- tibble::tribble(
~USUBJID, ~PARAMCD, ~PARAM, ~AVAL, ~VISIT,
"01-701-1015", "DIABP", "Diastolic Blood Pressure (mmHg)", NA, "BASELINE",
"01-701-1015", "DIABP", "Diastolic Blood Pressure (mmHg)", 50, "WEEK 2",
"01-701-1015", "DIABP", "Diastolic Blood Pressure (mmHg)", 55, "WEEK 4",
"01-701-1015", "SYSBP", "Systolic Blood Pressure (mmHg)", 121, "BASELINE",
"01-701-1015", "SYSBP", "Systolic Blood Pressure (mmHg)", NA, "WEEK 2",
"01-701-1015", "SYSBP", "Systolic Blood Pressure (mmHg)", 127, "WEEK 4",
"01-701-1015", "PULSE", "Pulse (beats/min)", 65, "BASELINE",
"01-701-1015", "PULSE", "Pulse (beats/min)", 68, "WEEK 2",
"01-701-1015", "PULSE", "Pulse (beats/min)", NA, "WEEK 4",
)
input <- expected_output
expect_dfs_equal(
derive_param_map(
input,
by_vars = exprs(USUBJID, VISIT),
hr_code = "PULSE",
get_unit_expr = extract_unit(PARAM)
),
expected_output,
keys = c("USUBJID", "PARAMCD", "VISIT")
)
})
## derive_param_map: Obs created ----
maphr <- function(sbp, dbp, hr) {
dbp + 0.01 * exp(4.14 - 40.74 / hr) * (sbp - dbp)
}
## Test 57: MAP parameter (DBP/SBP/PULSE) is correctly added ----
test_that("derive_param_map Test 57: MAP parameter (DBP/SBP/PULSE) is correctly added", {
expected_output <- tibble::tribble(
~USUBJID, ~PARAMCD, ~PARAM, ~VISIT, ~AVAL,
"01-701-1015", "PULSE", "Pulse (beats/min)", "BASELINE", 59,
"01-701-1015", "DIABP", "Diastolic Blood Pressure (mmHg)", "BASELINE", 51,
"01-701-1015", "SYSBP", "Systolic Blood Pressure (mmHg)", "BASELINE", 121,
# New row added for MAP for SUBJID="01-701-1015" and VISIT="BASELINE"
# PULSE = 59 DIABP = 51 and SYSBP = 121
"01-701-1015", "MAP", NA, "BASELINE", maphr(121, 51, 59),
"01-701-1028", "PULSE", "Pulse (beats/min)", "WEEK 2", 61,
"01-701-1028", "DIABP", "Diastolic Blood Pressure (mmHg)", "WEEK 2", 50,
"01-701-1028", "SYSBP", "Systolic Blood Pressure (mmHg)", "WEEK 2", 125,
# New row added for MAP for SUBJID="01-701-1028" and VISIT="WEEK 2"
# PULSE = 61 DIABP = 50 and SYSBP = 125
"01-701-1028", "MAP", NA, "WEEK 2", maphr(125, 50, 61),
)
input <- expected_output %>% filter(PARAMCD != "MAP")
expect_dfs_equal(
derive_param_map(
input,
by_vars = exprs(USUBJID, VISIT),
hr_code = "PULSE",
get_unit_expr = extract_unit(PARAM)
),
expected_output,
keys = c("USUBJID", "PARAMCD", "VISIT")
)
})
map <- function(sbp, dbp) {
(2 * dbp + sbp) / 3
}
## Test 58: MAP parameter (DBP/SBP) is correctly added ----
test_that("derive_param_map Test 58: MAP parameter (DBP/SBP) is correctly added", {
expected_output <- tibble::tribble(
~USUBJID, ~PARAMCD, ~PARAM, ~VISIT, ~AVAL,
"01-701-1015", "DIABP", "Diastolic Blood Pressure (mmHg)", "BASELINE", 51,
"01-701-1015", "SYSBP", "Systolic Blood Pressure (mmHg)", "BASELINE", 121,
# New row added for MAP for SUBJID="01-701-1015" and VISIT="BASELINE"
# DIABP = 51 and SYSBP = 121
"01-701-1015", "MAP", NA, "BASELINE", map(121, 51),
"01-701-1028", "DIABP", "Diastolic Blood Pressure (mmHg)", "WEEK 2", 50,
"01-701-1028", "SYSBP", "Systolic Blood Pressure (mmHg)", "WEEK 2", 125,
# New row added for MAP for SUBJID="01-701-1028" and VISIT="WEEK 2"
# DIABP = 50 and SYSBP = 125
"01-701-1028", "MAP", NA, "WEEK 2", map(125, 50),
)
input <- expected_output %>% filter(PARAMCD != "MAP")
expect_dfs_equal(
derive_param_map(input,
by_vars = exprs(USUBJID, VISIT),
get_unit_expr = extract_unit(PARAM)
),
expected_output,
keys = c("USUBJID", "PARAMCD", "VISIT")
)
})
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.