Drawing graphs

Our data

  • To illustrate making graphs, we need some data.
  • Data on 202 male and female athletes at the Australian Institute of Sport.
  • Variables:
    • categorical: Sex of athlete, sport they play
    • quantitative: height (cm), weight (kg), lean body mass, red and white blood cell counts, haematocrit and haemoglobin (blood), ferritin concentration, body mass index, percent body fat.
  • Values separated by tabs (which impacts reading in).

Preliminaries

  • Package:
library(tidyverse)
  • Use read_tsv (“tab-separated values”), like read_csv.
  • Data in ais.txt:
my_url <- "http://datafiles.ritsokiguess.site/ais.txt"
athletes <- read_tsv(my_url)

The data (some)

athletes

Types of graph

Depends on number and type of variables:

Categorical Quantitative Graph
1 0 bar chart
0 1 histogram
2 0 grouped bar charts
1 1 side-by-side boxplots
0 2 scatterplot
2 1 grouped boxplots
1 2 scatterplot with colour

With more (categorical) variables, might want separate plots by groups. These are called facets.

ggplot

  • R has a standard graphing procedure ggplot, that we use for all our graphs.
  • Use in different ways to get precise graph we want.
  • Let’s start with bar chart of the sports played by the athletes.

Bar chart

  • one categorical variable
  • count how many athletes play each Sport
  • Sport is x of graph
ggplot(athletes, aes(x = Sport)) + geom_bar()

The bar chart

Histogram of body mass index

  • one quantitative variable
  • count how many observations fall into intervals (of BMI)
  • BMI is x of graph
  • histogram needs number of bins. Choose it to show distribution shape clearly.
ggplot(athletes, aes(x = BMI)) + geom_histogram(bins = 10)

The histogram

Which sports are played by males and females?

  • two categorical variables Sport and Sex
  • grouped bar chart
  • one variable is x and other is fill
  • put bars side by side:
ggplot(athletes, aes(x = Sport, fill = Sex)) +
  geom_bar(position = "dodge")

Grouped bar chart

BMI by gender

  • one quantitative variable and one categorical
  • boxplot
  • for us, boxplots are vertical
  • quantitative is y and categorical x
ggplot(athletes, aes(x = Sex, y = BMI)) + geom_boxplot() 

The boxplot

Height vs. weight

  • two quantitative variables
  • scatterplot
  • “outcome” as y, “explanatory” as x
ggplot(athletes, aes(x = Ht, y = Wt)) + geom_point()

Scatterplot

With regression line

  • use geom_smooth to add regression lines or smooth trends
ggplot(athletes, aes(x = Ht, y = Wt)) +
  geom_point() + geom_smooth(method = "lm")

Scatterplot with regression line

BMI by sport and gender

  • one quantitative and two categorical
  • grouped boxplots
  • quantitative as y
  • one categorical as x, other as fill
  • can use colour instead of fill
ggplot(athletes, aes(x = Sport, y = BMI, fill = Sex)) +
  geom_boxplot()

Grouped boxplot with fill

Grouped boxplot with colour

Height and weight by gender

  • two quantitative variables and one categorical
  • scatterplot with colours for categories
  • x and y as for scatterplot, colour for categories
  • points have only an “outside”:
ggplot(athletes, aes(x = Ht, y = Wt, colour = Sex)) +
  geom_point()

Scatterplot with colours

Height by weight by gender for each sport

  • four variables, two quantitative, two categorical
  • “extra” categorical variable
  • use this (Sport) to make facets.
ggplot(athletes, aes(x = Ht, y = Wt, colour = Sex)) +
  geom_point() + facet_wrap(~Sport)

Facetted scatterplots

Filling each facet

Default uses same scale for each facet. To use different scales for each facet, this:

ggplot(athletes, aes(x = Ht, y = Wt, colour = Sex)) +
  geom_point() + facet_wrap(~Sport, scales = "free")

Facetted scatterplots

Another view of height vs weight

  • Think of Sex as “extra” categorical variable
  • turn into facets
ggplot(athletes, aes(x = Ht, y = Wt)) +
  geom_point() + facet_wrap(~ Sex)

Height vs weight alternative

Normal quantile plot

  • For assessing whether a quantitative variable has a normal distribution or not
  • Quantitative variable is sample for this.
ggplot(athletes, aes(sample = BMI)) + stat_qq() + 
  stat_qq_line()

The normal quantile plot

Comments

  • Data on \(y\)-axis
  • on \(x\)-axis, the \(z\)-scores you would expect if normal distribution correct
  • if the points follow the line, distribution is normal
  • the way in which the points don’t follow line tell you about how the distribution is not normal
  • in this case, the highest values are too high (long upper tail).

Facetting again

  • to do normal quantiles for each level of a categorical variable, use facets
  • male and female athletes’ BMI separately:
ggplot(athletes, aes(sample = BMI)) + stat_qq() + 
  stat_qq_line() + facet_wrap(~ Sex)

The normal quantile plots

Comments

  • The distribution of BMI for females is closer to normal, with only the highest few values being too high
  • The distribution of BMI values for males might even be right-skewed: not only are the upper values too high, but some of the lowest ones are not low enough.

More normal quantile plots

  • How straight does a normal quantile plot have to be?
  • There is randomness in real data, so even a normal quantile plot from normal data won’t look perfectly straight.
  • With a small sample, can look not very straight even from normal data.
  • Looking for systematic departure from a straight line; random wiggles ought not to concern us.
  • Look at some examples where we know the answer, so that we can see what to expect.
  • Code not shown here; look at lecture notes web page if you want to see it.

Normal data, large sample

The normal quantile plot

Normal data, small sample

The normal quantile plot

Somewhat right-skewed

The normal quantile plot

Very right-skewed

The normal quantile plot

Long tails

The normal quantile plot

Summary

On a normal quantile plot:

  • points following line (with some small wiggles): normal.
  • kind of deviation from a straight line indicates kind of nonnormality:
    • a few highest point(s) too high and/or lowest too low: outliers
    • else see how points at each end off the line:
Low \ High Too low Too high
Too low Skewed left Long tails
Too high Short tails Skewed right