summarizeByVisitSCI() is the counterpart of
summarizeSCI() for data collected over several visits. It
produces the table of summaryByVisit() and one plot per
variable over the visits: a line plot (or boxplots) for continuous
variables and stacked barplots for categorical ones.
The arguments are those of summaryByVisit(). The visits
appear in the order of the table; with order, its values
also set the spacing of the visits in the line plot.
res <- summarizeByVisitSCI(hb, vars = c("hb", "hb_cat"), group = "Arm",
visit = "visit", order = "visit_nr",
stat_cont = "median_IQR",
labels = list(hb_cat = "Hemoglobin category"),
plot_args = list(risk_table = TRUE,
group_names_short = c("A", "B")))
res$tableVisit | N1 | Arm A | N1 | Arm B |
|---|---|---|---|---|
Hemoglobin | ||||
Cycle 1 | 29 | 130.0 (127.0, 138.0) | 23 | 132.0 (120.0, 139.0) |
Cycle 2 | 83 | 135.0 (127.0, 140.0) | 84 | 133.0 (122.5, 139.0) |
Cycle 3 | 83 | 136.0 (129.0, 143.0) | 80 | 131.5 (124.0, 141.5) |
Cycle 4 | 80 | 136.0 (128.5, 141.0) | 73 | 133.0 (124.0, 138.0) |
Cycle 5 | 71 | 137.0 (128.0, 142.0) | 65 | 131.0 (124.0, 138.0) |
Cycle 6 | 69 | 137.0 (131.0, 143.0) | 62 | 131.0 (124.0, 137.0) |
Cycle 7 | 65 | 137.0 (129.0, 142.0) | 62 | 130.0 (123.0, 138.0) |
Cycle 8 | 60 | 136.0 (131.5, 141.5) | 62 | 130.0 (124.0, 139.0) |
Cycle 9 | 62 | 136.5 (130.0, 140.0) | 60 | 131.0 (124.0, 136.5) |
Hemoglobin category | ||||
Cycle 1 | 29 | 23 | ||
< 120 | 5 (6%) | 7 (8%) | ||
120-140 | 18 (21%) | 12 (14%) | ||
> 140 | 6 (7%) | 4 (5%) | ||
Missing | 55 (65%) | 62 (73%) | ||
Cycle 2 | 83 | 84 | ||
< 120 | 8 (10%) | 18 (21%) | ||
120-140 | 55 (66%) | 49 (58%) | ||
> 140 | 20 (24%) | 17 (20%) | ||
Missing | 0 (0%) | 1 (1%) | ||
Cycle 3 | 83 | 80 | ||
< 120 | 6 (7%) | 12 (15%) | ||
120-140 | 49 (59%) | 47 (57%) | ||
> 140 | 28 (34%) | 21 (26%) | ||
Missing | 0 (0%) | 2 (2%) | ||
Cycle 4 | 80 | 73 | ||
< 120 | 8 (10%) | 15 (20%) | ||
120-140 | 49 (61%) | 46 (62%) | ||
> 140 | 23 (29%) | 12 (16%) | ||
Missing | 0 (0%) | 1 (1%) | ||
Cycle 5 | 71 | 65 | ||
< 120 | 5 (7%) | 9 (13%) | ||
120-140 | 43 (59%) | 45 (67%) | ||
> 140 | 23 (32%) | 11 (16%) | ||
Missing | 2 (3%) | 2 (3%) | ||
Cycle 6 | 69 | 62 | ||
< 120 | 2 (3%) | 9 (14%) | ||
120-140 | 42 (61%) | 46 (71%) | ||
> 140 | 25 (36%) | 7 (11%) | ||
Missing | 0 (0%) | 3 (5%) | ||
Cycle 7 | 65 | 62 | ||
< 120 | 5 (8%) | 7 (11%) | ||
120-140 | 37 (57%) | 44 (70%) | ||
> 140 | 23 (35%) | 11 (17%) | ||
Missing | 0 (0%) | 1 (2%) | ||
Cycle 8 | 60 | 62 | ||
< 120 | 4 (6%) | 9 (15%) | ||
120-140 | 38 (59%) | 42 (68%) | ||
> 140 | 18 (28%) | 11 (18%) | ||
Missing | 4 (6%) | 0 (0%) | ||
Cycle 9 | 62 | 60 | ||
< 120 | 3 (5%) | 7 (12%) | ||
120-140 | 44 (70%) | 46 (77%) | ||
> 140 | 15 (24%) | 7 (12%) | ||
Missing | 1 (2%) | 0 (0%) | ||
1N without missing values | ||||
2Median (Q1, Q3); n (%) | ||||
As in summarizeSCI(), type = "table" or
"plot" returns only one of them, the table’s settings
(labels, missing, missing_percent,
stat_cat) carry over to the plots, and further plot options
go into plot_args (see ?lineplotSCI,
?boxplotSCI and ?stackedbarplotSCI).
The line plots and stacked bars are drawn from the numbers printed in
the table, as plotByVisit() does: they show exactly what
the table shows, with its rounding, its visits and its N columns as the
risk table. stat_cont decides what the line plot shows:
stat_cont |
Point | Error bars |
|---|---|---|
"median_range" |
median | minimum to maximum |
"median_IQR" |
median | first to third quartile |
"mean_sd" |
mean | +/- one standard deviation |
"mean_se" |
mean | +/- one standard error |
"geomMean_sd" |
geometric mean | ÷ and × geometric SD |
The geometric mean needs positive values: the table shows
NA for visits with values of zero or below, and the line
plot leaves those points out.
plot_args = list(stat_footnote = TRUE) names the statistic
in a footnote under each plot.
plot_cont = "boxplot" draws boxplots per visit instead
of the line plot. A boxplot shows more than the table holds, so it is
drawn from the data: from the rows the table summarizes, with the box at
the quartiles as the table computes them. It always shows the median and
quartiles, whatever stat_cont the table uses; with
"median_IQR" the two agree.
res_box <- summarizeByVisitSCI(hb, vars = "hb", group = "Arm",
visit = "visit", order = "visit_nr",
stat_cont = "mean_sd", plot_cont = "boxplot",
plot_args = list(cex_axis = 0.8))
res_box$plots$hb