---
title: Rで学ぶ医薬データにおける統計的因果推論入門
tags:  #r with pharma lab meetup 1  
author: [森岡裕[SASユーザー総会世話人]](https://convert.docswell.com/user/6484025)
site: [Docswell](https://www.docswell.com/)
thumbnail: https://bcdn.docswell.com/page/57GLYQWXEL.jpg?width=480
description: Rで学ぶ医薬データにおける統計的因果推論入門 by 森岡裕[SASユーザー総会世話人]
published: April 05, 26
canonical: https://convert.docswell.com/s/6484025/5MQX7L-2026-04-05-100932
---
# Page. 1

![Page Image](https://bcdn.docswell.com/page/57GLYQWXEL.jpg)

R with Pharma Lab Meetup #1
2026年04月08日
Rで学ぶ医薬データにおける
統計的因果推論入門
株式会社ピープロ・ジャパン
DM/統計解析グループ
牛尾 英孝
Ppro-Japan Co.,Ltd.


# Page. 2

![Page Image](https://bcdn.docswell.com/page/4EQYMK35JP.jpg)

免責事項
本発表で述べる意見や見解は, 演題発表者個人のものです.
所属する組織の意見を代表するものではありません.
2


# Page. 3

![Page Image](https://bcdn.docswell.com/page/KJ4WVP1V71.jpg)

本演題の内容
統計的因果推論では, 単なる相関ではなく, 処置の有
無により結果がどのように変化するかという因果効果の
推定を目的とするが, 観察研究においては交絡の影響に
より, 因果効果を適切に評価できないという問題がある.
本演題では, 因果推論の基本的な考え方である共変量
調整について, その目的と直感的な理解及び, 代表的な
手法である層別解析と共変量マッチングについて, 簡易
な具体例をRの実装例を交えて解説する.
3


# Page. 4

![Page Image](https://bcdn.docswell.com/page/LE1Y39G47G.jpg)

本演題の内容/目次
1 観察研究の事例と交絡
2 層別解析と共変量調整/Rによる実装例
目次
3 共変量マッチング/Rによる実装例
4 まとめ
4


# Page. 5

![Page Image](https://bcdn.docswell.com/page/GEWGPQKZJ2.jpg)

観察研究の具体的な事例
✓ある疾患Xに罹患している研究対象者に対して新薬Dを投与.
✓症状Yを改善させることができるかどうかを調査.
✓新薬D投与群を40名, 非投与群を40名ずつ計80名ほど集積.
✓研究対象者を重症度(軽度/重度)に応じて2層に分類.
集計①
症状Y改善
症状Y非改善
合計
新薬D投与群
17
23
40
新薬D非投与群
11
29
40
合計
28
52
80
5


# Page. 6

![Page Image](https://bcdn.docswell.com/page/47ZLKWZLJ3.jpg)

観察研究の具体的な事例
集計①
症状Y改善
症状Y非改善
合計
改善率
新薬D投与群
17
23
40
42.5% (17/40)
新薬D非投与群
11
29
40
27.5 (11/40)
合計
28
52
80
クロス集計①の結果から, 新薬D投与群の方が非投与群と比較
して症状Ｙの改善率が15%(42.5%-27.5%)ほどよくなって
いる傾向にあるようです.
本観察研究では, 研究対象者を重症度(軽度/重度)に応じて2層
に分類していますね. 層を考慮するとどうなるでしょうか.
6


# Page. 7

![Page Image](https://bcdn.docswell.com/page/YJ6WQGZMJV.jpg)

観察研究における層別のクロス集計表
集計①
症状Y改善 症状Y非改善
合計
新薬D投与群
17
23
40
新薬D非投与群
11
29
40
合計
28
52
80
✓研究対象者を重症度(軽度/重度)に応じて2層に分類.
集計②
軽度
重度
症状Y改善 症状Y非改善 症状Y改善 症状Y非改善
新薬D投与群
2
8
15
15
新薬D非投与群
6
24
5
5
合計
8
32
20
20
7


# Page. 8

![Page Image](https://bcdn.docswell.com/page/GJ5MRVWQJ4.jpg)

観察研究における層別のクロス集計表
軽度
集計②
症状Y改善 症状Y非改善
重度
改善率
症状Y改善 症状Y非改善
改善率
新薬D投与群
2
8
20% (2/10)
15
15
50% (15/30)
新薬D非投与群
6
24
20% (6/30)
5
5
50% (5/10)
合計
8
32
20
20
軽度の層：投与群, 非投与群の改善率はいずれも20％
重度の層：投与群, 非投与群の改善率はいずれも50％
【層のサンプル数で重み付き平均した改善率の差】
(40/80)×(20%-20%)+(40/80)×(50%-50%)=0%
8


# Page. 9

![Page Image](https://bcdn.docswell.com/page/9E29D3QW7R.jpg)

観察研究における層別のクロス集計表
集計②
軽度
症状Y改善 症状Y非改善
重度
改善率
症状Y改善 症状Y非改善
改善率
新薬D投与群
2
8
20% (2/10)
15
15
50% (15/30)
新薬D非投与群
6
24
20% (6/30)
5
5
50% (5/10)
合計
8
32
20
20
クロス集計②の結果からは, 投与群/非投与群において, 軽度の層は
いずれも改善率20％, 重度の層はいずれも改善率50%で改善率に
差は見られません. 層のサンプル数で重み付き平均した改善率の差
は0%（前スライド参照）です.
クロス集計①と②では, どちらの結果が平均因果効果
の推定値として適切でしょうか.
9


# Page. 10

![Page Image](https://bcdn.docswell.com/page/D7Y421W9EM.jpg)

観察研究における層別のクロス集計表
集計①
症状Y改善 症状Y非改善
合計
改善率
新薬D投与群
17
23
40
42.5% (17/40)
新薬D非投与群
11
29
40
27.5 (11/40)
合計
28
52
80
集計②
軽度
症状Y改善 症状Y非改善
重度
改善率
症状Y改善 症状Y非改善
改善率
新薬D投与群
2
8
20% (2/10)
15
15
50% (15/30)
新薬D非投与群
6
24
20% (6/30)
5
5
50% (5/10)
合計
8
32
20
20
集計①では「重度の層は投与が選択される傾向, 軽度の層は非投与が
選択される傾向」という共変量の偏りが含まれているため, 平均因果
効果を正しく推定できていないが, 集計②では, 重症度別に改善率を
算出することで, 共変量から生じる偏りを調整.
10


# Page. 11

![Page Image](https://bcdn.docswell.com/page/VENY829DJ8.jpg)

層別解析による平均因果効果の推定
層別解析
投与群/非投与群を交絡因子ごとに層に分け, 各層内で効果量を比較.
その効果量を統合することで平均因果効果を推定する手法.
平均因果効果の推定量
Y(1)：投与群の場合の治療効果、Y(0)：非投与群の場合の治療効果
X＝0：軽度、X=1：重度
重症度(軽度/重度)Xによって治療効果Yが異なるのであれば、
E[Y(1)−Y(0)]=P[X=0]E[Y(1)−Y(0)∣X=0]+P[X=1]E[Y(1)−Y(0)∣X=1]
【層のサンプル数で重み付き平均した改善率の差】
(40/80)×(20%-20%)+(40/80)×(50%-50%)=0%
11


# Page. 12

![Page Image](https://bcdn.docswell.com/page/Y79PK128E3.jpg)

因果推論における潜在アウトカム
Y(1)：投与群の場合の治療効果、Y(0)：非投与群の場合の治療効果
Y=1：改善、Y=0：非改善
交絡因子
（重症度）
投与/非投与 Y(0) Y(1)
Y
n
軽度
投与
1
1
2
軽度
投与
0
0
8
軽度
非投与
1
1
6
軽度
非投与
0
0
24
20％（6/30）
10
30
“軽度層”において, 投与群
で20％改善するのであれば,
非投与群でも20％改善する
という仮定を置いている.
（重度層でも同様）
20％（2/10）
【層のサンプル数で重み付き平均した改善率の差】
(40/80)×(20%-20%)+(40/80)×(50%-50%)=0%
12


# Page. 13

![Page Image](https://bcdn.docswell.com/page/G78DR45Z7D.jpg)

Rによる実装例
# クロス集計②のデモデータの作成コード
dat &lt;- data.frame(
①：1対象者/1行の表を作成
②：層別に40行ずつ計80行
stratum = rep(c(&quot;軽度&quot;,&quot;重度&quot;), each = 40), #軽度/重度で各々40例
treat = c(
rep(1, 10), rep(0, 30), # 軽度: 投与群10, 非投与群30
rep(1, 30), rep(0, 10) # 重度: 投与群30, 非投与群10
),
③：軽度層にて, 1(投与群)を30, 0(非投与群)を10人…
13


# Page. 14

![Page Image](https://bcdn.docswell.com/page/L7LMK6Y1JR.jpg)

Rによる実装例
# クロス集計表②のデモデータの作成コード（続き）
outcome = c(
rep(1, 2), rep(0, 8), # 軽度: 投与群 (改善2, 非改善8)
rep(1, 6), rep(0, 24), # 軽度: 非投与群 (改善6, 非改善24)
rep(1, 15), rep(0, 15), # 重度: 投与群 (改善15, 非改善15)
rep(1, 5), rep(0, 5)
# 重度: 非投与群 (改善5, 非改善5)
)
)
④：軽度層にて, 改善が2, 非改善が8…
14


# Page. 15

![Page Image](https://bcdn.docswell.com/page/4EMY25N5EW.jpg)

Rによる実装例(作成データの可視化)
head(dat, n = 20) 最初の20行を可視化
15


# Page. 16

![Page Image](https://bcdn.docswell.com/page/PER9M3DZJ9.jpg)

Rによる実装例
# ロジスティック回帰による改善率の出力
fit &lt;- glm(outcome ~ treat + stratum, family = binomial, data = dat)
①：treatとstratumを説明変数としたモデル
predict(fit, data.frame(stratum = &quot;軽度&quot;, treat = 1), type = &quot;response&quot;)
②：軽度層における投与群(treat=1)のpredictを算出.
treat=0との差を取り, 平均因果効果を算出
16


# Page. 17

![Page Image](https://bcdn.docswell.com/page/P7XQV411EX.jpg)

Rによる実装例
# ロジスティック回帰による改善率の出力
fit &lt;- glm(outcome ~ treat + stratum, family = binomial, data = dat)
predict(fit, data.frame(stratum = “軽度&quot;, treat = 1), type = &quot;response&quot;)
stratum
treat
predict
軽度
1
0.20
軽度
0
0.20
重度
1
0.50
重度
0
0.50
17


# Page. 18

![Page Image](https://bcdn.docswell.com/page/37K9QZ2M7D.jpg)

Rによる実装例
# 平均因果効果の推定
library(marginaleffects) 事前準備：install.packages(&quot;marginaleffects&quot;)
avg_comparisons(fit, variables = &quot;treat&quot;)
【層のサンプル数で重み付き平均した改善率の差】
(40/80)×(20%-20%)+(40/80)×(50%-50%)=0%
18


# Page. 19

![Page Image](https://bcdn.docswell.com/page/LJ3WPD42J5.jpg)

共変量マッチング
full matching
投与群の各対象者に対して, 交絡因子が似ている非投与群の対象者をペアにし,
その差から平均的な因果効果を推定する手法.
# サンプルデータの作成コード
dat &lt;- data.frame(treat = c(1, 0, 0, 1, 0, 1, 0, 0, 1, 0),
x = c(1.9, 1.5, 2.1, 3.2, 3.0, 1.2, 1.3, 3.3, 2.7, 2.8),
y = c(11, 8, 10, 16, 14, 7, 6, 15, 13, 12))
dat
treat=1：投与、 treat=0：非投与
X：交絡因子、 Y：結果変数
19


# Page. 20

![Page Image](https://bcdn.docswell.com/page/8JDKLPQ6EG.jpg)

共変量マッチング（full matching）
dat
dat
ID
X
T
Y
ID
X
T
Y
層
1
1.9
1
11
1
1.9
1
11
①
2
1.5
0
8
2
1.5
0
8
③
3
2.1
0
10
3
2.1
0
10
①
4
3.2
1
16
4
3.2
1
16
②
5
3.0
0
14
5
3.0
0
14
②
6
1.2
1
7
6
1.2
1
7
③
7
1.3
0
6
7
1.3
0
6
③
8
3.3
0
15
8
3.3
0
15
②
9
2.7
1
13
9
2.7
1
13
④
10
2.8
0
12
10
2.8
0
12
④
投与群(T=1)である
ID=1, 4, 6, 9に対
して, 共変量Xが近
い値(似ている)を
取っている非投与群
(T=0)の対象者をペ
アにする.
20


# Page. 21

![Page Image](https://bcdn.docswell.com/page/VEPK2NGZ78.jpg)

共変量マッチング（full matching）
# full matchingの計算
①：full matchingを指定
library(MatchIt)
match_full &lt;- matchit(treat ~ x, data = dat, method = &quot;full&quot;,
distance = &quot;mahalanobis&quot;, estimand = &quot;ATE&quot;) ②：Xの距離によるfull
matchingを算出.
dat_match &lt;- match.data(match_full)
平均因果効果(Average Causal
Effect)の推定
dat_match
21


# Page. 22

![Page Image](https://bcdn.docswell.com/page/27VVDK6M7Q.jpg)

共変量マッチング（full matching）
dat
ID
X
T
Y
層
1
1.9
1
11
①
2
1.5
0
8
③
3
2.1
0
10
①
4
3.2
1
16
②
5
3.0
0
14
②
6
1.2
1
7
③
7
1.3
0
6
③
8
3.3
0
15
②
9
2.7
1
13
④
10
2.8
0
12
④
22


# Page. 23

![Page Image](https://bcdn.docswell.com/page/5JGLYQNX7L.jpg)

共変量マッチング（full matching）
full matchingにより層を構成
層
T(1)
T(0)
①
1
3
②
4
5、8
③
9
10
④
6
2、7
“層②”内において, 潜在アウト
カムの欠測を補完
潜在アウトカム
層
ID
Y(0)
Y(1)
①
1、3
10
11
②
4、5、8
14、15
16
③
9、10
12
13
④
2、6、7
6、8
7
層
ID
Y(0)
4
②
Y(1)
16
5
14
8
15
23


# Page. 24

![Page Image](https://bcdn.docswell.com/page/47QYMKQ5EP.jpg)

共変量マッチング（full matching）による平均因果効果
潜在アウトカム
層
ID
Y(0)
Y(1)
①
1、3
10
11
(2/10)×(11-10) : ①
②
4、5、8
14、15
16
(3/10)×{(1/2)×(16-14)+(1/2)×(16-15)｝:②
③
9、10
12
13
(2/10)×(13-12)：③
④
2、6、7
6、8
7
(3/10)×{(1/2)×(7-6)+(1/2)×(7-8)｝: ④
平均因果効果= ① ＋ ② ＋ ③ ＋ ④
24


# Page. 25

![Page Image](https://bcdn.docswell.com/page/KE4WVPNVJ1.jpg)

共変量マッチング（full matching）による平均因果効果
# full matchingによる平均因果効果の推定値
library(marginaleffects)
fit &lt;- lm(y ~ treat, weights = weights, data = dat_match)
avg_comparisons(fit, variables = &quot;treat&quot;) treatを説明変数, full matchingによる
重みを用いて回帰
平均因果効果= ① ＋ ② ＋ ③ ＋ ④
25


# Page. 26

![Page Image](https://bcdn.docswell.com/page/L71Y3954JG.jpg)

まとめ
✓観察研究では割り付けが無作為ではないため, 治療効果の推定
値が交絡因子の違いにより, 歪められる.
✓層別解析により, 重症度などの交絡因子ごとに比較することで,
治療効果の偏りを調整することができる.
✓共変量full matchingは患者背景の類似性に基づき対応付けを行
うことで, 精度の高い治療効果の推定に寄与する.
26


# Page. 27

![Page Image](https://bcdn.docswell.com/page/G7WGPQ5ZE2.jpg)

参考資料
tosuke. 因果推論の用語を整理してみよう①
https://nounai-librarian.com/causalintro/（最終アクセス
2026/04/03）
高橋 将宜.『統計的因果推論の理論と実装 (Wonderful R) 』共立出版(2022)
Chapter2 潜在的結果変数の枠組み
Chapter4 統計的因果推論における重要な仮定
林 岳彦.『はじめての統計的因果推論 』岩波書店(2024)
第Ⅰ部 因果推論の基本的な考え方
第Ⅱ部 因果効果の推定手法
27


# Page. 28

![Page Image](https://bcdn.docswell.com/page/4JZLKWNLE3.jpg)

Thank you
for your kind attention!!
株式会社 ピープロ・ジャパン
DM/統計解析グループ
〒541-0041
大阪市中央区北浜2丁目2番22号
TEL：06-6121-2181
Fax：06-6121-6717
Mail：pj@p-pro.info
https://p-pro.info/japan
28


# Page. 29

![Page Image](https://bcdn.docswell.com/page/YE6WQG8MEV.jpg)

- End of File -


