summaryM summarizes the variables listed in an S formula,
computing descriptive statistics and optionally statistical tests for
group differences. This function is typically used when there are
multiple left-hand-side variables that are independently against by
groups marked by a single right-hand-side variable. The summary
statistics may be passed to print methods, plot methods
for making annotated dot charts and extended box plots, and
latex methods for typesetting tables using LaTeX. The
html method uses htmlTable::htmlTable to typeset the
table in html, by passing information to the latex method with
html=TRUE. This is for use with RMarkdown under RStudio.
The print methods use the print.char.matrix function to
print boxed tables. The plot method creates plotly graphics if
options(grType='plotly'), otherwise base graphics are used.
plotly graphics provide extra information such as which
quantile is being displayed when hovering the mouse. Test statistics
are displayed by hovering over the mean.
Continuous variables are described by three quantiles (quartiles by
default) when printing, or by the following quantiles when plotting
expended box plots using the bpplt function:
0.05, 0.125, 0.25, 0.375, 0.5, 0.625, 0.75, 0.875, 0.95. The box
plots are scaled to the 0.025 and 0.975 quantiles of each continuous
left-hand-side variable. Categorical variables are
described by counts and percentages.
The left hand side of formula may contain mChoice
("multiple choice") variables. When test=TRUE each choice is
tested separately as a binary categorical response.
The plot method for method="reverse" creates a temporary
function Key as is done by the xYplot and
Ecdf.formula functions. After plot
runs, you can type Key() to put a legend in a default location, or
e.g. Key(locator(1)) to draw a legend where you click the left
mouse button. This key is for categorical variables, so to have the
opportunity to put the key on the graph you will probably want to use
the command plot(object, which="categorical"). A second function
Key2 is created if continuous variables are being plotted. It is
used the same as Key. If the which argument is not
specified to plot, two pages of plots will be produced. If you
don't define par(mfrow=) yourself,
plot.summaryM will try to lay out a multi-panel
graph to best fit all the individual charts for continuous
variables.
summaryM(formula, groups=NULL, data=NULL, subset, na.action=na.retain, overall=FALSE, continuous=10, na.include=FALSE, quant=c(0.025, 0.05, 0.125, 0.25, 0.375, 0.5, 0.625, 0.75, 0.875, 0.95, 0.975), nmin=100, test=FALSE, conTest=conTestkw, catTest=catTestchisq, ordTest=ordTestpo)
"print"(x, digits, prn = any(n != N), what=c('proportion', '%'), pctdig = if(what == '%') 0 else 2, npct = c('numerator', 'both', 'denominator', 'none'), exclude1 = TRUE, vnames = c('labels', 'names'), prUnits = TRUE, sep = '/', abbreviate.dimnames = FALSE, prefix.width = max(nchar(lab)), min.colwidth, formatArgs=NULL, round=NULL, prtest = c('P','stat','df','name'), prmsd = FALSE, long = FALSE, pdig = 3, eps = 0.001, prob = c(0.25, 0.5, 0.75), prN = FALSE, ...)
"plot"(x, vnames = c('labels', 'names'), which = c('both', 'categorical', 'continuous'), vars=NULL, xlim = c(0,1), xlab = 'Proportion', pch = c(16, 1, 2, 17, 15, 3, 4, 5, 0), exclude1 = TRUE, main, ncols=2, prtest = c('P', 'stat', 'df', 'name'), pdig = 3, eps = 0.001, conType = c('bp', 'dot', 'raw'), cex.means = 0.5, cex=par('cex'), height='auto', width=700, ...)
"latex"(object, title = first.word(deparse(substitute(object))), file=paste(title, 'tex', sep='.'), append=FALSE, digits, prn = any(n != N), what=c('proportion', '%'), pctdig = if(what == '%') 0 else 2, npct = c('numerator', 'both', 'denominator', 'slash', 'none'), npct.size = if(html) mspecs$html$smaller else 'scriptsize', Nsize = if(html) mspecs$html$smaller else 'scriptsize', exclude1 = TRUE, vnames=c("labels", "names"), prUnits = TRUE, middle.bold = FALSE, outer.size = if(html) mspecs$html$smaller else "scriptsize", caption, rowlabel = "", rowsep=html, insert.bottom = TRUE, dcolumn = FALSE, formatArgs=NULL, round=NULL, prtest = c('P', 'stat', 'df', 'name'), prmsd = FALSE, msdsize = if(html) function(x) x else NULL, brmsd=FALSE, long = FALSE, pdig = 3, eps = 0.001, auxCol = NULL, table.env=TRUE, tabenv1=FALSE, prob=c(0.25, 0.5, 0.75), prN=FALSE, legend.bottom=FALSE, html=FALSE, mspecs=markupSpecs, ...)
"html"(object, ...)1, indicating that
there is no grouping variable so that only margin summaries are
produced. The right hand side variable, if present, must be a
discrete variable producing a limited number of groups. On the
left hand side there may be any number of variables, separated by
"+", and these may be of mixed types. These variables are analyzed
separately by the grouping variable.
groups as a character string containing the name of the
variable used to produce columns of the table. The remaining right
hand variables are combined to produce levels that cause separate
tables or plots to be produced.summaryM. For
conTestkw a numeric vector, and for ordTestpo, a numeric
or factor variable that can be considered orderedna.retain, which keeps all
observations for processing, with missing variables or not.
overall=TRUE makes a new column with
overall statistics for the whole sample. If test=TRUE these
marginal statistics are ignored in doing statistical tests.
continuous unique values).
factor variables are always considered to be categorical no matter
how many levels they have.
na.include=TRUE to keep missing values of categorical
variables from being excluded from the table.
nmin non-missing observations, the raw
data are retained for later plotting in place of box plots.
TRUE to compute test
statistics using tests specified in conTest and catTest.
P (the computed
P-value), stat (the test statistic, either chi-square or F),
df (degrees of freedom), testname (test name),
namefun ("chisq", "fstat"), statname
(statistic name), an optional component latexstat (LaTeX
representation of statname), an optional component
plotmathstat (for R - the plotmath representation of
statname, as a character string), and an
optional component note
that contains a character string note about the test (e.g.,
"test not done because n < 5"). conTest is applied to
continuous variables
on the right-hand-side of the formula when method="reverse". The
default uses the spearman2 function to run the Wilcoxon or
Kruskal-Wallis test using the F distribution.
conTest. By default,
the Pearson chi-square test is done, without continuity correction
(the continuity correction would make the test conservative like the
Fisher exact test).
conTest. By default,
the Proportional odds likelihood ratio test is done.
Key and Key2 these arguments are passed to key,
text, or mtitle. For print methods these are
optional arguments to print.char.matrix. For latex methods
these are passed to latex.default. For html the
arguments are passed the latex.summaryM, and the arguments
may not include file.
summaryM0 and 1 to
scale the x-axes using the whole observed data ranges instead of the
default (a 0.95 quantile interval). Box-percentile plots are drawn
using all but the outer quantiles.
quant argument of summaryM. The vector
must be of length three. By default it contains 0.25, 0.5, and 0.75.Warning: specifying 0 and 1 as two of the quantiles will result in computing the minimum and maximum of the variable. As for many random variables the minimum will continue to become smaller as the sample size grows, and the maximum will continue to get larger. Thus the min and max are not recommended as summary statistics.
label and sas.get functions). To use the shorter
variable names, specify vnames="name".
print.char.matrixprint.char.matrixprint.char.matrix.
The default is the maximum of the minimum column label length and
the minimum length of entries in the data cells.
format.default such as
scientific, e.g., formatArgs=list(scientific=c(-5,5)). For
print.summary.formula.reverse and
format.summary.formula.reverse, formatArgs applies only to
statistics computed on continuous variables, not to percents,
numerators, and denominators. The round argument may be preferred.
digits system option.
what='%',
so percents will be rounded to the nearest percent. The default is
2 for proportions.
TRUE to print the number of non-missing observations on the
current (row) variable. The default is to print these only if any of
the counts of non-missing values differs from the total number of
non-missing values of the left-hand-side variable.
TRUE to print the number of non-missing observations on
rows that contain continuous variables.
"both" to print both numerator and
denominator as a fraction, "denominator", "slash" to
typeset horizontally using a forward slash, or "none".
npct information which appears after
percents. The default is "scriptsize".
Nsize specifies the LaTeX size for these subheadings. Default
is "scriptsize".
summaryM objects will be printed, plotted, or typeset by
removing redundant entries from percentage tables for categorical
variables. For example, if you print the percent of females, you
don't need to print the percent of males. To override this, set
exclude1=FALSE.
FALSE to suppress printing or latexing units
attributes of variables, when method='reverse' or 'response'
test=TRUE was in
effect when summaryM was called. Defaults to printing all
components. Specify prtest=FALSE or prtest="none" to not
print any tests. This applies to print, latex, and
plot methods.
round to round
the quantiles and optional mean and standard deviation to
round digits after the decimal point. Set round='auto'
to try an automatic choice.
TRUE to print mean and SD after the three quantiles, for
continuous variables
NULL to use the current font size for the mean and
standard deviation if prmsd is TRUE. Set to a character
string or function to specify an alternate LaTeX font size.
TRUE to put the mean and standard deviation
on a separate line, for htmlTRUE to print the results for the first category on its own
line, not on the same line with the variable label
3. This is passed to format.pval.
eps will be printed as < eps. See
format.pval.
latex.summaryM. This argument is a list with a
single element that has a name specifying the column heading. If this
name includes a newline character, the portions of the string before
and after the newline form respectively the main heading and the
subheading (typically set in smaller font), respectively. See the
extracolheads argument to latex.default. auxCol
is filled with blanks when a variable being summarized takes up more
than one row in the output. This happens with categorical variables.
FALSE to use tabular environment
with no captionTRUE in the case of stratification when
you want only the first stratum's table to be in a table
environment. This is useful when using hyperref.plotly graphics. Default is to plot all variables of each
type (categorical or continuous).quant except for the outermost ones
which are using for scaling the overall plot based on the
non-stratified marginal distribution of the current response variable.
Specify conType='dot' to draw dot plots showing the three
quartiles instead. For extended box plots, means are drawn
with a solid dot and vertical reference lines are placed at the three
quartiles. Specify conType='raw' to make a strip chart showing
the raw data. This can only be used if the sample size for each
right-hand-side group is less than or equal to nmin.plotly
subplot object containing all the extended box plots. If
height="auto", plot.summaryM will set height
based on the number of
continuous variables and ncols or for dot charts it will use
Hmisc::plotlyHeightDotchart. At present height is
ignored for extended box plots due to vertical spacing problem with
plotly graphics.quant.
plotly graphics for extended
box plots. Defaults to 2. Recommendation is for 1-2..tex suffix. Default
is the name of the summary object. If caption is specied,
title is also used for the table's symbolic reference label.
file="" will cause LaTeX code to just be printed to
standard output rather than be stored in a permanent file.
TRUE to add code to an existing filelatex.default (under the help file
latex)html is TRUE, instructs the function to
use a horizontal line to separate variables from one another.
Recommended if brmsd is TRUE. Ignored for LaTeX.TRUE to have LaTeX use bold face for the middle
quantile
FALSE to suppress inclusion of definitions placed at the
bottom of LaTeX tables. You can also specify a character string
containing other text that overrides the automatic text. At
present such text always appears in the main caption for LaTeX.
TRUE to separate the table caption and legend. This
will place table legends at the bottom of LaTeX tables.
TRUE to typeset with htmlmarkupSpecs which the user can use as a
starting point for editinglatexplot.summaryM returns the number
of pages of plots that were made if using base graphics, or
plotly objects created by plotly::subplot otherwise.
If both categorical and continuous variables were plotted, the
returned object is a list with two named elements Categorical
and Continuous each containing plotly objects.
Otherwise a plotly object is returned.
The latex method returns attributes legend and
nstrata.
plot.summaryM creates a function Key and
Key2 in frame 0 that will draw legends, if base graphics are
being used.mChoice, label, dotchart3,
print.char.matrix, update,
formula,
format.default, latex,
latexTranslate, bpplt,
tabulr, bpplotM, summaryP
options(digits=3)
set.seed(173)
sex <- factor(sample(c("m","f"), 500, rep=TRUE))
country <- factor(sample(c('US', 'Canada'), 500, rep=TRUE))
age <- rnorm(500, 50, 5)
sbp <- rnorm(500, 120, 12)
label(sbp) <- 'Systolic BP'
units(sbp) <- 'mmHg'
treatment <- factor(sample(c("Drug","Placebo"), 500, rep=TRUE))
treatment[1]
sbp[1] <- NA
# Generate a 3-choice variable; each of 3 variables has 5 possible levels
symp <- c('Headache','Stomach Ache','Hangnail',
'Muscle Ache','Depressed')
symptom1 <- sample(symp, 500,TRUE)
symptom2 <- sample(symp, 500,TRUE)
symptom3 <- sample(symp, 500,TRUE)
Symptoms <- mChoice(symptom1, symptom2, symptom3, label='Primary Symptoms')
table(as.character(Symptoms))
# Note: In this example, some subjects have the same symptom checked
# multiple times; in practice these redundant selections would be NAs
# mChoice will ignore these redundant selections
f <- summaryM(age + sex + sbp + Symptoms ~ treatment, test=TRUE)
f
# trio of numbers represent 25th, 50th, 75th percentile
print(f, long=TRUE)
plot(f) # first specify options(grType='plotly') to use plotly
plot(f, conType='dot', prtest='P')
bpplt() # annotated example showing layout of bp plot
# Produce separate tables by country
f <- summaryM(age + sex + sbp + Symptoms ~ treatment + country,
groups='treatment', test=TRUE)
f
## Not run:
# getHdata(pbc)
# s5 <- summaryM(bili + albumin + stage + protime + sex +
# age + spiders ~ drug, data=pbc)
#
# print(s5, npct='both')
# # npct='both' : print both numerators and denominators
# plot(s5, which='categorical')
# Key(locator(1)) # draw legend at mouse click
# par(oma=c(3,0,0,0)) # leave outer margin at bottom
# plot(s5, which='continuous') # see also bpplotM
# Key2() # draw legend at lower left corner of plot
# # oma= above makes this default key fit the page better
#
# options(digits=3)
# w <- latex(s5, npct='both', here=TRUE, file='')
#
# options(grType='plotly')
# pbc <- upData(pbc, moveUnits = TRUE)
# s <- summaryM(bili + albumin + alk.phos + copper + spiders + sex ~
# drug, data=pbc, test=TRUE)
# html(s)
# a <- plot(s)
# a$Categorical
# a$Continuous
# plot(s, which='con')
# ## End(Not run)
Run the code above in your browser using DataLab