Learn R Programming

descr (version 1.1.8)

crosstab: Cross tabulation with mosaic plot

Description

This function is a wrapper for CrossTable, adding a mosaic plot and making it easier to do a weighted cross-tabulation.

Usage

crosstab(dep, indep, weight = NULL,
         digits = list(expected = 1, prop = 3, percent = 1, others = 3),
         max.width = NA,
         expected = FALSE, prop.r = FALSE, prop.c = FALSE, prop.t = FALSE,
         prop.chisq = FALSE, chisq = FALSE, fisher = FALSE, mcnemar = FALSE,
         resid = FALSE, sresid = FALSE, asresid = FALSE,
         missing.include = FALSE, drop.levels = TRUE, format = "SPSS",
         cell.layout = TRUE, row.labels = !cell.layout,
         percent = (format == "SPSS" && !row.labels),
         total.r, total.c, dnn = "label", xlab = NULL,
         ylab = NULL, main = "", user.missing.dep, user.missing.indep,
         plot = getOption("descr.plot"), ...)

Arguments

dep, indep

Vectors in a matrix or a dataframe. dep should be the dependent variable, and indep should be the independent one.

weight

An optional vector for a weighted cross tabulation.

digits

See CrossTable.

max.width

See CrossTable.

expected

See CrossTable.

prop.r

See CrossTable.

prop.c

See CrossTable.

prop.t

See CrossTable.

prop.chisq

See CrossTable.

chisq

See CrossTable.

fisher

See CrossTable.

mcnemar

See CrossTable.

resid

See CrossTable.

sresid

See CrossTable.

asresid

See CrossTable.

missing.include

See CrossTable.

drop.levels

See CrossTable.

format

See CrossTable.

cell.layout

See CrossTable.

row.labels

See CrossTable.

percent

See CrossTable.

total.r

See CrossTable.

total.c

See CrossTable.

dnn

See CrossTable. If dnn = "label", then the "label" attribute of dep and indep will be used as the dimension names.

xlab

See plot.default.

ylab

See plot.default.

main

An overall title for the plot (see plot.default and title).

user.missing.dep

An optional character vector with the levels of dep that should be treated as missing values.

user.missing.indep

An optional character vector with the levels of indep that should be treated as missing values.

plot

Logical: if TRUE (default), a mosaic plot is produced. You may put

options(descr.plot = FALSE)

in your .Rprofile to change the default function behavior.

...

Further arguments to be passed to mosaicplot.

Author

Jakson A. Aquino jalvesaq@gmail.com

Details

crosstab invokes the CrossTable with all boolean options set to FALSE and "SPSS" as the default format option. The returned CrossTable object can be plotted as a mosaicplot. Note that the gray scale colors used by default in the mosaic plot do not have any statistical meaning. The colors are used only to ease the plot interpretation.

Differently from CrossTable, this function requires both dep and indep arguments. If you want an univariate tabulation, you should try either CrossTable or freq.

By default, if weight has decimals, the result of xtabs is rounded before being passed to CrossTable. If you prefer that the results are not rounded, add to your code:

options(descr.round.xtabs = FALSE)

See Also

CrossTable, plot.CrossTable, xtable.CrossTable.

Examples

Run this code
educ <- sample(c(1, 2), 200, replace = TRUE, prob = c(0.3, 0.7))
educ <- factor(educ, levels = c(1, 2), labels = c("Low", "High"))
opinion <- sample(c(1, 2, 9), 200, replace = TRUE,
                 prob = c(0.4, 0.55, 0.05))
opinion <- factor(opinion, levels = c(1, 2, 9),
                 labels = c("Disagree", "Agree", "Don't know"))
attr(educ, "label") <- "Education level"
attr(opinion, "label") <- "Opinion"
weight <- sample(c(10, 15, 19), 200, replace = TRUE)

crosstab(opinion, educ, xlab = "Education", ylab = "Opinion")
ct <- crosstab(opinion, educ, weight,
               dnn = c("Opinion", "Education"),
               user.missing.dep = "Don't know",
               expected = TRUE, prop.c = TRUE, prop.r = TRUE,
               plot = FALSE)
ct
plot(ct, inv.y = TRUE)

# Get the table of observed values as an object of class "table"
tab <- ct$tab
class(tab)
tab

# Get the complete cross table as "matrix"
complete.tab <- descr:::CreateNewTab(ct)
class(complete.tab)
complete.tab

## xtable support
library(xtable)

# Print ugly table
print(xtable(ct))

# Print pretty table
# Add to the preamble of your Rnoweb document:
# \usepackage{booktabs}
# \usepackage{multirow}
# \usepackage{dcolumn}
# \newcolumntype{d}{D{.}{.}{-1}}
print(xtable(ct, align = "llddd", multirow = TRUE, hline = TRUE,
             row.labels = TRUE, percent = FALSE,
             caption = "Opinion according to level of education"),
      booktabs = TRUE, include.rownames = FALSE,
      sanitize.text.function = function(x) x)

Run the code above in your browser using DataLab