The function summaryByVisit() produces a table with
descriptive statistics for continues variables at different time points
(visits). It is largely based on the function
gtsummary::tbl_summary() and
gtsummary::tbl_strata_nested_stack. The changes as compared
to these functions are:
- A hierarchical summary table is created by variable (lab-value), visit and visitgroup.
Setup and data
To demonstrate the various functionalities of the function, we will create a small dataset. We have three hypotetical lab-values: LDH, ANC and Lymphocytes. Each lab-value has been measured at 10 time points (visits), which can further be divided into three visit groups (baseline, treatment and follow-up). In addition, we have a grouping variable called ‘arm’.
data<-NULL
visit <- c(paste0(rep("Visit ", 10), rbind(c(1:10))),
paste0(rep("Visit ", 10), rbind(c(1:10))),
paste0(rep("Visit ", 10), rbind(c(1:10))))
data <- as.data.frame(cbind( visit, rnorm(30)))
data<-as.data.frame(rbind(data, data, data, data, data))
data$visitgroup<- ifelse(data$visit %in% c("Visit 1", "Visit 2"), "Baseline", ifelse(data$visit %in% c("Visit 3", "Visit 4"), "Treatment", "Follow-up"))
data$visitgroup<-factor(data$visitgroup, levels = c("Baseline", "Treatment", "Follow-up"))
data$LDH<-rnorm(150)
data$Lymphocytes<-rnorm(150)
data$ANC<-rnorm(150)
data$LDH[3]<-NA
data$arm<- c(rep("Arm A", 70), rep("Arm B", 80))Basic table
Now, we use summarySCI::summaryLevels to create a
summary table for median and range of each lab-value by visit.
summaryByVisit(data,
vars = c("LDH", "Lymphocytes", "ANC"),
visit = "visit",
add_n = TRUE)Visit |
N = 151 |
N2 |
|---|---|---|
LDH |
||
Visit 1 |
0.1 (-1.9, 2.0) |
15 |
Visit 2 |
0.1 (-1.4, 1.3) |
15 |
Visit 3 |
0.5 (-1.1, 1.9) |
14 |
Visit 4 |
0.0 (-1.3, 1.6) |
15 |
Visit 5 |
0.1 (-1.8, 1.3) |
15 |
Visit 6 |
0.5 (-1.0, 2.8) |
15 |
Visit 7 |
-0.5 (-2.6, 1.1) |
15 |
Visit 8 |
-0.2 (-1.7, 2.7) |
15 |
Visit 9 |
0.2 (-1.5, 1.3) |
15 |
Visit 10 |
0.2 (-1.9, 2.2) |
15 |
Lymphocytes |
||
Visit 1 |
-0.3 (-1.2, 1.1) |
15 |
Visit 2 |
-0.5 (-2.2, 1.4) |
15 |
Visit 3 |
0.0 (-1.7, 1.5) |
15 |
Visit 4 |
0.1 (-1.8, 1.5) |
15 |
Visit 5 |
0.4 (-2.4, 2.1) |
15 |
Visit 6 |
0.1 (-2.1, 2.0) |
15 |
Visit 7 |
0.3 (-1.4, 2.2) |
15 |
Visit 8 |
0.4 (-1.0, 2.6) |
15 |
Visit 9 |
0.6 (-2.1, 1.9) |
15 |
Visit 10 |
0.2 (-1.7, 2.6) |
15 |
ANC |
||
Visit 1 |
0.2 (-1.4, 1.8) |
15 |
Visit 2 |
-0.3 (-2.0, 2.1) |
15 |
Visit 3 |
-0.1 (-1.2, 1.8) |
15 |
Visit 4 |
-0.5 (-2.2, 1.8) |
15 |
Visit 5 |
-0.1 (-2.9, 1.4) |
15 |
Visit 6 |
0.6 (-2.1, 2.0) |
15 |
Visit 7 |
-0.6 (-1.7, 0.6) |
15 |
Visit 8 |
-0.4 (-1.9, 2.1) |
15 |
Visit 9 |
0.1 (-0.7, 1.5) |
15 |
Visit 10 |
0.2 (-1.8, 1.2) |
15 |
1Median (Min, Max) | ||
2N without missing values | ||
Add visit group
We can the visit group to group visits accordingly. Visitgroup needs to be an ordered factor.
summaryByVisit(data,
vars = c("LDH", "Lymphocytes", "ANC"),
visitgroup = "visitgroup",
visit = "visit")Visit |
N = 151 |
|---|---|
LDH |
|
Baseline |
|
Visit 1 |
0.1 (-1.9, 2.0) |
Visit 2 |
0.1 (-1.4, 1.3) |
Treatment |
|
Visit 3 |
0.5 (-1.1, 1.9) |
Visit 4 |
0.0 (-1.3, 1.6) |
Follow-up |
|
Visit 5 |
0.1 (-1.8, 1.3) |
Visit 6 |
0.5 (-1.0, 2.8) |
Visit 7 |
-0.5 (-2.6, 1.1) |
Visit 8 |
-0.2 (-1.7, 2.7) |
Visit 9 |
0.2 (-1.5, 1.3) |
Visit 10 |
0.2 (-1.9, 2.2) |
Lymphocytes |
|
Baseline |
|
Visit 1 |
-0.3 (-1.2, 1.1) |
Visit 2 |
-0.5 (-2.2, 1.4) |
Treatment |
|
Visit 3 |
0.0 (-1.7, 1.5) |
Visit 4 |
0.1 (-1.8, 1.5) |
Follow-up |
|
Visit 5 |
0.4 (-2.4, 2.1) |
Visit 6 |
0.1 (-2.1, 2.0) |
Visit 7 |
0.3 (-1.4, 2.2) |
Visit 8 |
0.4 (-1.0, 2.6) |
Visit 9 |
0.6 (-2.1, 1.9) |
Visit 10 |
0.2 (-1.7, 2.6) |
ANC |
|
Baseline |
|
Visit 1 |
0.2 (-1.4, 1.8) |
Visit 2 |
-0.3 (-2.0, 2.1) |
Treatment |
|
Visit 3 |
-0.1 (-1.2, 1.8) |
Visit 4 |
-0.5 (-2.2, 1.8) |
Follow-up |
|
Visit 5 |
-0.1 (-2.9, 1.4) |
Visit 6 |
0.6 (-2.1, 2.0) |
Visit 7 |
-0.6 (-1.7, 0.6) |
Visit 8 |
-0.4 (-1.9, 2.1) |
Visit 9 |
0.1 (-0.7, 1.5) |
Visit 10 |
0.2 (-1.8, 1.2) |
1Median (Min, Max) | |
By group
We can stratify the table by groups via the group
argument. The overall column can still be shown if desired, using the
overall = TRUE argument. A maximum of 3 groups are
supported.
summaryByVisit(data,
vars = c("LDH", "Lymphocytes", "ANC"),
group = "arm",
visitgroup = "visitgroup",
visit = "visit")Visit |
Arm A |
Arm B |
|---|---|---|
LDH |
||
Baseline |
||
Visit 1 |
0.9 (-1.5, 1.9) |
-0.2 (-1.9, 2.0) |
Visit 2 |
0.2 (-0.7, 1.3) |
-0.3 (-1.4, 0.9) |
Treatment |
||
Visit 3 |
0.9 (-0.2, 1.3) |
0.2 (-1.1, 1.9) |
Visit 4 |
0.0 (-0.3, 1.6) |
-0.1 (-1.3, 1.0) |
Follow-up |
||
Visit 5 |
0.1 (-1.2, 1.3) |
0.3 (-1.8, 1.1) |
Visit 6 |
0.5 (-1.0, 2.8) |
0.6 (-0.8, 2.1) |
Visit 7 |
-0.4 (-2.6, 1.1) |
-0.5 (-1.1, 0.6) |
Visit 8 |
0.1 (-0.3, 2.7) |
-0.3 (-1.7, 0.5) |
Visit 9 |
0.2 (-0.4, 1.3) |
0.0 (-1.5, 0.9) |
Visit 10 |
-0.3 (-1.9, 1.1) |
0.9 (0.1, 2.2) |
Lymphocytes |
||
Baseline |
||
Visit 1 |
-0.4 (-1.2, 1.1) |
-0.1 (-0.8, 1.0) |
Visit 2 |
-0.3 (-1.3, 1.4) |
-1.0 (-2.2, 0.3) |
Treatment |
||
Visit 3 |
0.0 (-1.7, 1.1) |
0.3 (-1.2, 1.5) |
Visit 4 |
-0.3 (-1.6, 1.5) |
0.1 (-1.8, 1.2) |
Follow-up |
||
Visit 5 |
0.1 (-2.4, 1.8) |
0.4 (-0.9, 2.1) |
Visit 6 |
0.1 (-0.6, 2.0) |
-0.6 (-2.1, 1.9) |
Visit 7 |
0.0 (-1.1, 0.6) |
0.5 (-1.4, 2.2) |
Visit 8 |
0.4 (-0.6, 2.6) |
0.5 (-1.0, 2.0) |
Visit 9 |
0.7 (-2.1, 1.2) |
0.5 (-1.1, 1.9) |
Visit 10 |
0.6 (-1.7, 2.6) |
0.2 (-1.6, 2.1) |
ANC |
||
Baseline |
||
Visit 1 |
-0.2 (-0.6, 1.1) |
0.5 (-1.4, 1.8) |
Visit 2 |
-0.1 (-2.0, 2.1) |
-0.5 (-0.9, 0.7) |
Treatment |
||
Visit 3 |
0.5 (-1.0, 1.8) |
-0.8 (-1.2, 1.7) |
Visit 4 |
-0.2 (-1.4, 1.8) |
-0.6 (-2.2, 1.2) |
Follow-up |
||
Visit 5 |
0.0 (-1.1, 1.4) |
-0.8 (-2.9, 1.3) |
Visit 6 |
1.3 (0.0, 2.0) |
-0.4 (-2.1, 0.7) |
Visit 7 |
-0.4 (-1.7, 0.4) |
-0.6 (-1.3, 0.6) |
Visit 8 |
-0.4 (-1.1, 1.8) |
-0.4 (-1.9, 2.1) |
Visit 9 |
-0.1 (-0.7, 1.1) |
0.7 (-0.6, 1.5) |
Visit 10 |
0.3 (-0.9, 1.2) |
0.0 (-1.8, 0.9) |
1Median (Min, Max) | ||
summaryByVisit(data,
vars = c("LDH", "Lymphocytes", "ANC"),
group = "arm",
overall = TRUE,
visitgroup = "visitgroup",
visit = "visit")Visit |
Arm A |
Arm B |
Overall |
|---|---|---|---|
LDH |
|||
Baseline |
|||
Visit 1 |
0.9 (-1.5, 1.9) |
-0.2 (-1.9, 2.0) |
0.1 (-1.9, 2.0) |
Visit 2 |
0.2 (-0.7, 1.3) |
-0.3 (-1.4, 0.9) |
0.1 (-1.4, 1.3) |
Treatment |
|||
Visit 3 |
0.9 (-0.2, 1.3) |
0.2 (-1.1, 1.9) |
0.5 (-1.1, 1.9) |
Visit 4 |
0.0 (-0.3, 1.6) |
-0.1 (-1.3, 1.0) |
0.0 (-1.3, 1.6) |
Follow-up |
|||
Visit 5 |
0.1 (-1.2, 1.3) |
0.3 (-1.8, 1.1) |
0.1 (-1.8, 1.3) |
Visit 6 |
0.5 (-1.0, 2.8) |
0.6 (-0.8, 2.1) |
0.5 (-1.0, 2.8) |
Visit 7 |
-0.4 (-2.6, 1.1) |
-0.5 (-1.1, 0.6) |
-0.5 (-2.6, 1.1) |
Visit 8 |
0.1 (-0.3, 2.7) |
-0.3 (-1.7, 0.5) |
-0.2 (-1.7, 2.7) |
Visit 9 |
0.2 (-0.4, 1.3) |
0.0 (-1.5, 0.9) |
0.2 (-1.5, 1.3) |
Visit 10 |
-0.3 (-1.9, 1.1) |
0.9 (0.1, 2.2) |
0.2 (-1.9, 2.2) |
Lymphocytes |
|||
Baseline |
|||
Visit 1 |
-0.4 (-1.2, 1.1) |
-0.1 (-0.8, 1.0) |
-0.3 (-1.2, 1.1) |
Visit 2 |
-0.3 (-1.3, 1.4) |
-1.0 (-2.2, 0.3) |
-0.5 (-2.2, 1.4) |
Treatment |
|||
Visit 3 |
0.0 (-1.7, 1.1) |
0.3 (-1.2, 1.5) |
0.0 (-1.7, 1.5) |
Visit 4 |
-0.3 (-1.6, 1.5) |
0.1 (-1.8, 1.2) |
0.1 (-1.8, 1.5) |
Follow-up |
|||
Visit 5 |
0.1 (-2.4, 1.8) |
0.4 (-0.9, 2.1) |
0.4 (-2.4, 2.1) |
Visit 6 |
0.1 (-0.6, 2.0) |
-0.6 (-2.1, 1.9) |
0.1 (-2.1, 2.0) |
Visit 7 |
0.0 (-1.1, 0.6) |
0.5 (-1.4, 2.2) |
0.3 (-1.4, 2.2) |
Visit 8 |
0.4 (-0.6, 2.6) |
0.5 (-1.0, 2.0) |
0.4 (-1.0, 2.6) |
Visit 9 |
0.7 (-2.1, 1.2) |
0.5 (-1.1, 1.9) |
0.6 (-2.1, 1.9) |
Visit 10 |
0.6 (-1.7, 2.6) |
0.2 (-1.6, 2.1) |
0.2 (-1.7, 2.6) |
ANC |
|||
Baseline |
|||
Visit 1 |
-0.2 (-0.6, 1.1) |
0.5 (-1.4, 1.8) |
0.2 (-1.4, 1.8) |
Visit 2 |
-0.1 (-2.0, 2.1) |
-0.5 (-0.9, 0.7) |
-0.3 (-2.0, 2.1) |
Treatment |
|||
Visit 3 |
0.5 (-1.0, 1.8) |
-0.8 (-1.2, 1.7) |
-0.1 (-1.2, 1.8) |
Visit 4 |
-0.2 (-1.4, 1.8) |
-0.6 (-2.2, 1.2) |
-0.5 (-2.2, 1.8) |
Follow-up |
|||
Visit 5 |
0.0 (-1.1, 1.4) |
-0.8 (-2.9, 1.3) |
-0.1 (-2.9, 1.4) |
Visit 6 |
1.3 (0.0, 2.0) |
-0.4 (-2.1, 0.7) |
0.6 (-2.1, 2.0) |
Visit 7 |
-0.4 (-1.7, 0.4) |
-0.6 (-1.3, 0.6) |
-0.6 (-1.7, 0.6) |
Visit 8 |
-0.4 (-1.1, 1.8) |
-0.4 (-1.9, 2.1) |
-0.4 (-1.9, 2.1) |
Visit 9 |
-0.1 (-0.7, 1.1) |
0.7 (-0.6, 1.5) |
0.1 (-0.7, 1.5) |
Visit 10 |
0.3 (-0.9, 1.2) |
0.0 (-1.8, 0.9) |
0.2 (-1.8, 1.2) |
1Median (Min, Max) | |||
Add N
Sample size can be shown for each column, if the option
add_n is set to TRUE.
summaryByVisit(data,
vars = c("LDH", "Lymphocytes", "ANC"),
group = "arm",
overall = TRUE,
visitgroup = "visitgroup",
visit = "visit",
add_n = TRUE)Visit |
N1 |
Arm A |
N1 |
Arm B |
N1 |
Overall |
|---|---|---|---|---|---|---|
LDH |
||||||
Baseline |
||||||
Visit 1 |
7 |
0.9 (-1.5, 1.9) |
8 |
-0.2 (-1.9, 2.0) |
15 |
0.1 (-1.9, 2.0) |
Visit 2 |
7 |
0.2 (-0.7, 1.3) |
8 |
-0.3 (-1.4, 0.9) |
15 |
0.1 (-1.4, 1.3) |
Treatment |
||||||
Visit 3 |
6 |
0.9 (-0.2, 1.3) |
8 |
0.2 (-1.1, 1.9) |
14 |
0.5 (-1.1, 1.9) |
Visit 4 |
7 |
0.0 (-0.3, 1.6) |
8 |
-0.1 (-1.3, 1.0) |
15 |
0.0 (-1.3, 1.6) |
Follow-up |
||||||
Visit 5 |
7 |
0.1 (-1.2, 1.3) |
8 |
0.3 (-1.8, 1.1) |
15 |
0.1 (-1.8, 1.3) |
Visit 6 |
7 |
0.5 (-1.0, 2.8) |
8 |
0.6 (-0.8, 2.1) |
15 |
0.5 (-1.0, 2.8) |
Visit 7 |
7 |
-0.4 (-2.6, 1.1) |
8 |
-0.5 (-1.1, 0.6) |
15 |
-0.5 (-2.6, 1.1) |
Visit 8 |
7 |
0.1 (-0.3, 2.7) |
8 |
-0.3 (-1.7, 0.5) |
15 |
-0.2 (-1.7, 2.7) |
Visit 9 |
7 |
0.2 (-0.4, 1.3) |
8 |
0.0 (-1.5, 0.9) |
15 |
0.2 (-1.5, 1.3) |
Visit 10 |
7 |
-0.3 (-1.9, 1.1) |
8 |
0.9 (0.1, 2.2) |
15 |
0.2 (-1.9, 2.2) |
Lymphocytes |
||||||
Baseline |
||||||
Visit 1 |
7 |
-0.4 (-1.2, 1.1) |
8 |
-0.1 (-0.8, 1.0) |
15 |
-0.3 (-1.2, 1.1) |
Visit 2 |
7 |
-0.3 (-1.3, 1.4) |
8 |
-1.0 (-2.2, 0.3) |
15 |
-0.5 (-2.2, 1.4) |
Treatment |
||||||
Visit 3 |
7 |
0.0 (-1.7, 1.1) |
8 |
0.3 (-1.2, 1.5) |
15 |
0.0 (-1.7, 1.5) |
Visit 4 |
7 |
-0.3 (-1.6, 1.5) |
8 |
0.1 (-1.8, 1.2) |
15 |
0.1 (-1.8, 1.5) |
Follow-up |
||||||
Visit 5 |
7 |
0.1 (-2.4, 1.8) |
8 |
0.4 (-0.9, 2.1) |
15 |
0.4 (-2.4, 2.1) |
Visit 6 |
7 |
0.1 (-0.6, 2.0) |
8 |
-0.6 (-2.1, 1.9) |
15 |
0.1 (-2.1, 2.0) |
Visit 7 |
7 |
0.0 (-1.1, 0.6) |
8 |
0.5 (-1.4, 2.2) |
15 |
0.3 (-1.4, 2.2) |
Visit 8 |
7 |
0.4 (-0.6, 2.6) |
8 |
0.5 (-1.0, 2.0) |
15 |
0.4 (-1.0, 2.6) |
Visit 9 |
7 |
0.7 (-2.1, 1.2) |
8 |
0.5 (-1.1, 1.9) |
15 |
0.6 (-2.1, 1.9) |
Visit 10 |
7 |
0.6 (-1.7, 2.6) |
8 |
0.2 (-1.6, 2.1) |
15 |
0.2 (-1.7, 2.6) |
ANC |
||||||
Baseline |
||||||
Visit 1 |
7 |
-0.2 (-0.6, 1.1) |
8 |
0.5 (-1.4, 1.8) |
15 |
0.2 (-1.4, 1.8) |
Visit 2 |
7 |
-0.1 (-2.0, 2.1) |
8 |
-0.5 (-0.9, 0.7) |
15 |
-0.3 (-2.0, 2.1) |
Treatment |
||||||
Visit 3 |
7 |
0.5 (-1.0, 1.8) |
8 |
-0.8 (-1.2, 1.7) |
15 |
-0.1 (-1.2, 1.8) |
Visit 4 |
7 |
-0.2 (-1.4, 1.8) |
8 |
-0.6 (-2.2, 1.2) |
15 |
-0.5 (-2.2, 1.8) |
Follow-up |
||||||
Visit 5 |
7 |
0.0 (-1.1, 1.4) |
8 |
-0.8 (-2.9, 1.3) |
15 |
-0.1 (-2.9, 1.4) |
Visit 6 |
7 |
1.3 (0.0, 2.0) |
8 |
-0.4 (-2.1, 0.7) |
15 |
0.6 (-2.1, 2.0) |
Visit 7 |
7 |
-0.4 (-1.7, 0.4) |
8 |
-0.6 (-1.3, 0.6) |
15 |
-0.6 (-1.7, 0.6) |
Visit 8 |
7 |
-0.4 (-1.1, 1.8) |
8 |
-0.4 (-1.9, 2.1) |
15 |
-0.4 (-1.9, 2.1) |
Visit 9 |
7 |
-0.1 (-0.7, 1.1) |
8 |
0.7 (-0.6, 1.5) |
15 |
0.1 (-0.7, 1.5) |
Visit 10 |
7 |
0.3 (-0.9, 1.2) |
8 |
0.0 (-1.8, 0.9) |
15 |
0.2 (-1.8, 1.2) |
1N without missing values | ||||||
2Median (Min, Max) | ||||||