Rで学ぶ医薬データにおける統計的因果推論入門

168 Views

April 05, 26

スライド概要

profile-image

SAS言語を中心として,解析業務担当者・プログラマなのコミュニティを活性化したいです

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

ダウンロード

関連スライド

各ページのテキスト
1.

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

2.

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

3.

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

4.

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

5.

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

6.

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

7.

観察研究における層別のクロス集計表 集計① 症状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

8.

観察研究における層別のクロス集計表 軽度 集計② 症状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

9.

観察研究における層別のクロス集計表 集計② 軽度 症状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

10.

観察研究における層別のクロス集計表 集計① 症状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

11.

層別解析による平均因果効果の推定 層別解析 投与群/非投与群を交絡因子ごとに層に分け, 各層内で効果量を比較. その効果量を統合することで平均因果効果を推定する手法. 平均因果効果の推定量 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

12.

因果推論における潜在アウトカム 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

13.

Rによる実装例 # クロス集計②のデモデータの作成コード dat <- data.frame( ①:1対象者/1行の表を作成 ②:層別に40行ずつ計80行 stratum = rep(c("軽度","重度"), 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

14.

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

15.

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

16.

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

17.

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

18.

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

19.

共変量マッチング full matching 投与群の各対象者に対して, 交絡因子が似ている非投与群の対象者をペアにし, その差から平均的な因果効果を推定する手法. # サンプルデータの作成コード dat <- 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

20.

共変量マッチング(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

21.

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

22.

共変量マッチング(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

23.

共変量マッチング(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

24.

共変量マッチング(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

25.

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

26.

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

27.

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

28.

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

29.

- End of File -