👻

医学統計でよく使うRパッケージ

2023/01/02に公開

Rを使うときパッケージ(以下、package)を利用すると思います。 packageとは、Rの機能を拡張する関数、データ、資料の集まりです。

例えば、きれいな図を描きたいときは、ベースのR機能であるplotでは物足りないため、ggplot2 packageを使います。

一般化推定方程式を使いたいときは、ベースのR機能だけでは、数式を読み解き、関数を自作する必要がありますが、geepack packageを使えば関数の自作は不要です。

このようにRを使う上でpackageは重要ですし、いろいろなpackageを知っていると楽ができます。ただし、packageの有無を自分の解析能力の限界にする必要はありません。自ら関数が組めると解析の幅が広がります。

packageは山ほどあります。しかし解析によく使うpackageはある程度限られます。この記事では、ぼくが使っている(使いたい)R packageを紹介します。

Packageの使い方

新しいpackageを使いたいときは、まず、install.packages関数で、使いたいpackageを自分のPCに入れます。たとえば、tidyverse packageを使いたいときは次のようなコードを書きます。

install.packages("tidyverse")

これにより、pakcageがPCの中に入りましたが、使える状態ではありません。使う場合は、

library(tidyverse)

とします。料理作りを例にすると、install.packages関数で、必要な食材をスーパーから買ってきて家の冷蔵庫に入れる。library関数で冷蔵庫から食材を取り出すという感じです。

install.packages関数を使ったpackageを自分のPCに入れる作業は、Rを更新しない限り、あるいはpackageを更新しない限り、一度おこなえば良いです。library関数はRを立ち上げるたびに必要です。

では、ぼくがよく使うpackageを紹介していきます[1]

データハンドリング

tidyverse package

いわずもがな。これがないと始まらない。dplyr、tidyr、tibbleといった基本的なハンドリングpackageだけでなく、

  • ggplot2: 作図
  • lubridate: 日付型のハンドリング
  • forcats: 順序尺度データのハンドリング
  • stringr: 文字型のハンドリング
  • purrr: for文やapplyのような繰り返し処理をおこなう

といった便利なpackageも含まれています。

https://www.tidyverse.org/packages/

tidylog package

tidyverse関数群でデータセットの形を変形したり、くっつけたりするときに行数を確認することは重要です。dim()やstr()で小まめにデータセットを確認する癖もつけたい[2]ですが、自動で行数等の出力するこのpackageはtidyverseと一緒に使いたいです。

https://github.com/elbersb/tidylog

timetk

時間データ(date型)を扱うことは頻繁にありますが、filterしたり意外と手間です。それらのコーディングを簡単にします。データハンドリングにいれてますが、一般的な時系列分析もできそうです。
https://business-science.github.io/timetk/index.html

arrow package

メモリにのらないようなデータを扱うときに。
癖があるので、arrowの思想を知るのが大事。
https://arrow.apache.org/docs/r/index.html

readxl package

Excelのxlsxファイルを読み込むとき。型もよしなに指定してくれます。
https://readxl.tidyverse.org/

openxlsx2 package

Excelのxlsxファイルの書き出しもできるようになる。
https://janmarvin.github.io/openxlsx2/

作図

patchwork package

ggplot2で作った図をくっつける。
https://patchwork.data-imaginist.com/index.html

scales package

ggplot2で作った図の軸に工夫を加える。例えば、1000ごとに「,」を入れたり、指数表示にしたり、絶対に指数表示させなかったり。
https://scales.r-lib.org/

統計解析

このテーマは解析内容によるので、ほんの一部だけです。

lme4 package

混合効果モデルを使いたいときに必要です。
https://github.com/lme4/lme4/

geepack package

一般化推定方程式を使いたいときに必要です。gee packageをよりglmっぽく使えるようにします。クラスターにする変数をfactor型にすることに注意。
https://cran.r-project.org/web/packages/geepack/index.html

emmeans package

推定したモデルの結果を使って、任意の対比較や条件付き推定値を算出します。マニュアルの情報量がとにかく多い。
臨床試験では複数の介入でアウトカムを繰り返し測定します。このときにかなり有用なpackageです。
https://github.com/rvlenth/emmeans

performance package

回帰モデルのチェックに使う。
https://easystats.github.io/performance/

WeightIt package

傾向スコアの算出→逆確率重み付けの算出→任意の効果の推定までをおこなうpackageです。
https://ngreifer.github.io/WeightIt/

MatchIt package

傾向スコアの算出→マッチングの算出→任意の効果の推定までをおこなうpackageです。
https://kosukeimai.github.io/MatchIt/

cobalt package

群間の変数のバランスを標準化差と図で確認できるpackageです。
https://ngreifer.github.io/cobalt/index.html

visdat package

欠測データの確認。vis_dat()かvis_miss()で欠測パターンを見る。
https://docs.ropensci.org/visdat/index.html

mice package

多重代入法により欠測の処理をおこなうpackage(その1)です。
https://github.com/amices/mice

Amelia package

多重代入法により欠測の処理をおこなうpackage(その2)です。
https://gking.harvard.edu/amelia

ggsurvfit package

ggplot2形式で、生存時間解析に関連する作図をおこなうpackageの現時点の代表。
https://www.danieldsjoberg.com/ggsurvfit/index.html

結果のまとめ

gtsummary package

表を作る。

  • Table 1(背景情報の要約)も
  • 回帰の結果のまとめも

https://www.danieldsjoberg.com/gtsummary/index.html

broom package

gtsummaryを使った推定結果の表示は重く、柔軟性に欠けます。broom packageのtidy関数を使えば、推定結果をtibble形式の表で書き出し、処理しやすくなります。
https://broom.tidymodels.org/

forestplot

複数の説明変数をモデルに含む線形回帰やロジスティック回帰の結果を図示するpackageです。メタアナリシスの結果の提示にも使えます。
https://cran.r-project.org/web/packages/forestplot/vignettes/forestplot.html

その他

here package

RStudioのプロジェクト機能を使えば、フォルダやファイルの参照は楽になります。here packageを使えばさらに楽です。
https://here.r-lib.org/

zipangu package

和暦[3]や日本の住所を処理しやすくするpackageです。

https://uribo.github.io/zipangu/

causaldata package

解析方法確認したり、教育にちょうどよいデータが欲しい。
因果推論に関する書籍のデータを集めたパッケージ。
https://github.com/NickCH-K/causaldata/tree/main/R

simstudy

シミュレーションデータ作りを容易にするパッケージです。
一見複雑そうに見えますが、考え方は直感的です。
https://kgoldfeld.github.io/simstudy/index.html

脚注
  1. 以前紹介してたけど使ってなくて、でもやっぱり便利そうだと思うpackageも入れています。 ↩︎

  2. 大げさではなく、毎回確認しています。 ↩︎

  3. そもそも使ってほしくない ↩︎

Discussion