4 Exploring categorical data

This chapter focuses on exploring categorical data using summary statistics and visualizations. The summaries and graphs presented in this chapter are created using statistical software; however, since this might be your first exposure to the concepts, we take our time in this chapter to detail how to create them. Where possible, we present multivariate plots; plots that visualize the relationship between multiple variables. Mastery of the content presented in this chapter will be crucial for understanding the methods and techniques introduced in the rest of the book.

In this chapter we will work with data on loans from Lending Club that you’ve previously seen in Chapter 1. The loan50 dataset from Chapter 1 represents a sample from a larger loan dataset called loans. This larger dataset contains information on 10,000 loans made through Lending Club. We will examine the relationship between homeownership, which for the loans data can take a value of rent, mortgage (owns but has a mortgage), or own, and app_type, which indicates whether the loan application was made with a partner or whether it was an individual application.

The loans_full_schema data can be found in the openintro R package. Based on the data in this dataset we have modified the homeownership and application_type variables. We will refer to this modified dataset as loans.

4.1 Contingency tables and bar plots

Table 4.1 summarizes two variables: application_type and homeownership. A table that summarizes data for two categorical variables in this way is called a contingency table. Each value in the table represents the number of times a particular combination of variable outcomes occurred.

For example, the value 3496 corresponds to the number of loans in the dataset where the borrower rents their home and the application type was by an individual. Row and column totals are also included. The row totals provide the total counts across each row and the column totals down each column. We can also create a table that shows only the overall percentages or proportions for each combination of categories, or we can create a table for a single variable, such as the one shown in Table 4.2 for the homeownership variable.

Table 4.1: A contingency table for application type and homeownership.
homeownership
application_type rent mortgage own Total
joint 362 950 183 1495
individual 3496 3839 1170 8505
Total 3858 4789 1353 10000
Table 4.2: A table summarizing the frequencies for each value of the homeownership variable: mortgage, own, and rent.
homeownership Count
rent 3858
mortgage 4789
own 1353
Total 10000

A bar plot is a common way to display a single categorical variable. The left panel of Figure 4.1 shows a bar plot for the homeownership variable. In the right panel, the counts are converted into proportions, showing the proportion of observations that are in each level.

Two bar plots: the left panel shows the counts, and the right panel shows the proportions of values of the homeownership variable.

Figure 4.1: Two bar plots: the left panel shows the counts, and the right panel shows the proportions of values of the homeownership variable.

4.2 Visualizing two categorical variables

4.2.1 Bar plots with two variables

We can display the distributions of two categorical variables on a bar plot concurrently. Such plots are generally useful for visualizing the relationship between two categorical variables. Figure 4.2 shows three such plots that visualize the relationship between homeownership and application_type variables. Plot A in Figure 4.2 is a stacked bar plot. This plot most clearly displays that loan applicants most commonly live in mortgaged homes. It is difficult to say, based on this plot alone, how different application types vary across the levels of homeownership. Plot B is a dodged bar plot. This plot most clearly displays that within each level of homeownership, individual applications are more common than joint applications. Finally, plot C is a standardized bar plot (also known as filled bar plot). This plot most clearly displays that joint applications are most common among loans for applicants who live in mortgaged homes, compared to renters and owners. This type of visualization is helpful in understanding the fraction of individual or joint loan applications for borrowers in each level of homeownership. Additionally, since the proportions of joint and individual loans vary across the groups, we can conclude that the two variables are associated for this sample.

Three bar plots (stacked, dodged, and standardized) displaying homeownership and application type variables.

Figure 4.2: Three bar plots (stacked, dodged, and standardized) displaying homeownership and application type variables.

Examine the three bar plots in Figure 4.2. When is the stacked, dodged, or standardized bar plot the most useful?


The stacked bar plot is most useful when it’s reasonable to assign one variable as the explanatory variable (here homeownership) and the other variable as the response (here application_type) since we are effectively grouping by one variable first and then breaking it down by the others.

Dodged bar plots are more agnostic in their display about which variable, if any, represents the explanatory and which the response variable. It is also easy to discern the number of cases in each of the six different group combinations. However, one downside is that it tends to require more horizontal space; the narrowness of Plot B compared to the other two in Figure 4.2 makes the plot feel a bit cramped. Additionally, when two groups are of very different sizes, as we see in the group own relative to either of the other two groups, it is difficult to discern if there is an association between the variables.

