第2版
はじめに
本書の目的は、臨床家が学会発表や論文執筆を行うにあたり、無料で使えるソフトウェアである R を用いて統計解析を行うことができるようになることです。第 1 版では、臨床研究において必須の基本的な統計手法を、R を使って実践する方法を紹介しました。本書第 2 版ではさらに内容を掘り下げ、より発展的なデータ操作方法や、臨床予測モデルや傾向スコア分析といった新たな統計手法の実施方法を追加し、より多様なニーズに応えることを目指しました。
私たちは東京大学の公衆衛生大学院で学びながら、R の導入に苦労した経験があります。この経験を基に、同じように困難を感じる臨床家が R をスムーズに活用できるよう手助けしたいという思いから本書第 1 版を出版しました。幸いにも多くの読者からご支持をいただき、R を用いた統計解析の実践に役立てていただけたことを非常に嬉しく思います。
第 2 版では、データの操作方法について詳述し、データの前処理の技術を強化しました。特に第 5 章は大幅に改訂し、発展的なデータ処理方法を解説してあります。難しく感じるかもしれませんが、本書を手元に置きながら、必要に応じて参照していただくような使い方を想定してあります。これにより、研究の全体的なプロセスを効率的かつ効果的に進めるためのテクニックがより具体的に利用できるようになるでしょう。Part 2 ではさらに深い知識を提供するために、臨床予測モデルや傾向スコア分析を追加しました。これらの手法は今や広く使われるようになってきており、実際に臨床研究を実施する上で知っておくべき必須のものとなっています。
本書は、初版に引き続きサンプルデータを用いて練習することで、読者が実際のデータに対して適用できる実践的な知識を身につけられる構成となっていii

第2版

はじめにます。各統計手法については、対応する R パッケージの解説、スクリプトの例、そしてその出力を順に示し、実際の解析手順を具体的に理解できるように配慮しています。これにより、R を初めて使う方から、既に活用している方まで、幅広い読者にとって有用な参考書となることを目指しています。また、サンプルデータでの練習が終わった後も、自分のデータを解析する際に手元にあると便利なマニュアル的な使い方ができるようになっています。
第 2 版の出版に際しても、多くの方々のご協力をいただきました。特に金芳堂の浅井健一郎様には、第 1 版に続きご支援とご協力を賜りましたこと、心より感謝申し上げます。また、本書がさらに多くの臨床家の方々にとって、R を活用するための一助となることを願っています。
2024 年 6 月
笹渕裕介

iii

目

次第２版

はじめに 

ii

Part 1
第1章

第2章

第3章

第4章

第5章

vi

目

次

R および RStudio のインストール 

5
１

R とは

5

２

R と RStudio のダウンロードとインストール

6

RStudio 操作の基本 10１

RStudio を起動してみよう10

２

各ペインの機能11

３

スクリプトを書いてみよう16

４

RStudio を終了する

18

パッケージ利用の準備 

20

１

パッケージとは20

２

インストール方法

21

３help

21

プロジェクトの作成とデータ読み込み 

25

１プロジェクト25

２

データの読み込み27

３

データの表示29

データフレームの取り扱い 

32

１readr34

２dplyr35

３

NA の取り扱い58

４

連続変数のカテゴリー化

62

第6章

第7章

第8章

第9章

第 10 章５

日付データの取り扱い

68

６

文字列の取り扱い73

７

データの変形と結合

78

データの概要の確認 87１

データの俯瞰と要約

87

２tableone パッケージ

90

ggplot2 

95

１散布図

97

２折れ線グラフ98

３ヒストグラム

102

４

箱ひげ図

104

５グラフの保存106

2 群間の比較 

110

１

統計手法の選択110

２

連続変数の比較111

３

カテゴリー変数の比較

116

3 群以上の比較 120１多重比較法120

２

統計手法の選択122

３

連続変数の比較122

４

カテゴリー変数の比較

129

重回帰・ロジスティック回帰 

133

１重回帰

135

２

ロジスティック回帰

138vii

第 11 章生存時間分析 

142

１

生存時間分析

143

２

データの整形

144

３

Survival オブジェクトの作成

145

４

カプランマイヤー法とログランク検定

146

５

コックス回帰150Part 2
第 12 章データ作成 第 13 章

データの作り方のコツ

156

２

