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:
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))Now, we use summarySCI::summaryLevels to create a
summary table for median and range of each lab-value by visit.
Visit  | N  | N = 151  | 
|---|---|---|
LDH  | ||
Visit 1  | 15  | 0.3 (-1.4, 1.3)  | 
Visit 2  | 15  | 0.5 (-1.5, 1.9)  | 
Visit 3  | 14  | 0.0 (-2.2, 1.4)  | 
Visit 4  | 15  | 0.0 (-2.2, 1.1)  | 
Visit 5  | 15  | -0.1 (-2.0, 1.1)  | 
Visit 6  | 15  | -0.1 (-1.4, 2.4)  | 
Visit 7  | 15  | -0.2 (-1.7, 1.3)  | 
Visit 8  | 15  | 0.4 (-1.7, 1.7)  | 
Visit 9  | 15  | 0.0 (-1.8, 1.6)  | 
Visit 10  | 15  | -0.1 (-1.3, 1.1)  | 
Lymphocytes  | ||
Visit 1  | 15  | 0.1 (-1.3, 1.5)  | 
Visit 2  | 15  | -0.1 (-1.5, 2.0)  | 
Visit 3  | 15  | 0.0 (-1.7, 2.3)  | 
Visit 4  | 15  | 0.3 (-1.4, 1.2)  | 
Visit 5  | 15  | 0.5 (-1.5, 2.1)  | 
Visit 6  | 15  | -0.2 (-2.9, 1.7)  | 
Visit 7  | 15  | 0.0 (-1.6, 1.9)  | 
Visit 8  | 15  | 0.2 (-1.2, 1.3)  | 
Visit 9  | 15  | 0.8 (-1.5, 1.7)  | 
Visit 10  | 15  | 0.8 (-1.5, 2.5)  | 
ANC  | ||
Visit 1  | 15  | -0.8 (-1.5, 2.4)  | 
Visit 2  | 15  | -0.1 (-2.0, 1.5)  | 
Visit 3  | 15  | -0.2 (-2.0, 1.5)  | 
Visit 4  | 15  | 0.2 (-1.6, 0.9)  | 
Visit 5  | 15  | -0.1 (-1.7, 2.0)  | 
Visit 6  | 15  | 0.3 (-1.4, 1.2)  | 
Visit 7  | 15  | -0.2 (-1.9, 1.4)  | 
Visit 8  | 15  | 0.4 (-2.2, 1.3)  | 
Visit 9  | 15  | 0.0 (-3.4, 1.5)  | 
Visit 10  | 15  | 0.2 (-1.6, 1.7)  | 
1Median (Min, Max)  | ||
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.3 (-1.4, 1.3)  | 
Visit 2  | 0.5 (-1.5, 1.9)  | 
Treatment  | |
Visit 3  | 0.0 (-2.2, 1.4)  | 
Visit 4  | 0.0 (-2.2, 1.1)  | 
Follow-up  | |
Visit 5  | -0.1 (-2.0, 1.1)  | 
Visit 6  | -0.1 (-1.4, 2.4)  | 
Visit 7  | -0.2 (-1.7, 1.3)  | 
Visit 8  | 0.4 (-1.7, 1.7)  | 
Visit 9  | 0.0 (-1.8, 1.6)  | 
Visit 10  | -0.1 (-1.3, 1.1)  | 
Lymphocytes  | |
Baseline  | |
Visit 1  | 0.1 (-1.3, 1.5)  | 
Visit 2  | -0.1 (-1.5, 2.0)  | 
Treatment  | |
Visit 3  | 0.0 (-1.7, 2.3)  | 
Visit 4  | 0.3 (-1.4, 1.2)  | 
Follow-up  | |
Visit 5  | 0.5 (-1.5, 2.1)  | 
Visit 6  | -0.2 (-2.9, 1.7)  | 
Visit 7  | 0.0 (-1.6, 1.9)  | 
Visit 8  | 0.2 (-1.2, 1.3)  | 
Visit 9  | 0.8 (-1.5, 1.7)  | 
Visit 10  | 0.8 (-1.5, 2.5)  | 
ANC  | |
Baseline  | |
Visit 1  | -0.8 (-1.5, 2.4)  | 
Visit 2  | -0.1 (-2.0, 1.5)  | 
Treatment  | |
Visit 3  | -0.2 (-2.0, 1.5)  | 
Visit 4  | 0.2 (-1.6, 0.9)  | 
Follow-up  | |
Visit 5  | -0.1 (-1.7, 2.0)  | 
Visit 6  | 0.3 (-1.4, 1.2)  | 
Visit 7  | -0.2 (-1.9, 1.4)  | 
Visit 8  | 0.4 (-2.2, 1.3)  | 
Visit 9  | 0.0 (-3.4, 1.5)  | 
Visit 10  | 0.2 (-1.6, 1.7)  | 
1Median (Min, Max)  | |
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.3 (-1.3, 1.3)  | 0.1 (-1.4, 1.2)  | 
Visit 2  | 0.5 (-0.2, 1.8)  | 0.6 (-1.5, 1.9)  | 
Treatment  | ||
Visit 3  | 0.3 (-2.2, 1.4)  | 0.0 (-1.0, 0.3)  | 
Visit 4  | -0.2 (-2.2, 0.5)  | 0.1 (-1.1, 1.1)  | 
Follow-up  | ||
Visit 5  | -0.5 (-2.0, 1.1)  | 0.0 (-1.4, 0.7)  | 
Visit 6  | -0.1 (-0.3, 1.1)  | -0.9 (-1.4, 2.4)  | 
Visit 7  | 0.0 (-1.0, 1.3)  | -0.3 (-1.7, 0.8)  | 
Visit 8  | 0.4 (-1.7, 1.7)  | -0.2 (-1.7, 1.4)  | 
Visit 9  | 0.0 (-1.2, 0.8)  | 0.1 (-1.8, 1.6)  | 
Visit 10  | 0.1 (-1.3, 1.1)  | -0.2 (-0.8, 1.0)  | 
Lymphocytes  | ||
Baseline  | ||
Visit 1  | -0.2 (-1.3, 1.5)  | 0.2 (-1.2, 0.7)  | 
Visit 2  | -0.1 (-1.4, 2.0)  | 0.3 (-1.5, 2.0)  | 
Treatment  | ||
Visit 3  | -0.2 (-1.7, 1.7)  | 0.4 (-0.4, 2.3)  | 
Visit 4  | 0.3 (-0.8, 0.9)  | 0.1 (-1.4, 1.2)  | 
Follow-up  | ||
Visit 5  | -0.4 (-1.5, 0.8)  | 0.6 (-0.2, 2.1)  | 
Visit 6  | -1.1 (-2.9, 0.6)  | 0.2 (-2.2, 1.7)  | 
Visit 7  | 0.5 (-1.4, 1.1)  | -0.6 (-1.6, 1.9)  | 
Visit 8  | 0.4 (-0.5, 0.8)  | 0.0 (-1.2, 1.3)  | 
Visit 9  | 0.8 (-1.5, 1.0)  | 0.5 (-0.9, 1.7)  | 
Visit 10  | 0.3 (-0.6, 2.5)  | 0.8 (-1.5, 1.3)  | 
ANC  | ||
Baseline  | ||
Visit 1  | -0.1 (-1.4, 2.0)  | -0.8 (-1.5, 2.4)  | 
Visit 2  | -0.3 (-2.0, 1.5)  | 0.0 (-1.8, 1.2)  | 
Treatment  | ||
Visit 3  | -0.6 (-2.0, 0.2)  | 0.0 (-1.4, 1.5)  | 
Visit 4  | 0.2 (-1.0, 0.7)  | 0.3 (-1.6, 0.9)  | 
Follow-up  | ||
Visit 5  | -0.4 (-1.7, 0.1)  | 0.1 (-0.8, 2.0)  | 
Visit 6  | 0.3 (-1.4, 1.2)  | 0.2 (-1.4, 1.2)  | 
Visit 7  | -0.1 (-1.9, 0.6)  | -0.2 (-1.5, 1.4)  | 
Visit 8  | 0.7 (-0.5, 1.3)  | 0.1 (-2.2, 1.3)  | 
Visit 9  | -0.1 (-3.4, 1.5)  | 0.1 (-1.1, 1.1)  | 
Visit 10  | 0.4 (-1.6, 1.3)  | 0.0 (-1.2, 1.7)  | 
1Median (Min, Max)  | ||
summaryByVisit(data,
         vars = c("LDH", "Lymphocytes", "ANC"),
         group = "arm",
         overall = TRUE,
         visitgroup = "visitgroup",
         visit = "visit")Visit  | Overall    | Arm A    | Arm B    | 
