散布図に回帰直線も載せたい!
回帰直線の色や線の種類などを変えたい!
そんなお悩みを解決します。
本記事ではggplot2を使った回帰直線の書き方について紹介します。
ggplot2で散布図を書く方法については以下の記事をぜひご確認ください。
ggplot2で回帰直線を書く方法
本記事ではggplot2パッケージに入っているmpgデータセットを使って解説していきます。
mpgデータセットやggplot2がよくわからない!
という方は、こちらの記事から読み進めていただければ理解が深まりますのでオススメです。
では、mpgデータセットのうち、xがdispl(排気量)、yがhwy(走行距離)の回帰直線を書いていきます。
基本の回帰直線
さっそく回帰直線を書いていきます。
回帰直線はgeom_smooth()で描くことができます。
この時、geom_smooth()の中でmethod = "lm"にすると単回帰直線、method = "glm"にすると一般化線形モデルが適用されます。
ggplot(data = mpg,
mapping = aes(x = displ,
y = hwy))+
geom_point(size = 3)+
geom_smooth(method = "lm")
特に何も設定しない場合、95%信頼区間も書いてくれます。
信頼区間を消したい場合
信頼区間を消したい場合は、se = FALSE を追加します。
ggplot(data = mpg,
mapping = aes(x = displ,
y = hwy))+
geom_point(size = 3)+
geom_smooth(method = "lm",
se = FALSE)
線の色、線のタイプや太さ、信頼区間の色を変える
回帰直線の線の色、線のタイプ)、線の太さや信頼区間の色は、geom_smoothの中で設定します。
- color:回帰直線の線の色
- linetype:線のタイプ(点線や破線)
- size:線の太さ
- fill:信頼区間の色
では、colorを赤色、linetypeをdashed(破線)、sizeを0.5、fillをピンクとしてグラフを作成してみます。
ggplot(data = mpg,
mapping = aes(x = displ,
y = hwy))+
geom_point(size = 3)+
geom_smooth(method = "lm",
color = "red",
linetype = "dashed",
size = 0.5,
fill = "pink")
linetypeの種類は以下の通りです。
上記では"dashed"と文字列で指定しましたが、数字で2と入れてもOKです。
- 0 = "blank"
- 1 = "solid"
- 2 = "dashed"
- 3 = "dotted"
- 4 = "dotdash"
- 5 = "longdash"
- 6 = "twodash"
プロットの"下"に回帰直線を引く方法
上記のグラフでは、プロットの"上"に回帰直線がありますが、プロットの"下"に引きたい場合はどうしたらいいでしょう。
ggplot2の使い方から読み進めてくださっている人には簡単ですね!
ggplot2は上にレイヤーを積み重ねていくようにグラフを書いています。
よって、geom_smooth(回帰直線のレイヤ)の後にgeom_point(散布図のレイヤ)を追加すれば、プロットが回帰直線の上に来ますね!
ggplot(data = mpg,
mapping = aes(x = displ,
y = hwy))+
geom_smooth(method = "lm", #先に回帰直線を追加
color = "red",
linetype = "dashed",
se = TRUE,
size = 0.5,
fill = "pink")+
geom_point(size = 3) # 回帰直線のレイヤの後に散布図を追加
水準ごとに回帰直線を書く方法
水準ごとに回帰直線を引く場合は、geom_smoothのmapping = aes()中でどの水準に分けて回帰直線を引くのか指定します。
cyl(シリンダー数)ごとに回帰直線を引く場合は、geom_smoothのaes()の中でgroup = factor(cyl)を指定します。cylの型はfactorにする必要があるので、factor(cyl)としています。
ggplot(data = mpg,
mapping = aes(x = displ,
y = hwy))+
geom_point(size = 3)+
geom_smooth(aes(group = factor(cyl)),
method = "lm",
linetype = "dashed",
se = TRUE,
size = 1)
3本の回帰直線を引くことができました。
ですが、どの水準がどの直線なのかイマイチよくわからないですね。
そのため、水準ごとに回帰直線のcolorを変えてみます。
ggplot(data = mpg,
mapping = aes(x = displ,
y = hwy))+
geom_point(size = 3)+
geom_smooth(aes(color = factor(cyl)),
method = "lm",
linetype = "dashed",
se = TRUE,
size = 1)
シリンダー数4, 6, 8 の3本の回帰直線を引くことができました。
ここまできたら、プロットの色も水準ごとに変えておきましょう。
プロットの色を変える場合は、geom_pointのmapping = aes()の中でcolorを指定すればいいですね。
ggplot(data = mpg,
mapping = aes(x = displ,
y = hwy))+
geom_point(aes(color = factor(cyl)),
size = 3)+
geom_smooth(aes(color = factor(cyl)),
method = "lm",
linetype = "dashed",
se = TRUE,
size = 1)
若干見にくいですが、シリンダー数5という水準も実はあったんですね。気が付かなかったです。
プロットが2点しかないので、回帰直線は引かれていません。
ここまでで、水準ごとにプロットの色、回帰直線の色を変更することができました!
グラフとしては完成しましたが、コードを見てみるとaes(color = factor(cyl)が2回も出てきてまどろっこしいですね。最後に、よりコードを簡略化する書き方についてです。
コードの簡略化について
ggplot2の使い方でも紹介していますが、ggplot()の中でデータセットやx, yを指定すると後のレイヤでも反映されます。これを利用すると、よりコードを簡略化して書くことができます。
ggplot()の中で、使うデータセット(mpg)、x(displ)とy(hwy)、colorを水準ごとに分けるよう指定します。
ggplot(data = mpg,
mapping = aes(x = displ,
y = hwy,
color = factor(cyl)))+
geom_point(size = 3)+
geom_smooth(method = "lm",
linetype = "dashed",
se = TRUE,
size = 1)
まとめ:回帰直線の追加はgeom_smooth()で!
今回の記事ではggplot2での回帰直線の書き方についてご紹介しました。
回帰直線まで引くことができたので、次のステップとして軸や軸名、凡例の調整、グラフタイトルの追加方法について紹介しています。ぜひご確認ください!
R言語の勉強におすすめの本
今後Rの勉強をしていきたい!という方に、こちらの参考書がおすすめです。
特に、RユーザのためのRStudio実践入門は、tidyverseパッケージに特化して書かれていてとても実用的でしたのでオススメです。私自身、この本を読んでRで出来ることが一気に増えた実感のある本です。kindleで試し読みもできるのでぜひ参考にしてください。