Prof. Eric A. Suess

So how should you complete your homework for this class?

Homework 1

Read: Chapter 1, 2, 3
Download an install the current version of R and RStudio.
Do 3.2.4 Exercises 1, 2, 3, 4, 5
Do 3.3.1 Exercises 1, 2, 3, 4, 6
Do 3.5.1 Exercises 1, 2, 4

3.2.4 Exercises

1.

We see nothing. Well actually we see the first layer of a ggplot2 plot.

library(tidyverse)
ggplot(data = mpg)

2.

By viewing the mpg dataframe we see there are 234 rows and 11 columns.

mpg

3.

The variable drv has levels: f = front-wheel drive, r = rear wheel drive, 4 = 4wd

glimpse(mpg)
Observations: 234
Variables: 11
$ manufacturer <chr> "audi", "audi", "audi", "audi", "audi", "audi", "audi", "audi", "audi", "...
$ model        <chr> "a4", "a4", "a4", "a4", "a4", "a4", "a4", "a4 quattro", "a4 quattro", "a4...
$ displ        <dbl> 1.8, 1.8, 2.0, 2.0, 2.8, 2.8, 3.1, 1.8, 1.8, 2.0, 2.0, 2.8, 2.8, 3.1, 3.1...
$ year         <int> 1999, 1999, 2008, 2008, 1999, 1999, 2008, 1999, 1999, 2008, 2008, 1999, 1...
$ cyl          <int> 4, 4, 4, 4, 6, 6, 6, 4, 4, 4, 4, 6, 6, 6, 6, 6, 6, 8, 8, 8, 8, 8, 8, 8, 8...
$ trans        <chr> "auto(l5)", "manual(m5)", "manual(m6)", "auto(av)", "auto(l5)", "manual(m...
$ drv          <chr> "f", "f", "f", "f", "f", "f", "f", "4", "4", "4", "4", "4", "4", "4", "4"...
$ cty          <int> 18, 21, 20, 21, 16, 18, 18, 18, 16, 20, 19, 15, 17, 17, 15, 15, 17, 16, 1...
$ hwy          <int> 29, 29, 31, 30, 26, 26, 27, 26, 25, 28, 27, 25, 25, 25, 25, 24, 25, 23, 2...
$ fl           <chr> "p", "p", "p", "p", "p", "p", "p", "p", "p", "p", "p", "p", "p", "p", "p"...
$ class        <chr> "compact", "compact", "compact", "compact", "compact", "compact", "compac...

4.

Scatterplot of y = hwy versus x = cyl. The average highway miles per gallon goes down as the number of cylinders increases.

ggplot(mpg, aes(y = hwy, x = cyl)) +
  geom_point()

5.

This is not useful because there are many observations on each point in the plot. Plotting categorical variables in a scatterplot is not useful. It would be better to make a continency table.

ggplot(mpg, aes(y = class, x = drv)) +
  geom_point()

count(mpg, drv, class)

3.3.1 Exercises

1.

If color is in the aes as a mapping it would need a variable from the dataframe to give the plot different colors. For example, putting in drv as the color. Alternatively, to change all of the points to blue, the color needs to be outside of the aes.

ggplot(data = mpg) + 
  geom_point(mapping = aes(x = displ, y = hwy, color = "blue"))

ggplot(data = mpg) + 
  geom_point(mapping = aes(x = displ, y = hwy, color = class))

ggplot(data = mpg) + 
  geom_point(mapping = aes(x = displ, y = hwy), color = "blue")

2.

The categorical variables are the ones with under the variable names. The continuous variables are the ones with under them.