The standardized stacked bar plot is helpful if the primary variable in the stacked bar plot is relatively imbalanced, e.g., the category has only a third of the observations in the category, making the simple stacked bar plot less useful for checking for an association. The major downside of the standardized version is that we lose all sense of how many cases each of the bars represents.

4.2.2 Mosaic plots

A mosaic plot is a visualization technique suitable for contingency tables that resembles a standardized stacked bar plot with the benefit that we still see the relative group sizes of the primary variable as well.

To get started in creating our first mosaic plot, we’ll break a square into columns for each category of the variable, with the result shown in Plot A of Figure 4.3. Each column represents a level of homeownership, and the column widths correspond to the proportion of loans in each of those categories. For instance, there are fewer loans where the borrower is an owner than where the borrower has a mortgage. In general, mosaic plots use box areas to represent the number of cases in each category.

Plot B in Figure 4.3 displays the relationship between homeownership and application type. Each column is split proportionally to the number of loans from individual and joint borrowers. For example, the second column represents loans where the borrower has a mortgage, and it was divided into individual loans (upper) and joint loans (lower). As another example, the bottom segment of the third column represents loans where the borrower owns their home and applied jointly, while the upper segment of this column represents borrowers who are homeowners and filed individually. We can again use this plot to see that the homeownership and application_type variables are associated, since some columns are divided in different vertical locations than others, which was the same technique used for checking an association in the standardized stacked bar plot.

The mosaic plots: one for homeownership alone and the other displaying the relationship between homeownership and application type.

Figure 4.3: The mosaic plots: one for homeownership alone and the other displaying the relationship between homeownership and application type.

In Figure 4.3, we chose to first split by the homeowner status of the borrower. However, we could have instead first split by the application type, as in Figure 4.4. Like with the bar plots, it’s common to use the explanatory variable to represent the first split in a mosaic plot, and then for the response to break up each level of the explanatory variable if these labels are reasonable to attach to the variables under consideration.

Mosaic plot where loans are grouped by homeownership after they have been divided into individual and joint application types.

Figure 4.4: Mosaic plot where loans are grouped by homeownership after they have been divided into individual and joint application types.

4.3 Row and column proportions

In the previous sections we inspected visualizations of two categorical variables in bar plots and mosaic plots. However, we have not discussed how the values in the bar and mosaic plots that show proportions are calculated. In this section we will investigate fractional breakdown of one variable in another and we can modify our contingency table to provide such a view. Table 4.3 shows row proportions for Table 4.1, which are computed as the counts divided by their row totals. The value 3496 at the intersection of individual and rent is replaced by \(3496 / 8505 = 0.411,\) i.e., 3496 divided by its row total, 8505. So, what does 0.411 represent? It corresponds to the proportion of individual applicants who rent.

Table 4.3: A contingency table with row proportions for the application type and homeownership variables.
homeownership
application_type rent mortgage own Total
joint 0.242 0.635 0.122 1
individual 0.411 0.451 0.138 1

A contingency table of the column proportions is computed in a similar way, where each is computed as the count divided by the corresponding column total. Table 4.4 shows such a table, and here the value 0.906 indicates that 90.6% of renters applied as individuals for the loan. This rate is higher compared to loans from people with mortgages (80.2%) or who own their home (86.5%). Because these rates vary between the three levels of homeownership (rent, mortgage, own), this provides evidence that app_type and homeownership variables may be associated.

Table 4.4: A contingency table with column proportions for the application type and homeownership variables.
homeownership
application_type rent mortgage own
joint 0.094 0.198 0.135
individual 0.906 0.802 0.865
Total 1.000 1.000 1.000

Row and column proportions can also be thought of as conditional proportions as they tell us about the proportion of observations in a given level of a categorical variable conditional on the level of another categorical variable.

We could also have checked for an association between application_type and homeownership in Table 4.3 using row proportions. When comparing these row proportions, we would look down columns to see if the fraction of loans where the borrower rents, has a mortgage, or owns varied across the application types.

What does 0.451 represent in Table 4.3? What does 0.802 represent in Table 4.4?41

What does 0.122 represent in Table 4.3? What does 0.135 represent in Table 4.4?42

Data scientists use statistics to build email spam filters. By noting specific characteristics of an email, a data scientist may be able to classify some emails as spam or not spam with high accuracy. One such characteristic is whether the email contains no numbers, small numbers, or big numbers. Another characteristic is the email format, which indicates whether an email has any HTML content, such as bolded text. We’ll focus on email format and spam status using the dataset; these variables are summarized in a contingency table in Table 4.5. Which would be more helpful to someone hoping to classify email as spam or regular email for this table: row or column proportions?


