ggplot 散布図に回帰直線や相関係数を追加する

UB3/informatics/r/ggplot_scatter_reg

このページの最終更新日: 2024/10/12

このページでは、ggplot 散布図に回帰直線、回帰式、および相関係数を追加する方法についてまとめる。ggplot 散布図の一般的な作り方などは、ggplot 散布図メインページ を参照のこと。

  1. 回帰直線を追加する
  2. 色分けすると回帰直線が別々に引かれる問題
  3. 回帰式を追加する
  4. 相関係数を追加する

広告

回帰直線を追加する

このページでは、原則として 組み込みデータセット trees を使って例を示す。これは、31 本の木について、胴回り Girth、高さ Height、容積 Volume を調べた以下のようなデータセットである。

Rの組み込みデータセット trees

geom_point() で散布図を作成した後、geom_smooth() で回帰直線を追加する。R デフォルトの plot() と abline() を使っても可能だが (plot 関数の散布図に回帰直線を追加する) ggplot と geom_smooth の方がきれいなので、こちらを推奨する。

ggplot 散布図

回帰直線の種類

上の例では method = "lm" を指定しており、これは線形回帰である。geom_smooth には、以下の 4 つの methods がある。

loess

これがデフォルト。

ggplot 散布図

lm

図は最初の例で掲載済み。

glm

trees の場合、lm と同じパターンになった。

gam

trees の場合、lm と同じパターンになった。

色分けすると回帰直線が別々に引かれる問題

trees データセットで、Height の中央値は 76 である。median(trees$Height) で計算できる。データセットをグループ分けするために、これよりも高い木を Tall、低い木を Short とする列を追加する。

mutate() 関数 の if_else で条件分岐する。

ggplot 散布図

group 列にある Tall および Short で色を変えるには、ggplot の aes に color = group を追加する。回帰直線を引く geom_smooth はそのままにする。

すると、以下のように回帰直線がそれぞれのグループごとに引かれてしまう。

ggplot 散布図

これを避けるためには、ggplot でなく、geom_point で color = group を指定する。ここにも aes が必要である。

グループが細かく分かれていて、グループによっては回帰直線が引けないケースも考えられる。たとえば、あるグループには 1 個しか要素がない場合など。このときは、「1: qt((1 - level)/2, df) で: 計算結果が NaN になりました」「max の引数に有限な値がありません: -Inf を返します」のようなエラーが出る。グループ分けが問題であることが明示されないので、「データフレームは全部 numeric で、NaN や Inf など出るはずがないんだが・・・」と混乱したことがある。

ggplot 散布図

回帰式を追加する

stat_poly_eq という要素を追加する。

ggplot 散布図

相関係数を追加する

相関分析 (相関係数の算出を含む) と回帰分析 (回帰直線) は異なる検定である (参考: 相関分析と回帰分析)。よって、散布図に回帰直線を示しつつ、相関係数を表示するということは、同じデータに 2 回検定をすることになり、多重検定の問題が生じる。

ただし、多重検定は ANOVApost-hoc test などでも日常的に行われており、これはあまり目くじらを立てて批判するようなものでもない。

ggpubr というパッケージにある stat_cor という要素を追加する。

ggplot 散布図
広告

References

  1. R ggplotに回帰直線の式を表示する方法. Link: Last access 2022/07/28.
  2. Add Correlation Coefficients with P-values to a Scatter Plot. Link: Last access 2022/10/23.

コメント欄

サーバー移転のため、コメント欄は一時閉鎖中です。サイドバーから「管理人への質問」へどうぞ。