ねこすたっと

ねこの気持ちと統計について悩む筆者の備忘録的ページ。

2つの連続変数をグラフにする(ggplot2パッケージ)[R]

ggplot2パッケージ(tidyverseパッケージに含まれている)のdiamondsデータを使う。

> library(tidyverse)
> head(diamonds)
# A tibble: 6 x 10
  carat cut       color clarity depth table price     x     y     z
  <dbl> <ord>     <ord> <ord>   <dbl> <dbl> <int> <dbl> <dbl> <dbl>
1  0.31 Good      E     SI1      63.3  55     544  4.33  4.36  2.75
2  0.8  Very Good H     VS2      59.1  59    2953  6.02  6.07  3.57
3  0.78 Very Good H     VS1      61.9  57.1  2854  5.87  5.95  3.66
4  0.3  Ideal     G     VVS2     61.5  57     684  4.29  4.33  2.65
5  1.5  Good      F     SI2      59.7  61    8181  7.39  7.44  4.43
6  1.2  Very Good E     SI2      61.4  58    6130  6.81  6.88  4.2 
  • carat:重さ(カラット)
  • cut:カットの質(5段階)
  • color:色(7段階)
  • clarity:透明度(8段階)
  • depth \frac{2z}{(x+y)}
  • table:最も幅広い部分に対する最上部の幅
  • price:値段(USD)
  • x, y, z:それぞれ長さ・幅・高さ(mm)

geom_point( )で散布図を描く

マーカーについては以下の引数を指定できる。

  • shape, size:マーカーの形、サイズ
  • color, stroke:マーカーの枠線の色、太さ
  • fill, alpha:塗りつぶしの色、透過度

※ プロットマーカーについては以前まとめた記事があります(2022-07-17 追加)

necostat.hatenablog.jp

第3の変数で色分けしたい場合は、aes()の中で変数を指定する。下の例ではcutの種類別に色を指定した他、透過性を上げマーカーの枠を消して、重なりがあってもなるべく見やすいようにした。

ggplot(data = diamonds, aes(x = carat, y = price)) +
  geom_point(aes(color = cut), alpha = 0.5, stroke = 0)

図1:散布図

geom_smooth( )で回帰直線・曲線を描く

回帰モデルを当てはめて得られる期待値(と信頼区間)をプロットする。当てはめるモデルは、methodformulaで指定する。

  • method
    • "lm":線形回帰モデル。サンプル数が1000個未満のときはこれがデフォルト(このときformula = y ~ x
    • "glm":一般化線形回帰モデル(ロジスティック回帰モデルなど)
    • "gam":一般化加法モデル。サンプル数が1000個以上のときはこれがデフォルト(このときformula = y ~ s(x, bs = "cs")
    • "loess":locally weighted scatter plot smooth(局所的に重み付けされた散布図平滑化)

下のコードではyをxの5次式で回帰したもモデルを使った。

ggplot(data = diamonds, aes(x = carat, y = price)) +
  geom_smooth(method = "lm", formula = y ~ poly(x,5))

図2:5次式をもとにした期待値をプロットした

代表値の線に関しては、

  • color:色
  • linetype:線の種類
  • size:太さ

※ 線については以前まとめた記事があります(2022-07-17 追加)

necostat.hatenablog.jp

標準誤差については、

  • fill:塗りつぶしの色
  • alpha:透過度
  • se=FALSEとすると信頼区間の帯は描かない。

が指定できる。

geom_rug( )で周辺ラグプロットを描く

それぞれの変数の分布をバーコードみたいに描いたもの。diamondsデータそのままだとサンプル数が多過ぎてつぶれてしまうので少し間引いたデータで描いてみる。

diamonds %>% sample_n(size=100) %>%
ggplot(aes(x = carat, y = price)) +
  geom_rug()

図3:周辺ラグプロット

単独で使うことはまずなさそう。

color, alpha, linetype, sizeで色、透過度、線の種類、太さを指定できる。

geom_rug( )に特有の引数としては、

  • sides:ラグを表示する場所。sides = "bl"のようにtop, bottom, right, leftの頭文字を使って指定する。
  • length:ラグの長さを指定する。長さはunit( )という関数を使う(下リンク参照)。

stat.ethz.ch

おわりに

  • geom_smooth( )の詳細はそれぞれのモデルについて書くときにでも。

参考資料

  • 本家ページ:

ggplot2.tidyverse.org