A data scientist would be interested in how the proportion of spam changes within each email format. This corresponds to column proportions: the proportion of spam in plain text emails and the proportion of spam in HTML emails.

If we generate the column proportions, we can see that a higher fraction of plain text emails are spam (\(209/1195 = 17.5\%\)) than compared to HTML emails (\(158/2726 = 5.8\%\)). This information on its own is insufficient to classify an email as spam or not spam, as over 80% of plain text emails are not spam. Yet, when we carefully combine this information with many other characteristics, we stand a reasonable chance of being able to classify some emails as spam or not spam with confidence. This example points out that row and column proportions are not equivalent. Before settling on one form for a table, it is important to consider each to ensure that the most useful table is constructed. However, sometimes it simply isn’t clear which, if either, is more useful.

The email data can be found in the openintro R package.

Table 4.5: A contingency table for spam and format
spam HTML text Total
not spam 2568 986 3554
spam 158 209 367
Total 2726 1195 3921

Look back to Table 4.3 and Table 4.4. Are there any obvious scenarios where one might be more useful than the other?


None that we think are obvious! What is distinct about the email example is that the two loan variables do not have a clear explanatory-response variable relationship that we might hypothesize. Usually it is most useful to “condition” on the explanatory variable. For instance, in the email example, the email format was seen as a possible explanatory variable of whether the message was spam, so we would find it more interesting to compute the relative frequencies (proportions) for each email format.

4.4 Pie charts

A pie chart is shown in Figure 4.5 alongside a bar plot representing the same information. Pie charts can be useful for giving a high-level overview to show how a set of cases break down. However, it is also difficult to decipher certain details in a pie chart. For example, it’s not immediately obvious that there are more loans where the borrower has a mortgage than rent when looking at the pie chart, while this detail is very obvious in the bar plot.

A pie chart and bar plot of homeownership.

Figure 4.5: A pie chart and bar plot of homeownership.

Pie charts can work well when the goal is to visualize a categorical variable with very few levels, and especially if each level represents a simple fraction (e.g., one-half, one-quarter, etc.). However, they can be quite difficult to read when they are used to visualize a categorical variable with many levels. For example, the pie chart and the bar plot in Figure 4.6 both represent the distribution of loan grades (A through G). In this case, it is far easier to compare the counts of each loan grade using the bar plot than the pie chart.

A pie chart and bar plot of loan grades.

Figure 4.6: A pie chart and bar plot of loan grades.

4.5 Waffle charts

Another useful technique of visualizing categorical data is a waffle chart. Waffle charts can be used to communicate the proportion of the data that falls into each level of a categorical variable. Just like with pie charts, they work best when the number of levels represented is low. However, unlike pie charts, they can make it easier to compare proportions that represent non-simple fractions. Figure 4.7 displays two examples of waffle charts: one for the distribution of homeownership and the other for the distribution of loan status.

Plot A: Waffle chart of homeownership, with levels rent, mortgage, and own. Plot B: Waffle chart of loan status, with levels current, fully paid, in grade period, and late.

Figure 4.7: Plot A: Waffle chart of homeownership, with levels rent, mortgage, and own. Plot B: Waffle chart of loan status, with levels current, fully paid, in grade period, and late.

4.6 Comparing numerical data across groups

Some of the more interesting investigations can be considered by examining numerical data across groups. In this section we will expand on a few methods we have already seen to make plots for numerical data from multiple groups on the same graph as well as introduce a few new methods for comparing numerical data across groups.

We will revisit the county dataset and compare the median household income for counties that gained population from 2010 to 2017 versus counties that had no gain. While we might like to make a causal connection between income and population growth, remember that these are observational data and so such an interpretation would be, at best, half-baked.

We have data on 3142 counties in the United States. We are missing 2017 population data from 3 of them, and of the remaining 3139 counties, in 1541 the population increased from 2010 to 2017 and in the remaining 1598 the population decreased. Table 4.6 shows a sample of 5 observations from each group.