文字コード

157

３

変数名

158

４

変数の中身

160

５

最終手段

161

162

１

R の代表的なデータ型

162

２

R の代表的なデータ構造

169

相関係数 

第 15 章目

１R で使うデータ型とデータ構造 

第 14 章

viii

156

179

１

相関係数

179

２

複数の相関係数を同時に算出する

184

ROC 曲線 次

185

１

ROC 曲線とは

185

２

R のスクリプト

188

３

ROC 曲線の比較

191

第 16 章予測モデル １

第 17 章

予後予測モデル194
194

傾向スコア分析 

206

１

傾向スコアとは206

２

傾向スコア重み付け207

３

傾向スコアマッチング

220

Column同じ関数名の競合

23

Columnfread による高速読み込み

31

Columnbase と tidyverse：2 種類のパイプ

45Columntibble と data.frame の違いは？

46

Columnfor loop86

Columnsummarytools パッケージ

93

Column係数、95% 信頼区間、P 値の簡単な求め方 141

Columnコードが実行できません153

Column自作関数

174

おわりに 

230

索引 

232

著者略歴ixＲおよび1章 R および RStudio のイン
ストール

第のインストールRStudioポイント◦R は無料で最新の統計解析を行えるプログラミング言語である◦RStudio は R を使いやすく補助するソフトである

2
3
4
56：
「R で統計解析ができることはわかったんだけど、どんなソフトウェアなんだろう？

1

何はともあれ R のインストールをしないと7始まらないな。インターネットで検索をしたら RStudio というの8を使うと便利だって書いてあるブログがあったし……。試しに両方ともインストールすることにしようかなぁ。さて、どこでダウ9ンロードすればいいんだろう」

10

1

R とは

11

R は無料で利用できる統計解析やグラフィックス作成のためのソフトウェアです。基本的な統計手法はもちろんのこと、ユーザーによって新たな統計パッケージが次々と開発・公開されており、最新の手法も容易に利用可能となっています。一方、R は、自分でスクリプト（R におけるプログラミングコードをこう呼びます）を入力する必要があります。そのため、初学者にとって か な り ハ ー ド ル が 高 く な っ て い ま す。そ の ハ ー ド ル を 下 げ る た め に、RStudio という R を使用するための補助ツールのソフトウェアが存在しています。RStudio ではデータの読み込みなどいくつかの機能はクリックで操作を行うことが可能です。また、スクリプトの補完機能を使用できたり、グラフの出力が容易になったりと、R を使うことに対する敷居を下げてくれます。この RStudio も無料で公開されています。

1R とは5121314151617

２

R と RStudio のダウンロードとインストールダウンロードの必要があるソフトウェアは下表のとおりです。
MacWindows○○

R
RStudio○○

XQuartz○

不要① R のダウンロード
R は The Comprehensive R Archive Network（CRAN）と呼ばれるウェブサイトからダウンロードできます。CRAN は R のバージョンアップやパッケージを登録するサイトであり、以下の URL でアクセスできます。
https://cloud.r-project.org
OS は Linux、Windows、Mac に対応していますので、このページにアクセスし、ご自身の OS に合わせて、R をダウンロードし、インストールを実行してください（図 1-1）
。以前に R や Rstudio をダウンロードしている方も、最新版をダウンロードしてください。

ご自身の OS に合わせてダウンロードを行う
図1-1

CRAN トップページ
https://cloud.r-project.org

6

第1章

R および RStudio のインストールにインストールしてください。また、古い OS の場合、最新版の R がインスのインストール
RStudio

トールできない場合があるので注意が必要です（図 1-2）。

Ｒおよび

Mac では R のインストールに加えて、XQuartz も必要になるので忘れず

XQuartz のインストーラ

12
34
567

R 本体のインストーラ（Mac の CPU 別に存在 )
図1-2

8
9

R（Mac 版）のダウンロード画面
https://cloud.r-project.org/bin/macosx/

10

Windows の場合 base をクリックした先のページでインストーラをダウンロードします（図 1-3、図 1-4）。

11121314151617

base をクリック

図1-3

R（Windows 版）のダウンロード画面①https://cloud.r-project.org/bin/windows/
２

R と RStudio のダウンロードとインストール

7

R 本体のインストーラ

図1-4