|---|---|---|---|
LDH  | |||
Baseline  | |||
Visit 1  | 0.3 (-1.4, 1.3)  | 0.3 (-1.3, 1.3)  | 0.1 (-1.4, 1.2)  | 
Visit 2  | 0.5 (-1.5, 1.9)  | 0.5 (-0.2, 1.8)  | 0.6 (-1.5, 1.9)  | 
Treatment  | |||
Visit 3  | 0.0 (-2.2, 1.4)  | 0.3 (-2.2, 1.4)  | 0.0 (-1.0, 0.3)  | 
Visit 4  | 0.0 (-2.2, 1.1)  | -0.2 (-2.2, 0.5)  | 0.1 (-1.1, 1.1)  | 
Follow-up  | |||
Visit 5  | -0.1 (-2.0, 1.1)  | -0.5 (-2.0, 1.1)  | 0.0 (-1.4, 0.7)  | 
Visit 6  | -0.1 (-1.4, 2.4)  | -0.1 (-0.3, 1.1)  | -0.9 (-1.4, 2.4)  | 
Visit 7  | -0.2 (-1.7, 1.3)  | 0.0 (-1.0, 1.3)  | -0.3 (-1.7, 0.8)  | 
Visit 8  | 0.4 (-1.7, 1.7)  | 0.4 (-1.7, 1.7)  | -0.2 (-1.7, 1.4)  | 
Visit 9  | 0.0 (-1.8, 1.6)  | 0.0 (-1.2, 0.8)  | 0.1 (-1.8, 1.6)  | 
Visit 10  | -0.1 (-1.3, 1.1)  | 0.1 (-1.3, 1.1)  | -0.2 (-0.8, 1.0)  | 
Lymphocytes  | |||
Baseline  | |||
Visit 1  | 0.1 (-1.3, 1.5)  | -0.2 (-1.3, 1.5)  | 0.2 (-1.2, 0.7)  | 
Visit 2  | -0.1 (-1.5, 2.0)  | -0.1 (-1.4, 2.0)  | 0.3 (-1.5, 2.0)  | 
Treatment  | |||
Visit 3  | 0.0 (-1.7, 2.3)  | -0.2 (-1.7, 1.7)  | 0.4 (-0.4, 2.3)  | 
Visit 4  | 0.3 (-1.4, 1.2)  | 0.3 (-0.8, 0.9)  | 0.1 (-1.4, 1.2)  | 
Follow-up  | |||
Visit 5  | 0.5 (-1.5, 2.1)  | -0.4 (-1.5, 0.8)  | 0.6 (-0.2, 2.1)  | 
Visit 6  | -0.2 (-2.9, 1.7)  | -1.1 (-2.9, 0.6)  | 0.2 (-2.2, 1.7)  | 
Visit 7  | 0.0 (-1.6, 1.9)  | 0.5 (-1.4, 1.1)  | -0.6 (-1.6, 1.9)  | 
Visit 8  | 0.2 (-1.2, 1.3)  | 0.4 (-0.5, 0.8)  | 0.0 (-1.2, 1.3)  | 
Visit 9  | 0.8 (-1.5, 1.7)  | 0.8 (-1.5, 1.0)  | 0.5 (-0.9, 1.7)  | 
Visit 10  | 0.8 (-1.5, 2.5)  | 0.3 (-0.6, 2.5)  | 0.8 (-1.5, 1.3)  | 
ANC  | |||
Baseline  | |||
Visit 1  | -0.8 (-1.5, 2.4)  | -0.1 (-1.4, 2.0)  | -0.8 (-1.5, 2.4)  | 
Visit 2  | -0.1 (-2.0, 1.5)  | -0.3 (-2.0, 1.5)  | 0.0 (-1.8, 1.2)  | 
Treatment  | |||
Visit 3  | -0.2 (-2.0, 1.5)  | -0.6 (-2.0, 0.2)  | 0.0 (-1.4, 1.5)  | 
Visit 4  | 0.2 (-1.6, 0.9)  | 0.2 (-1.0, 0.7)  | 0.3 (-1.6, 0.9)  | 
Follow-up  | |||
Visit 5  | -0.1 (-1.7, 2.0)  | -0.4 (-1.7, 0.1)  | 0.1 (-0.8, 2.0)  | 
Visit 6  | 0.3 (-1.4, 1.2)  | 0.3 (-1.4, 1.2)  | 0.2 (-1.4, 1.2)  | 
Visit 7  | -0.2 (-1.9, 1.4)  | -0.1 (-1.9, 0.6)  | -0.2 (-1.5, 1.4)  | 
Visit 8  | 0.4 (-2.2, 1.3)  | 0.7 (-0.5, 1.3)  | 0.1 (-2.2, 1.3)  | 
Visit 9  | 0.0 (-3.4, 1.5)  | -0.1 (-3.4, 1.5)  | 0.1 (-1.1, 1.1)  | 
Visit 10  | 0.2 (-1.6, 1.7)  | 0.4 (-1.6, 1.3)  | 0.0 (-1.2, 1.7)  | 
1Median (Min, Max)  | |||
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  | N  | Overall    | N  | Arm A    | N  | Arm B    | 
|---|---|---|---|---|---|---|
LDH  | ||||||
Baseline  | ||||||
Visit 1  | 15  | 0.3 (-1.4, 1.3)  | 7  | 0.3 (-1.3, 1.3)  | 8  | 0.1 (-1.4, 1.2)  | 
Visit 2  | 15  | 0.5 (-1.5, 1.9)  | 7  | 0.5 (-0.2, 1.8)  | 8  | 0.6 (-1.5, 1.9)  | 
Treatment  | ||||||
Visit 3  | 14  | 0.0 (-2.2, 1.4)  | 6  | 0.3 (-2.2, 1.4)  | 8  | 0.0 (-1.0, 0.3)  | 
Visit 4  | 15  | 0.0 (-2.2, 1.1)  | 7  | -0.2 (-2.2, 0.5)  | 8  | 0.1 (-1.1, 1.1)  | 
Follow-up  | ||||||
Visit 5  | 15  | -0.1 (-2.0, 1.1)  | 7  | -0.5 (-2.0, 1.1)  | 8  | 0.0 (-1.4, 0.7)  | 
Visit 6  | 15  | -0.1 (-1.4, 2.4)  | 7  | -0.1 (-0.3, 1.1)  | 8  | -0.9 (-1.4, 2.4)  | 
Visit 7  | 15  | -0.2 (-1.7, 1.3)  | 7  | 0.0 (-1.0, 1.3)  | 8  | -0.3 (-1.7, 0.8)  | 
Visit 8  | 15  | 0.4 (-1.7, 1.7)  | 7  | 0.4 (-1.7, 1.7)  | 8  | -0.2 (-1.7, 1.4)  | 
Visit 9  | 15  | 0.0 (-1.8, 1.6)  | 7  | 0.0 (-1.2, 0.8)  | 8  | 0.1 (-1.8, 1.6)  | 
Visit 10  | 15  | -0.1 (-1.3, 1.1)  | 7  | 0.1 (-1.3, 1.1)  | 8  | -0.2 (-0.8, 1.0)  | 
Lymphocytes  | ||||||
Baseline  | ||||||
Visit 1  | 15  | 0.1 (-1.3, 1.5)  | 7  | -0.2 (-1.3, 1.5)  | 8  | 0.2 (-1.2, 0.7)  | 
Visit 2  | 15  | -0.1 (-1.5, 2.0)  | 7  | -0.1 (-1.4, 2.0)  | 8  | 0.3 (-1.5, 2.0)  | 
Treatment  | ||||||
Visit 3  | 15  | 0.0 (-1.7, 2.3)  | 7  | -0.2 (-1.7, 1.7)  | 8  | 0.4 (-0.4, 2.3)  | 
Visit 4  | 15  | 0.3 (-1.4, 1.2)  | 7  | 0.3 (-0.8, 0.9)  | 8  | 0.1 (-1.4, 1.2)  | 
Follow-up  | ||||||
Visit 5  | 15  | 0.5 (-1.5, 2.1)  | 7  | -0.4 (-1.5, 0.8)  | 8  | 0.6 (-0.2, 2.1)  | 
Visit 6  | 15  | -0.2 (-2.9, 1.7)  | 7  | -1.1 (-2.9, 0.6)  | 8  | 0.2 (-2.2, 1.7)  | 
Visit 7  | 15  | 0.0 (-1.6, 1.9)  | 7  | 0.5 (-1.4, 1.1)  | 8  | -0.6 (-1.6, 1.9)  | 
Visit 8  | 15  | 0.2 (-1.2, 1.3)  | 7  | 0.4 (-0.5, 0.8)  | 8  | 0.0 (-1.2, 1.3)  | 
Visit 9  | 15  | 0.8 (-1.5, 1.7)  | 7  | 0.8 (-1.5, 1.0)  | 8  | 0.5 (-0.9, 1.7)  | 
Visit 10  | 15  | 0.8 (-1.5, 2.5)  | 7  | 0.3 (-0.6, 2.5)  | 8  | 0.8 (-1.5, 1.3)  | 
ANC  | ||||||
Baseline  | ||||||
Visit 1  | 15  | -0.8 (-1.5, 2.4)  | 7  | -0.1 (-1.4, 2.0)  | 8  | -0.8 (-1.5, 2.4)  | 
Visit 2  | 15  | -0.1 (-2.0, 1.5)  | 7  | -0.3 (-2.0, 1.5)  | 8  | 0.0 (-1.8, 1.2)  | 
Treatment  | ||||||
Visit 3  | 15  | -0.2 (-2.0, 1.5)  | 7  | -0.6 (-2.0, 0.2)  | 8  | 0.0 (-1.4, 1.5)  | 
Visit 4  | 15  | 0.2 (-1.6, 0.9)  | 7  | 0.2 (-1.0, 0.7)  | 8  | 0.3 (-1.6, 0.9)  | 
Follow-up  | ||||||
Visit 5  | 15  | -0.1 (-1.7, 2.0)  | 7  | -0.4 (-1.7, 0.1)  | 8  | 0.1 (-0.8, 2.0)  | 
Visit 6  | 15  | 0.3 (-1.4, 1.2)  | 7  | 0.3 (-1.4, 1.2)  | 8  | 0.2 (-1.4, 1.2)  | 
Visit 7  | 15  | -0.2 (-1.9, 1.4)  | 7  | -0.1 (-1.9, 0.6)  | 8  | -0.2 (-1.5, 1.4)  | 
Visit 8  | 15  | 0.4 (-2.2, 1.3)  | 7  | 0.7 (-0.5, 1.3)  | 8  | 0.1 (-2.2, 1.3)  | 
Visit 9  | 15  | 0.0 (-3.4, 1.5)  | 7  | -0.1 (-3.4, 1.5)  | 8  | 0.1 (-1.1, 1.1)  | 
Visit 10  | 15  | 0.2 (-1.6, 1.7)  | 7  | 0.4 (-1.6, 1.3)  | 8  | 0.0 (-1.2, 1.7)  | 
1Median (Min, Max)  | ||||||