Table 4.6: The median household income from a random sample of 5 counties with population gain between 2010 to 2017 and another random sample of 5 counties with no population gain.
State County Population change (%) Gain / No gain Median household income
Arkansas Izard County 2.13 gain 39135
Georgia Jackson County 10.17 gain 57999
Oregon Hood River County 3.41 gain 57269
Texas Montague County 0.75 gain 46592
Virginia Appomattox County 2.38 gain 54875
Kentucky Ballard County -2.62 no gain 42988
Kentucky Fleming County -0.71 no gain 41095
Kentucky Letcher County -5.13 no gain 30293
Maine Penobscot County -0.73 no gain 47886
Virginia Richmond County -0.19 no gain 47341

Color can be used to split histograms (see Section 5.3 for an introduction to histograms) for numerical variables by levels of a categorical variable. An example of this is shown in Plot A of Figure 4.8. The side-by-side box plot is another traditional tool for comparing across groups. An example is shown in Plot B of Figure 4.8, where there are two box plots (see Section 5.5 for an introduction to box plots), one for each group, placed into one plotting window and drawn on the same scale.

Histograms (Plot A) and side by-side box plots (Plot B) for median household income, where counties are split by whether there was a population gain or not.

Figure 4.8: Histograms (Plot A) and side by-side box plots (Plot B) for median household income, where counties are split by whether there was a population gain or not.

Use the plots in Figure 4.8 to compare the incomes for counties across the two groups. What do you notice about the approximate center of each group? What do you notice about the variability between groups? Is the shape relatively consistent between groups? How many prominent modes are there for each group?43

What components of each plot in Figure 4.8 do you find most useful?44

Another useful visualization for comparing numerical data across groups is a ridge plot, which combines density plots (see Section 5.3 for an introduction to density plots) for various groups drawn on the same scale in a single plotting window. Figure 4.9 displays a ridge plot for the distribution of median household income in counties, split by whether there was a population gain or not.

Ridge plot for median household income, where counties are split by whether there was a population gain or not.

Figure 4.9: Ridge plot for median household income, where counties are split by whether there was a population gain or not.

What components of the ridge plot in Figure 4.9 do you find most useful compared to those in Figure 4.8?45

One last visualization technique we’ll highlight for comparing numerical data across groups is faceting. In this technique we split (facet) the graphical display of the data across plotting windows based on groups. Plot A in Figure 4.10 displays the same information as Plot A in Figure 4.8, however here the distributions of median household income for counties with and without population gain are faceted across two plotting windows. We preserve the same scale on the x and y axes for easier comparison. An advantage of this approach is that it extends to splitting the data across levels of two categorical variables, which allows for displaying relationships between three variables. In Plot B in Figure 4.10 we have now split the data into four groups using the pop_change and metro variables:

  • top left represents counties that are not in a metropolitan area with population gain,
  • top right represents counties that are in a metropolitan area with population gain,
  • bottom left represents counties that are not in a metropolitan area without population gain, and finally
  • bottom right represents counties that are in a metropolitan area without population gain.
Distribution of median income in counties using faceted histograms: Plot A facets by whether there was a population gain or not and Plot B facets by both population gain and whether the county is in a metropolitan area.

Figure 4.10: Distribution of median income in counties using faceted histograms: Plot A facets by whether there was a population gain or not and Plot B facets by both population gain and whether the county is in a metropolitan area.

We can continue building upon this visualization to add one more variable, median_edu, which is the median education level in the county. In Figure 4.11, we represent median education level using color, where pink (solid line) represents counties where the median education level is high school diploma, yellow (dashed line) is some college degree, and red (dotted line) is Bachelor’s.

Distribution of median income in counties using a ridge plot, faceted by whether the county had a population gain or not as well as whether the county is in a metropolitan area and colored by the median education level in the county.

Figure 4.11: Distribution of median income in counties using a ridge plot, faceted by whether the county had a population gain or not as well as whether the county is in a metropolitan area and colored by the median education level in the county.

Based on Figure 4.11, what can you say about how median household income in counties vary depending on population gain/no gain, metropolitan area/not, and median degree?46

4.7 Chapter review

4.7.1 Summary

Fluently working with categorical variables is an important skill for data analysts. In this chapter we have introduced different visualizations and numerical summaries applied to categorical variables. The graphical visualizations are even more descriptive when two variables are presented simultaneously. We presented bar plots, mosaic plots, pie charts, and estimations of conditional proportions.

4.7.2 Terms

We introduced the following terms in the chapter. If you’re not sure what some of these terms mean, we recommend you go back in the text and review their definitions. We are purposefully presenting them in alphabetical order, instead of in order of appearance, so they will be a little more challenging to locate. However, you should be able to easily spot them as bolded text.