R（Windows 版）のダウンロード画面②
https://cloud.r-project.org/bin/windows/base/

Mac も Windows もダウンロードしたインストーラを実行すればインストールができます。
② RStudio のダウンロード
RStudio は、以下の URL からダウンロードできます。
https://posit.co/
こちらもご自身の OS に合わせて、無料のデスクトップ版のインストーラをダウンロードし、インストールを実行してください。RStudio もインストーラを実行するだけでインストールが完了します（図 1-5、図 1-6）。
これで R と RStudio を使う準備は整いました。次の章では実際に R のスクリプトを書きながら RStudio の機能について学んでいきましょう。

8第1章

R および RStudio のインストール

6章 データの概要の確認

第12
33ポイント◦glimpse() でデータ全体を俯瞰する4◦summary(), table() で各変数の分布を確認する

本章で必要なパッケージ● tidyverse● tableone：「さぁデータクリーニングも終わったぞ。ついに解析だ！

さっそく回帰分析だ！」

データの概要の確認◦‘tableone’パッケージで表を作成する

56
78
9：
「早い、早いよ、A くん。まず集めたデータの平均、中央値、分散などの分布や頻度などを確認してみよう」

1011
12

1

データの俯瞰と要約

13

データを手に入れると上の A くんのようにすぐ解析をしたくなるものです。
しかし、データ解析を始める前（さらに言うならデータクリーニング前）に、まず自分が扱っているデータについて• どのような変数がデータに含まれるのか？（年齢、性別など）

1415
16

• 変数はいくつあるのか？（＝列数）17• サンプルサイズはいくつか？（＝行数）• 各変数の型は？
• 各変数の値の平均、分散は？などを大まかに把握しておく必要があります。すべての変数の情報をコンパクトに出力する glimpse() でデータを俯瞰します。
1

データの俯瞰と要約

87

glimpse(data)
data

変数の一覧を表示するデータフレーム

df <- read_csv("R_book_data.csv")
df %>%
glimpse()1）

Rows: 500
Columns: 24$ id<dbl> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 1...

$ Year<dbl> 2010, 2012, 2012, 2011, 2013, 2010, 2014, 2011, ...

$ Admday<chr> "2010/10/24", "2012/9/24", "2012/12/9", "2011/9/...

$ Discday<chr> "2010/11/5", "2012/10/3", "2012/12/14", "2011/9/...

$ New_Treatment <dbl> 0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, ...
$ Age<dbl> 62, 82, 75, 78, 78, 68, 72, 71, 80, 72, 75, 63, ...

$ Sex<dbl> 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, ...

$ Height<dbl> 167, 156, 155, 153, 154, 157, 168, 154, 165, 152...

$ Weight<dbl> 75.8, 57.0, 61.2, 49.5, 52.5, 61.1, 64.3, 47.3, ...

$ DM<dbl> 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, ...

$ Stroke<dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...

$ MI<dbl> 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, ...

$ Severity<dbl> 2, 3, 2, 2, 8, 3, 1, 7, 11, 2, 6, 1, 2, 1, 1, 2,...

$ Death<dbl> 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, ...

$ LOS<dbl> 13, 10, 6, 11, 15, 9, 19, 22, 15, 10, 7, 10, 13,...

~ 省略 ~1） Rows は観測数（行の数）を、Columns は変数の数（列の数）を表します。df は 500 行×24 列のデータということがわかります。各変数は、データ型（第 13 章参照）と最初の数個の値が出力されています。
連続変数の要約を行うには summary() が便利です。最小値、最大値、平均値、中央地、四分位点がまとめて表示されます。
88

第6章

データの概要の確認1summary(x)x23

要約する変数3summary(df$Age)
Min. 1st Qu.
##54.0Median70.0

75.0

Mean 3rd Qu.
74.9

79.0

4Max.
91.0
データの概要の確認

カテゴリ変数の頻度を見たいときには、 table() が便利です。
table(x)x

集計する変数567
89table(df$New_Treatment)110## 321 179

11New_Treatment 列には 0 が 321 個、1 が 179 個あることがわかります。

12##0

各カテゴリーの割合を見たいときは、さらに prop.table() を使います。

13

prop.table(table(df$New_Treatment))

14

##150

1

## 0.642 0.358

16

以 上 よ り、New_Treatment 列 に は 0 が 321 個（64.2%）、1 が 179 個（35.80%）あることがわかります。

