ggplot 散布図に回帰直線や相関係数を追加する
UB3/informatics/r/ggplot_scatter_reg
このページの最終更新日: 2024/10/12このページでは、ggplot 散布図に回帰直線、回帰式、および相関係数を追加する方法についてまとめる。ggplot 散布図の一般的な作り方などは、ggplot 散布図メインページ を参照のこと。
広告
回帰直線を追加する
このページでは、原則として 組み込みデータセット trees を使って例を示す。これは、31 本の木について、胴回り Girth、高さ Height、容積 Volume を調べた以下のようなデータセットである。
geom_point() で散布図を作成した後、geom_smooth() で回帰直線を追加する。R デフォルトの plot() と abline() を使っても可能だが (plot 関数の散布図に回帰直線を追加する) ggplot と geom_smooth の方がきれいなので、こちらを推奨する。
回帰直線の種類
上の例では method = "lm" を指定しており、これは線形回帰である。geom_smooth には、以下の 4 つの methods がある。
loess |
これがデフォルト。 |
lm |
図は最初の例で掲載済み。 |
glm |
trees の場合、lm と同じパターンになった。 |
gam |
trees の場合、lm と同じパターンになった。 |
色分けすると回帰直線が別々に引かれる問題
trees データセットで、Height の中央値は 76 である。median(trees$Height) で計算できる。データセットをグループ分けするために、これよりも高い木を Tall、低い木を Short とする列を追加する。
mutate() 関数 の if_else で条件分岐する。
group 列にある Tall および Short で色を変えるには、ggplot の aes に color = group を追加する。回帰直線を引く geom_smooth はそのままにする。
すると、以下のように回帰直線がそれぞれのグループごとに引かれてしまう。
これを避けるためには、ggplot でなく、geom_point で color = group を指定する。ここにも aes が必要である。
グループが細かく分かれていて、グループによっては回帰直線が引けないケースも考えられる。たとえば、あるグループには 1 個しか要素がない場合など。このときは、「1: qt((1 - level)/2, df) で: 計算結果が NaN になりました」「max の引数に有限な値がありません: -Inf を返します」のようなエラーが出る。グループ分けが問題であることが明示されないので、「データフレームは全部 numeric で、NaN や Inf など出るはずがないんだが・・・」と混乱したことがある。
回帰式を追加する
stat_poly_eq という要素を追加する。
相関係数を追加する
相関分析 (相関係数の算出を含む) と回帰分析 (回帰直線) は異なる検定である (参考: 相関分析と回帰分析)。よって、散布図に回帰直線を示しつつ、相関係数を表示するということは、同じデータに 2 回検定をすることになり、多重検定の問題が生じる。
ただし、多重検定は ANOVA と post-hoc test などでも日常的に行われており、これはあまり目くじらを立てて批判するようなものでもない。
ggpubr というパッケージにある stat_cor という要素を追加する。
広告
References
- R ggplotに回帰直線の式を表示する方法. Link: Last access 2022/07/28.
- Add Correlation Coefficients with P-values to a Scatter Plot. Link: Last access 2022/10/23.
コメント欄
サーバー移転のため、コメント欄は一時閉鎖中です。サイドバーから「管理人への質問」へどうぞ。