mpg
?mpg
glimpse(mpg)
Observations: 234
Variables: 11
$ manufacturer <chr> "audi", "audi", "audi", "audi", "audi", "audi", "audi", "audi", "audi", ...
$ model        <chr> "a4", "a4", "a4", "a4", "a4", "a4", "a4", "a4 quattro", "a4 quattro", "a...
$ displ        <dbl> 1.8, 1.8, 2.0, 2.0, 2.8, 2.8, 3.1, 1.8, 1.8, 2.0, 2.0, 2.8, 2.8, 3.1, 3....
$ year         <int> 1999, 1999, 2008, 2008, 1999, 1999, 2008, 1999, 1999, 2008, 2008, 1999, ...
$ cyl          <int> 4, 4, 4, 4, 6, 6, 6, 4, 4, 4, 4, 6, 6, 6, 6, 6, 6, 8, 8, 8, 8, 8, 8, 8, ...
$ trans        <chr> "auto(l5)", "manual(m5)", "manual(m6)", "auto(av)", "auto(l5)", "manual(...
$ drv          <chr> "f", "f", "f", "f", "f", "f", "f", "4", "4", "4", "4", "4", "4", "4", "4...
$ cty          <int> 18, 21, 20, 21, 16, 18, 18, 18, 16, 20, 19, 15, 17, 17, 15, 15, 17, 16, ...
$ hwy          <int> 29, 29, 31, 30, 26, 26, 27, 26, 25, 28, 27, 25, 25, 25, 25, 24, 25, 23, ...
$ fl           <chr> "p", "p", "p", "p", "p", "p", "p", "p", "p", "p", "p", "p", "p", "p", "p...
$ class        <chr> "compact", "compact", "compact", "compact", "compact", "compact", "compa...

3.

Map a continuous variable to color, size, and shape. How do these aesthetics behave differently for categorical vs. continuous variables?

Brighter colors are used for higher values of color. Bigger shapes are used for higher values of size. A continuous variable cannot be used for shape.

ggplot(data = mpg) + 
  geom_point(mapping = aes(x = cyl, y = hwy, color = displ))

ggplot(data = mpg) + 
  geom_point(mapping = aes(x = cyl, y = hwy, size = displ))

# ggplot(data = mpg) + 
#   geom_point(mapping = aes(x = cyl, y = hwy, shape = displ))  # gives a error
ggplot(data = mpg) + 
  geom_point(mapping = aes(x = cyl, y = hwy, shape = drv))

4.

Can use two mappings for the same variable. This is not good practice!

ggplot(data = mpg) + 
  geom_point(mapping = aes(x = cyl, y = hwy, size = drv, shape = drv))

6.

What happens if you map an aesthetic to something other than a variable name, like aes(colour = displ < 5)?

The color changes for the TRUE and FALSE values of the inequality.

ggplot(data = mpg) + 
  geom_point(mapping = aes(x = cyl, y = hwy, colour = displ < 5))

3.5.1 Exercises

1.

Is a continuous variable is used, each value of the variable is used. So potentially many many plots will be made. This may not be useful. Faceting should be done with a categorical variable.

ggplot(data = mpg) + 
  geom_point(mapping = aes(y = hwy, x = cyl)) + 
  facet_wrap(~ displ, nrow = 2)

2.

The missing cells in the plot means there is no data available for that combination of values of the variables.

Switch x and y in the second plot to see the relationship.

ggplot(data = mpg) + 
  geom_point(mapping = aes(x = displ, y = hwy)) + 
  facet_grid(drv ~ cyl)

ggplot(data = mpg) + 
  geom_point(mapping = aes(y = drv, x = cyl))

4.

Compare to 3.3.1 Exercise 1.

Facetting make is easier to see where the data is relative to the other variable used for color.

ggplot(data = mpg) + 
  geom_point(mapping = aes(x = displ, y = hwy)) + 
  facet_wrap(~ class, nrow = 2)

ggplot(data = mpg) + 
  geom_point(mapping = aes(x = displ, y = hwy, color = class)) + 
  facet_wrap(~ class, nrow = 2)