1

データの俯瞰と要約

8917

₁₆章 予測モデル

第ポイント◦予測モデルの作成は予測モデル報告ガイドラインである TRIPODを参照◦モデルの性能評価指標には、適合度、判別、較正、再分類などが存在◦Web 計算ツールの提供、ノモグラム、整数スコアなどでモデルを提示

本章で必要なパッケージ● tidyverse● rms● pROC● epiR● caTools● binom● ResourceSelection：「疾患 Z は新しい病気だから、患者さんの予後を予測するのが難しいなあ。そうだ、今まで集めたデータで予後予測スコアを作ってみたらどうかな。予後予測スコアって世の中にたくさんあるんだけどどうやって作っているんだろう？」

1

予後予測モデル

予後予測モデル（prognostic prediction model）とは、各個人の臨床的アウトカムを予測する分析モデルを指します。例えば、がんの５年生存率、機能的予後、入院期間などを臨床的アウトカムと設定して、ある個人や集団の予後を評価する際に使用します。本書では、予測モデル報告ガイドラインである
Transparent Reporting of multivariable prediction models for
Individual Prognosis Or Diagnosis (TRIPOD) (Ann Int Med. 2015) の194

第 16 章

予測モデル

予後予測モデル報告法に沿ってモデルの作成手順を解説します。

1

本章ではサンプルデータ "R_book_data_pp.csv" を使用します。これは、

2

架空のある疾患 Z の患者の入院データです。アウトカムの Death（死亡 , 2値変数）を患者背景（Age, Sex, DM, Stroke, MI）から予測していきます。

34①予後予測モデル作成手順
予後予測モデル作成は以下の手順で行います。

5①対象集団とアウトカムの決定 ②モデル形式の決定 ③予測因子の決定 ④モ

6デルの性能評価 ⑤妥当性の検証 ⑥提示法の決定
今回①に関しては、データに含まれる疾患 Z の入院患者を対象として、予7後を予測するモデルを作成します。

8②モデル形式の決定

9

アウトカムとする変数の型に応じて、利用される統計モデルもある程度決定されます。例えば、アウトカムが術後 30 日死亡のような 2 値変数であれ10ば、ロジスティック回帰モデル、アウトカムが生存時間であれば Cox 比例ハ11ザードモデルを使用することが多いです。本書では、死亡をアウトカムとしてロジスティック回帰で予測モデルを作成します。

1213③予測因子の決定
予測因子を選択する際には、臨床的な知見や既報に基づいて候補となりうる14因子を決定します。その際、一般臨床で測定しない実用性の低い因子を投入し合は、多重共線性（第 10 章 137 ページ参照）が生じる相関の高い因子を投入していないかなどを確認します。変数増減法などのように自動で投入する因子を決定する方法も存在しますが、本書では割愛します。ここでは、疾患 Zの予後予測因子として Age, Sex, DM, Stroke, MI を選択しました。
モデルの作成以下のように入力し、予測モデルを作成してください。なお後述しますが、
1

予後予測モデル

195

予測モデル

ていないか、最終的な提示方法で整数スコアモデル（後述）を予定している場

15161617

今回はデータが１つしかないため、データをモデル作成用とモデルの性能検証用の 2 つに分割しています。

# パッケージの呼び出し

library(tidyverse)
library(pROC)
library(caTools)
library(rms)library(epiR)
library(binom)
library(ResourceSelection)# データの読み込み

df <- read_csv("R_book_data_pp.csv")# データを予測モデル作成用と検証用の 2 つに分割

set.seed(123) # 乱数のシードを設定
split <- sample.split(df$Death, SplitRatio = 0.7)
train_data <- df %>%filter(split == TRUE) # モデル作成用データ
test_data <- df %>%filter(split == FALSE) # 検証用データ# ロジスティック回帰による予測モデルの作成

model <- glm(Death ~ Age + Sex + HT + DM + Stroke + MI,
family = binomial(link = logit),
data = train_data)④モデルの性能評価
作成したモデルは判別力（discrimination) でアウトカムを起こす患者と起こさない患者を識別できる性能を評価し、較正力（calibration）で予測値と観測値との一致具合を評価します。アウトカムが 2 値の場合に、判別力は c196

第 16 章予測モデル