In this vignette we focus on providing more explanation on how
the inTextSummaryTable
package actually works. We would describe some of the
functionalities less exposed to the users.
We assume you are already familiar on how to create and export tables, otherwise we advise to first check out the dedicated vignettes for creating and exporting tables. The vignettes are accessible with the commands below.
vignette("inTextSummaryTable-createTables", "inTextSummaryTable") vignette("inTextSummaryTable-exportTables", "inTextSummaryTable")
We will first create example data sets to show how the exporting functionalities
work. The data sets used are available in the clinUtils
package.
library(knitr) opts_chunk$set( echo = TRUE, results = 'markup', warning = FALSE, # stop document execution if error (not the default) error = FALSE, message = FALSE, cache = FALSE, fig.width = 8, fig.height = 7, fig.path = "./figures_vignette/", fig.align = 'center') options(width = 170) # instead of warn = 0 by default # include warnings when they occur in the document options(warn = 1)
library(inTextSummaryTable) library(clinUtils) library(pander) library(tools) # toTitleCase
# load example data data(dataADaMCDISCP01) dataAll <- dataADaMCDISCP01 labelVars <- attr(dataAll, "labelVars") dataADSL <- dataADaMCDISCP01$ADSL
dataAE <- subset(dataAll$ADAE, SAFFL == "Y" & TRTEMFL == "Y") dataAEInterest <- subset(dataAE, AESOC %in% c( "INFECTIONS AND INFESTATIONS", "GENERAL DISORDERS AND ADMINISTRATION SITE CONDITIONS" ) ) # ensure that order of elements is the one specified in # the corresponding numeric variable dataAEInterest$TRTA <- reorder(dataAEInterest$TRTA, dataAEInterest$TRTAN) dataAEInterest$AESEV <- factor(dataAEInterest$AESEV, levels = c("MILD", "MODERATE")) dataTotalAE <- subset(dataAll$ADSL, TRT01A != "Placebo") # should contain columns specified in 'colVar' dataTotalAE$TRTA <- dataTotalAE$TRT01A
The getSummaryStatisticsTable
consists of the following framework:
computeSummaryStatisticsTable
functionoutputType
parameterThe supporting data for the summary statistics table, is accessed via the
computeSummaryStatisticsTable
. This includes the entire set of
statistics (as numeric) and combined statistic set.
The output from the computeSummaryStatisticsTable
is equivalent of the table
output by the getSummaryStatisticsTable
function when the outputType
is set
to 'data.frame-base'.
summaryTable <- computeSummaryStatisticsTable( data = dataAEInterest, rowVar = c("AESOC", "AEDECOD"), rowVarTotalInclude = c("AESOC", "AEDECOD"), colVar = "TRTA", stats = getStats("n (%)"), dataTotal = dataTotalAE, labelVars = labelVars, rowVarLab = c('AESOC' = "TEAE by SOC and Preferred Term\nn (%)") ) pander(head(summaryTable, 3))
Please note the presence of the isTotal
column, which flags the records
containing the number of subjects reported in the table header.
pander(subset(summaryTable, isTotal))
The summary table is exported to the format of interest with:
export( summaryTable = summaryTable, outputType = "flextable" )
Please see the vignette: inTextSummaryTable-exportTables
for more
information on the different export types available.
combine
functionSummary statistics tables can be combined with the combine
function.
tableDemoCat <- computeSummaryStatisticsTable( data = dataADSL, var = c("SEX", "AGE"), varInclude0 = TRUE, colVar = "TRT01P", stats = getStats("n (%)", includeName = FALSE), labelVars = labelVars ) tableDemoCont <- computeSummaryStatisticsTable( data = dataADSL, var = c("HEIGHTBL", "WEIGHTBL"), colVar = "TRT01P", stats = getStats(c("n", "Mean")), labelVars = labelVars ) tableDemo <- combine(tableDemoCat, tableDemoCont) export(tableDemo)
The tables created via the inTextSummaryTable
are simple R data.frame
objects,
so these can be combined/update to include extra statistics of interest.
The general workflow is to:
computeSummaryStatisticsTable
function)data.frame
with your statistics of relevance - in a similar format exportSummaryStatisticsTable
function)For example, we combine the descriptive statistics table created above with a set of pre-computed statistics (e.g. p-values of the difference between the treatment groups).
dataADSL$TRT01P <- with(dataADSL, reorder(TRT01P, TRT01PN)) # check format of table created with the package: descTable <- tableDemoCont descTable[, c("variable", "TRT01P", "isTotal", "n", "Mean")]
# add p-values in an extra row infTable <- unique(subset(descTable, !isTotal)[, c("variable", "TRT01P"), drop = FALSE]) infTable[which(infTable$variable == "Baseline Height (cm)"), "pValue"] <- 1e-10 infTable[which(infTable$variable == "Baseline Weight (kg)"), "pValue"] <- 1e-9 summaryTable <- plyr::rbind.fill(descTable, infTable) exportSummaryStatisticsTable( summaryTable = summaryTable, rowVar = "variable", colVar = "TRT01P", statsVar = c("n", "Mean", "pValue") )
compLab <- "Comparison between treatments (p-value)" # add p-values in a new column - in an extra row infTable <- unique(subset(descTable, !isTotal)[, "variable", drop = FALSE]) infTable$TRT01P <- compLab infTable[which(infTable$variable == "Baseline Height (cm)"), "pValue"] <- 1e-10 infTable[which(infTable$variable == "Baseline Weight (kg)"), "pValue"] <- 1e-9 summaryTable <- plyr::rbind.fill(descTable, infTable) # order columns to have comparison column as last summaryTable$TRT01P <- factor(summaryTable$TRT01P, levels = c(levels(dataADSL$TRT01P), compLab)) exportSummaryStatisticsTable( summaryTable = summaryTable, rowVar = "variable", colVar = "TRT01P", statsVar = c("n", "Mean", "pValue") )
infTable <- unique(subset(descTable, !isTotal)[, "variable", drop = FALSE]) infTable$TRT01P <- compLab infTable[which(infTable$variable == "Baseline Height (cm)"), "Mean"] <- 1e-10 infTable[which(infTable$variable == "Baseline Weight (kg)"), "Mean"] <- 1e-9 summaryTable <- plyr::rbind.fill(descTable, infTable) # order columns to have comparison column as last summaryTable$TRT01P <- factor(summaryTable$TRT01P, levels = c(levels(dataADSL$TRT01P), compLab)) exportSummaryStatisticsTable( summaryTable = summaryTable, rowVar = "variable", colVar = "TRT01P", statsVar = c("n", "Mean") )
The variables used for the row and columns of the summary statistics tables
should be present in a long format in the input data for the
getSummaryStatisticsTable
function.
In case the grouping of the rows/columns is more complex and no grouping
variable is yet available in the data, the function combineVariables
offers
simpler functionalities to create the input data.
The label for the grouping is extracted from the SAS dataset labels if
labelVars
is specified, or can be customized (label
parameter).
For example, the adverse events are counted for different population set: screened population, completer population, only events with high severity, or related to the treatment and with high severity.
# prepare the data: create grouping of interest dataAEGroup <- combineVariables( data = dataAEInterest, newVar = "AEGRP", paramsList = list( # for all screened patients list(var = "TRTA", value = "Xanomeline High Dose"), # for moderate severity list(var = "AESEV", value = "MODERATE", labelExtra = "Moderate"), list(var = "AENDY", label = paste("With adverse events ending date")) ), # include also counts for all records includeAll = TRUE, labelAll = "All Adverse events", labelVars = labelVars ) labelVars["AEGRP"] <- "Patient groups of interest" # create the table getSummaryStatisticsTable( data = dataAEGroup, colVar = "TRTA", rowVar = "AEGRP", labelVars = labelVars, dataTotal = dataTotalAE, stats = list(expression(paste0(statN, " (", round(statPercN, 1), ")"))), title = "Table: Adverse events: counts for groups of interest", footer = "Statistics: n (%)" )
pander(sessionInfo())
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.