LS0tCnRpdGxlOiAnU3RhdC4gNDUwIFNlY3Rpb24gMSBvciAyOiBIb21ld29yayAxJwpvdXRwdXQ6CiAgaHRtbF9kb2N1bWVudDoKICAgIGRmX3ByaW50OiBwYWdlZAogIGh0bWxfbm90ZWJvb2s6IGRlZmF1bHQKICBwZGZfZG9jdW1lbnQ6IGRlZmF1bHQKLS0tCgoqKlByb2YuIEVyaWMgQS4gU3Vlc3MqKgoKU28gaG93IHNob3VsZCB5b3UgY29tcGxldGUgeW91ciBob21ld29yayBmb3IgdGhpcyBjbGFzcz8KCi0gRmlyc3QgdGhpbmcgdG8gZG8gaXMgdHlwZSBhbGwgb2YgeW91ciBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcHJvYmxlbXMgeW91IGRvIGluIHRoZSB0ZXh0IHBhcnQgb2YgeW91ciBSIE5vdGVib29rLgotIFNlY29uZCB0aGluZyB0byBkbyBpcyB0eXBlIGFsbCBvZiB5b3VyIFIgY29kZSBpbnRvIFIgY2h1bmtzIHRoYXQgY2FuIGJlIHJ1bi4KLSBJZiB5b3UgbG9hZCB0aGUgdGlkeXZlcnNlIGluIGFuIFIgTm90ZWJvb2sgY2h1bmNrLCBiZSBzdXJlIHRvIGluY2x1ZGUgdGhlICJtZXNzYWdlID0gRkFMU0UiIGluIHRoZSB7cn0sIHNvIHtyIG1lc3NhZ2UgPSBGQUxTRX0uCi0gTGFzdCB0aGluZyBpcyB0byBzcGVsbCBjaGVjayB5b3VyIFIgTm90ZWJvb2suICBFZGl0ID4gQ2hlY2sgU3BlbGxpbmcuLi4gb3IgaGl0IHRoZSBGNyBrZXkuCgojIEhvbWV3b3JrIDEKCgogICAgUmVhZDogQ2hhcHRlciAxLCAyLCAzCiAgICBEb3dubG9hZCBhbiBpbnN0YWxsIHRoZSBjdXJyZW50IHZlcnNpb24gb2YgUiBhbmQgUlN0dWRpby4KICAgIERvIDMuMi40IEV4ZXJjaXNlcyAxLCAyLCAzLCA0LCA1CiAgICBEbyAzLjMuMSBFeGVyY2lzZXMgMSwgMiwgMywgNCwgNgogICAgRG8gMy41LjEgRXhlcmNpc2VzIDEsIDIsIDQKClxuZXdwYWdlCgojIDMuMi40IEV4ZXJjaXNlcwoKIyMgMS4gIAoKV2Ugc2VlIG5vdGhpbmcuICBXZWxsIGFjdHVhbGx5IHdlIHNlZSB0aGUgZmlyc3QgbGF5ZXIgb2YgYSBnZ3Bsb3QyIHBsb3QuCgpgYGB7ciBtZXNzYWdlID0gRkFMU0V9CmxpYnJhcnkodGlkeXZlcnNlKQoKZ2dwbG90KGRhdGEgPSBtcGcpCmBgYAoKXG5ld3BhZ2UKCiMgMi4gCgpCeSB2aWV3aW5nIHRoZSBtcGcgZGF0YWZyYW1lIHdlIHNlZSB0aGVyZSBhcmUgMjM0IHJvd3MgYW5kIDExIGNvbHVtbnMuCgpgYGB7cn0KbXBnCmBgYAoKXG5ld3BhZ2UKCiMgMy4gIAoKVGhlIHZhcmlhYmxlIGRydiBoYXMgbGV2ZWxzOiBmID0gZnJvbnQtd2hlZWwgZHJpdmUsIHIgPSByZWFyIHdoZWVsIGRyaXZlLCA0ID0gNHdkCgpgYGB7cn0KaGVscChtcGcpICAjIG9wZW5zIHRoZSBoZWxwIGZpbGUKCj9tcGcgICMgYW5vdGhlciB3YXkgdG8gb3BlbiB0aGUgaGVscCBmaWxlLgoKc3RyKG1wZykgICMgdHJhZGl0aW9uYWwgd2F5IHRvIGxvb2sgYXQgdGhlIHZhcmlhYmxlcyBpbiBhIGRhdGFmcmFtZQoKZ2xpbXBzZShtcGcpICAjIHRoZSB3YXkgdG8gbG9vayBhdCB0aGUgdmFyaWFibGVzIGluIGEgdGliYmxlCgpWaWV3KG1wZykgICMgb3BlbnMgdGhlIGRhdGEgaW4gYSBzcHJlYWRzaGVldCBpbiBSU3R1ZGlvCmBgYAoKXG5ld3BhZ2UKCiMgNC4gCgpTY2F0dGVycGxvdCBvZiB5ID0gaHd5IHZlcnN1cyB4ID0gY3lsLiAgVGhlIGF2ZXJhZ2UgaGlnaHdheSBtaWxlcyBwZXIgZ2FsbG9uIGdvZXMgZG93biBhcyB0aGUgbnVtYmVyIG9mIGN5bGluZGVycyBpbmNyZWFzZXMuCgpgYGB7cn0KZ2dwbG90KG1wZywgYWVzKHkgPSBod3ksIHggPSBjeWwpKSArCiAgZ2VvbV9wb2ludCgpCmBgYAoKXG5ld3BhZ2UKCiMgNS4KClRoaXMgaXMgbm90IHVzZWZ1bCBiZWNhdXNlIHRoZXJlIGFyZSBtYW55IG9ic2VydmF0aW9ucyBvbiBlYWNoIHBvaW50IGluIHRoZSBwbG90LiAgUGxvdHRpbmcgY2F0ZWdvcmljYWwgdmFyaWFibGVzIGluIGEgc2NhdHRlcnBsb3QgaXMgbm90IHVzZWZ1bC4gIEl0IHdvdWxkIGJlIGJldHRlciB0byBtYWtlIGEgY29udGluZW5jeSB0YWJsZS4KCgpgYGB7cn0KZ2dwbG90KG1wZywgYWVzKHkgPSBjbGFzcywgeCA9IGRydikpICsKICBnZW9tX3BvaW50KCkKCmNvdW50KG1wZywgZHJ2LCBjbGFzcykKYGBgCgpcbmV3cGFnZQoKIyAzLjMuMSBFeGVyY2lzZXMKCiMjIDEuCgpJZiBjb2xvciBpcyBpbiB0aGUgYWVzIGFzIGEgbWFwcGluZyBpdCB3b3VsZCBuZWVkIGEgdmFyaWFibGUgZnJvbSB0aGUgZGF0YWZyYW1lIHRvIGdpdmUgdGhlIHBsb3QgZGlmZmVyZW50IGNvbG9ycy4gIEZvciBleGFtcGxlLCBwdXR0aW5nIGluIGRydiBhcyB0aGUgY29sb3IuICBBbHRlcm5hdGl2ZWx5LCB0byBjaGFuZ2UgYWxsIG9mIHRoZSBwb2ludHMgdG8gYmx1ZSwgdGhlIGNvbG9yIG5lZWRzIHRvIGJlIG91dHNpZGUgb2YgdGhlIGFlcy4KCmBgYHtyfQpnZ3Bsb3QoZGF0YSA9IG1wZykgKyAKICBnZW9tX3BvaW50KG1hcHBpbmcgPSBhZXMoeCA9IGRpc3BsLCB5ID0gaHd5LCBjb2xvciA9ICJibHVlIikpCgpnZ3Bsb3QoZGF0YSA9IG1wZykgKyAKICBnZW9tX3BvaW50KG1hcHBpbmcgPSBhZXMoeCA9IGRpc3BsLCB5ID0gaHd5LCBjb2xvciA9IGNsYXNzKSkKCmdncGxvdChkYXRhID0gbXBnKSArIAogIGdlb21fcG9pbnQobWFwcGluZyA9IGFlcyh4ID0gZGlzcGwsIHkgPSBod3kpLCBjb2xvciA9ICJibHVlIikKYGBgCgpcbmV3cGFnZQoKIyMgMi4KClRoZSBjYXRlZ29yaWNhbCB2YXJpYWJsZXMgYXJlIHRoZSBvbmVzIHdpdGggPGNocj4gdW5kZXIgdGhlIHZhcmlhYmxlIG5hbWVzLiAgVGhlIGNvbnRpbnVvdXMgdmFyaWFibGVzIGFyZSB0aGUgb25lcyB3aXRoIDxkYmw+IHVuZGVyIHRoZW0uCgoKYGBge3J9Cm1wZwoKP21wZwoKZ2xpbXBzZShtcGcpCmBgYAoKXG5ld3BhZ2UKCiMjIDMuCgpNYXAgYSBjb250aW51b3VzIHZhcmlhYmxlIHRvIGNvbG9yLCBzaXplLCBhbmQgc2hhcGUuIEhvdyBkbyB0aGVzZSBhZXN0aGV0aWNzIGJlaGF2ZSBkaWZmZXJlbnRseSBmb3IgY2F0ZWdvcmljYWwgdnMuIGNvbnRpbnVvdXMgdmFyaWFibGVzPwoKQnJpZ2h0ZXIgY29sb3JzIGFyZSB1c2VkIGZvciBoaWdoZXIgdmFsdWVzIG9mIGNvbG9yLiAgQmlnZ2VyIHNoYXBlcyBhcmUgdXNlZCBmb3IgaGlnaGVyIHZhbHVlcyBvZiBzaXplLiAgQSBjb250aW51b3VzIHZhcmlhYmxlIGNhbm5vdCBiZSB1c2VkIGZvciBzaGFwZS4KCmBgYHtyfQpnZ3Bsb3QoZGF0YSA9IG1wZykgKyAKICBnZW9tX3BvaW50KG1hcHBpbmcgPSBhZXMoeCA9IGN5bCwgeSA9IGh3eSwgY29sb3IgPSBkaXNwbCkpCgpnZ3Bsb3QoZGF0YSA9IG1wZykgKyAKICBnZW9tX3BvaW50KG1hcHBpbmcgPSBhZXMoeCA9IGN5bCwgeSA9IGh3eSwgc2l6ZSA9IGRpc3BsKSkKCiMgZ2dwbG90KGRhdGEgPSBtcGcpICsgCiMgICBnZW9tX3BvaW50KG1hcHBpbmcgPSBhZXMoeCA9IGN5bCwgeSA9IGh3eSwgc2hhcGUgPSBkaXNwbCkpICAjIGdpdmVzIGEgZXJyb3IKCmdncGxvdChkYXRhID0gbXBnKSArIAogIGdlb21fcG9pbnQobWFwcGluZyA9IGFlcyh4ID0gY3lsLCB5ID0gaHd5LCBzaGFwZSA9IGRydikpCmBgYAoKXG5ld3BhZ2UKCiMjIDQuCgpDYW4gdXNlIHR3byBtYXBwaW5ncyBmb3IgdGhlIHNhbWUgdmFyaWFibGUuICBUaGlzIGlzIG5vdCBnb29kIHByYWN0aWNlISAgCgpgYGB7cn0KZ2dwbG90KGRhdGEgPSBtcGcpICsgCiAgZ2VvbV9wb2ludChtYXBwaW5nID0gYWVzKHggPSBjeWwsIHkgPSBod3ksIHNpemUgPSBkcnYsIHNoYXBlID0gZHJ2KSkKYGBgCgpcbmV3cGFnZQoKIyMgNi4KCldoYXQgaGFwcGVucyBpZiB5b3UgbWFwIGFuIGFlc3RoZXRpYyB0byBzb21ldGhpbmcgb3RoZXIgdGhhbiBhIHZhcmlhYmxlIG5hbWUsIGxpa2UgYWVzKGNvbG91ciA9IGRpc3BsIDwgNSk/CgpUaGUgY29sb3IgY2hhbmdlcyBmb3IgdGhlIFRSVUUgYW5kIEZBTFNFIHZhbHVlcyBvZiB0aGUgaW5lcXVhbGl0eS4KCmBgYHtyfQpnZ3Bsb3QoZGF0YSA9IG1wZykgKyAKICBnZW9tX3BvaW50KG1hcHBpbmcgPSBhZXMoeCA9IGN5bCwgeSA9IGh3eSwgY29sb3VyID0gZGlzcGwgPCA1KSkKYGBgCgpcbmV3cGFnZQoKIyAzLjUuMSBFeGVyY2lzZXMKCiMjIDEuCgpJcyBhIGNvbnRpbnVvdXMgdmFyaWFibGUgPGRibD4gaXMgdXNlZCwgZWFjaCB2YWx1ZSBvZiB0aGUgdmFyaWFibGUgaXMgdXNlZC4gIFNvIHBvdGVudGlhbGx5IG1hbnkgbWFueSBwbG90cyB3aWxsIGJlIG1hZGUuICBUaGlzIG1heSBub3QgYmUgdXNlZnVsLiAgRmFjZXRpbmcgc2hvdWxkIGJlIGRvbmUgd2l0aCBhIGNhdGVnb3JpY2FsIHZhcmlhYmxlLgoKYGBge3J9CmdncGxvdChkYXRhID0gbXBnKSArIAogIGdlb21fcG9pbnQobWFwcGluZyA9IGFlcyh5ID0gaHd5LCB4ID0gY3lsKSkgKyAKICBmYWNldF93cmFwKH4gZGlzcGwsIG5yb3cgPSAyKQpgYGAKClxuZXdwYWdlCgojIyAyLgoKVGhlIG1pc3NpbmcgY2VsbHMgaW4gdGhlIHBsb3QgbWVhbnMgdGhlcmUgaXMgbm8gZGF0YSBhdmFpbGFibGUgZm9yIHRoYXQgY29tYmluYXRpb24gb2YgdmFsdWVzIG9mIHRoZSB2YXJpYWJsZXMuCgpTd2l0Y2ggeCBhbmQgeSBpbiB0aGUgc2Vjb25kIHBsb3QgdG8gc2VlIHRoZSByZWxhdGlvbnNoaXAuCgpgYGB7cn0KZ2dwbG90KGRhdGEgPSBtcGcpICsgCiAgZ2VvbV9wb2ludChtYXBwaW5nID0gYWVzKHggPSBkaXNwbCwgeSA9IGh3eSkpICsgCiAgZmFjZXRfZ3JpZChkcnYgfiBjeWwpCmBgYAoKYGBge3J9CmdncGxvdChkYXRhID0gbXBnKSArIAogIGdlb21fcG9pbnQobWFwcGluZyA9IGFlcyh5ID0gZHJ2LCB4ID0gY3lsKSkKYGBgCgpcbmV3cGFnZQoKIyMgNC4KCkNvbXBhcmUgdG8gMy4zLjEgRXhlcmNpc2UgMS4gIAoKRmFjZXR0aW5nIG1ha2UgaXMgZWFzaWVyIHRvIHNlZSB3aGVyZSB0aGUgZGF0YSBpcyByZWxhdGl2ZSB0byB0aGUgb3RoZXIgdmFyaWFibGUgdXNlZCBmb3IgY29sb3IuCgoKCmBgYHtyfQpnZ3Bsb3QoZGF0YSA9IG1wZykgKyAKICBnZW9tX3BvaW50KG1hcHBpbmcgPSBhZXMoeCA9IGRpc3BsLCB5ID0gaHd5KSkgKyAKICBmYWNldF93cmFwKH4gY2xhc3MsIG5yb3cgPSAyKQoKZ2dwbG90KGRhdGEgPSBtcGcpICsgCiAgZ2VvbV9wb2ludChtYXBwaW5nID0gYWVzKHggPSBkaXNwbCwgeSA9IGh3eSwgY29sb3IgPSBjbGFzcykpICsgCiAgZmFjZXRfd3JhcCh+IGNsYXNzLCBucm93ID0gMikKYGBgCgoKCgoKCg==