column proportions faceted plot row totals
column totals filled bar plot side-by-side box plot
conditional proportions mosaic plot stacked bar plot
contingency table ridge plot standardized bar plot
dodged bar plot row proportions

4.8 Exercises

Answers to odd numbered exercises can be found in Appendix A.4.

  1. Antibiotic use in children. The bar plot and the pie chart below show the distribution of pre-existing medical conditions of children involved in a study on the optimal duration of antibiotic use in treatment of tracheitis, which is an upper respiratory infection.47

    1. What features are apparent in the bar plot but not in the pie chart?

    2. What features are apparent in the pie chart but not in the bar plot?

    3. Which graph would you prefer to use for displaying these categorical data?

  2. Views on immigration. Nine-hundred and ten (910) randomly sampled registered voters from Tampa, FL were asked if they thought workers who have illegally entered the US should be (i) allowed to keep their jobs and apply for US citizenship, (ii) allowed to keep their jobs as temporary guest workers but not allowed to apply for US citizenship, or (iii) lose their jobs and have to leave the country. The results of the survey by political ideology are shown below.48

    Response

    Conservative

    Liberal

    Moderate

    Total

    Apply for citizenship

    57

    101

    120

    278

    Guest worker

    121

    28

    113

    262

    Leave the country

    179

    45

    126

    350

    Not sure

    15

    1

    4

    20

    Total

    372

    175

    363

    910

    1. What percent of these Tampa, FL voters identify themselves as conservatives?

    2. What percent of these Tampa, FL voters are in favor of the citizenship option?

    3. What percent of these Tampa, FL voters identify themselves as conservatives and are in favor of the citizenship option?

    4. What percent of these Tampa, FL voters who identify themselves as conservatives are also in favor of the citizenship option? What percent of moderates share this view? What percent of liberals share this view?

    5. Do political ideology and views on immigration appear to be associated? Explain your reasoning.

    6. Conjecture other possible variables that might explain the potential relationship between these two variables.

  3. Black Lives Matter. A Washington Post-Schar School poll conducted in the United States in June 2020, among a random national sample of 1,006 adults, asked respondents whether they support or oppose protests following George Floyd’s killing that have taken place in cities across the US. The survey also collected information on the age of the respondents. (Washington Post 2020) The results are summarized in the stacked bar plot below.

    1. Based on the stacked bar plot, do views on the protests and age appear to be associated? Explain your reasoning.

    2. Conjecture other possible variables that might explain the potential association between these two variables.

  4. Raise taxes. A random sample of registered voters nationally were asked whether they think it’s better to raise taxes on the rich or raise taxes on the poor. The survey also collected information on the political party affiliation of the respondents. (Public Policy Polling 2015)

    1. Based on the stacked bar plot shown above, do views on raising taxes and political affiliation appear to be associated? Explain your reasoning.

    2. Conjecture other possible variables that might explain the potential association between these two variables.

  5. Heart transplant data display. The Stanford University Heart Transplant Study was conducted to determine whether an experimental heart transplant program increased lifespan. Each patient entering the program was officially designated a heart transplant candidate, meaning that he was gravely ill and might benefit from a new heart. Patients were randomly assigned into treatment and control groups. Patients in the treatment group received a transplant, and those in the control group did not. The visualization below displays two different versions of the data.49 (Turnbull, Brown, and Hu 1974)

    1. Provide one aspect of the two-group comparison that is easier to see from the stacked bar plot (left)?

    2. Provide one aspect of the two-group comparison that is easier to see from the standardized bar plot (right)?

    3. For the Heart Transplant Study which of those aspects would be more important to display? That is, which bar plot would be better as a data visualization?

  6. Shipping holiday gifts data display. A local news survey asked 500 randomly sampled Los Angeles residents which shipping carrier they prefer to use for shipping holiday gifts. The table below shows the distribution of responses by age group as well as the expected counts for each cell (shown in italics).

    1. Which graph (top or bottom) would you use to understand the shipping choices of people of different ages?

    2. Which graph (top or bottom) would you use to understand the age distribution across different types of shipping choices?

    3. A new shipping company would like to market to people over the age of 55. Who will be their biggest competitor?

    4. FedEx would like to reach out to grow their market share to balance the age demographics of FedEx users. To what age group should FedEx market?