空飛ぶチンアナゴの統計解析日記

統計解析を嗜むチンアナゴのメモ帳です

1.3 練習問題の解答と解説

f:id:flying-spotted-garden-eel:20220214200720p:plain

注意書き
当該記事には「Rではじめるデータサイエンス」のネタバレを多数含みます。
自分で回答することや解説を考えることが一番の力になりますのでなるべく自力で回答するようよろしくお願いいたします。

1. 次のコードはどこがおかしいか。なぜ点が青になっていないのだろうか。

コードの詳細は省略します。
10Pの正しいコードと比較してみるとよいでしょう。
aes属性の外側にcolour = "blue"と記載する必要があります。

2. mpgのどれがカテゴリー変数か。どれが連続変数か。

さて、カテゴリー変数と連続変数という用語が出てきましたが、ざっくり説明するとその変数の平均を求める意味があるのが連続変数、頻度を求める意味があるのがカテゴリー変数と理解しておけばよいでしょう。
例えば変数manufacturerに対して平均を求める意味はありません。値audiと値toyotaの平均を求めても仕方がないですしね。それよりかはaudiが何車種、toyotaが何車種と頻度を求める方がよっぽど有意義でしょう。これはmodelやtrans、drv、fl、classについても同様です。
一方でdispl、year、cylはどうでしょうか? displは排気量なのでaudiの車の排気量は平均◯リッターということはできます。しかし、どちらかというとaudiの1.8Lの車は4車種、2.0Lの車は4車種……といってまとめた方がスマートです。また、year、cylについても同様なことがいえます。これらの値は平均を求めるよりも各値の頻度を集計した方が有意義な値を得ることができるので、これらの値もカテゴリー変数とみなした方がよいです。
残りのctyやhwyについては平均を求める意味があるので連続変量です。街中や高速道路での燃費の平均は一番このデータセットから知りたいことですし、実際平均として算出された値に意味はあります。
ということで
・連続変数:cty、hwy
・カテゴリー変数:残りの変数全て
というのが回答になります。

3. 連続変数をcolor, size, shapeにマップしてみる。カテゴリー変数と連続変数とでこれらのエステティック属性がどう振る舞いを変えるか。

とりあえず、x=displ 、y=hwy、エステティック属性をctyで全部マッピングしてみましょう。

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

f:id:flying-spotted-garden-eel:20220214110537p:plain

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

f:id:flying-spotted-garden-eel:20220214110553p:plain

ggplot(data=mpg) +
  geom_point(
    mapping = aes(x = displ, y = hwy, shape = cty)
  )

「Error: A continuous variable can not be mapped to shape」というエラーが出て実行できません。
shapeの変数の型は文字型にしておかないとダメなようです。

df <- mpg
df$cty <- as.character(df$cty)
ggplot(data=df) +
  geom_point(
    mapping = aes(x = displ, y = hwy, shape = cty)
  )

したがって、このようにctyを文字型に変換してグラフを表示することもできますが、

Warning messages:
1: The shape palette can deal with a maximum of 6 discrete values
because more than 6 becomes difficult to discriminate; you have 21.
Consider specifying shapes manually if you must have them.
2: Removed 123 rows containing missing values (geom_point).

と警告も出ますし、
f:id:flying-spotted-garden-eel:20220214110823p:plain
のようになかなかに煩わしい画面になるのでオススメはしません。

4. 1つの変数に複数のエステティック属性をマップするとどうなるか。

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

f:id:flying-spotted-garden-eel:20220214114442p:plain
こんな感じでdrvに対して色も変えつつ、形も変えることができます。
一方で、

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

のようにした場合、
f:id:flying-spotted-garden-eel:20220214115102p:plain
のようにmappingはされますが、

警告メッセージ:
Using alpha for a discrete variable is not advised.
(離散変数にalphaを使うことはお勧めしません。)

と警告が出ます。

5. エステティック属性strokeは何をするか。どんな形に作用するか。

ヒントとして「?geom_pointを使う」とありますが

Aesthetics

geom_point() understands the following aesthetics (required aesthetics are in bold):

- x

- y

  • alpha
  • colour
  • fill
  • group
  • shape
  • size
  • stroke

Learn more about setting these aesthetics in vignette("ggplot2-specs").

と結局「ggplot2-specs」で検索しろということになるのでヘルプから検索するとプロットの境界線の太さを調整することができます。

6. エステティック属性を、aes(color = displ < 5)のように変数名以外にマップするとどうなるか。

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

f:id:flying-spotted-garden-eel:20220214134513p:plain
綺麗にdisplが5未満と5以上とでプロットされた色が変わります。