製薬業界で加速するR活用—その将来性と得意分野—

18.7K Views

October 03, 25

スライド概要

Rによる統計解析実践セミナーに関する無料講演会の資料です

profile-image

株式会社ホクソエムの公式アカウント

シェア

またはPlayer版

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

ダウンロード

関連スライド

各ページのテキスト
1.

製薬業界で加速するR活用 —その将来性と得意分野— 2025.9.26 松浦 健太郎

2.

自己紹介 • 名前: • 松浦 健太郎 • 経歴・R歴 (詳細はresearchmap参照): • • • • バイオベンチャー バイオインフォマティクス (2年半) 国内製薬企業 前臨床 バイオマーカー (6年) 外資製薬企業 臨床 生物統計部 (6年) 国内製薬企業 DX (5年) • 株式会社ホクソエム: • • TokyoRという国内のR勉強会つながりからできた会社 R関連の書籍を多数出版し、Rパッケージ作成の受託などを行っている 1

3.

こんな課題はありませんか? • 最新の統計手法を試したい • 複雑な例数設計シミュレーションを実行したい • 質の高いグラフを簡単に作成したい • 定型的なレポート作成を自動化したい 2

4.

本日のアジェンダ • なぜ今、Rなのか? • Rの得意分野 • まとめと次の一歩 3

5.

4 なぜ今、Rなのか?

6.

世界の製薬業界で加速するR活用 https://rinpharma.com/ https://r-consortium.org/ https://www.appsilon.com/post/gsk-r-adoption-journey https://www.appsilon.com/post/open-source-pharma https://www.appsilon.com/post/r-in-fda-submissions 5

7.

6 • R/Pharmaカンファレンス, R Consortiumともに、Roche/Genentech、GSK、 J & J、Pfizer、Novartis等の製薬企業に加え、FDA CDERが積極的に参加 • pharmaverseイニチアチブ • 「Case Report FormからeSubmissionまで」の完全な臨床データパイプ ラインの実現を目指している • admiralパッケージ (ADaM作成用のパッケージ)などを作成 • openpharmaイニチアチブ • 企業中立的なコラボレーション • 理想的なワークフローや標準を設定しない方針 • mmrm, DoseFinding, graphicalMCP, crmPackパッケージなど、 専門性の高いパッケージ群を作成

8.

Rが選ばれる3つの理由 • 理由① 圧倒的な拡張性 • 理由② オープンソース、フリー • 理由③ 活発なコミュニティ 7

9.

理由① 圧倒的な拡張性 • 22,000を超えるパッケージ (2025年9月時点, CRANだけで) • 最新の論文の手法がすぐにパッケージとして利用できる • 統計解析、グラフ・レポート作成、バイオインフォマティクスまで 8

10.

理由② オープンソース、フリー 9 • オープンソースで開発されており、ソースコードがすべて閲覧できる • そのため、優秀な人が開発チームに加わりやすい • コードやパッケージを検索できるシステムを作っている人もいる https://github.com/cran

11.

理由③ 活発なコミュニティ • エラーが出ても検索やAIによって解決策が見つかることが多い • パッケージによっては、GitHubなどで開発者と直接議論できる 10

12.

11 Rの得意分野

13.

得意分野 • ① データハンドリング • ② 統計解析 • ③ シミュレーション • ④ グラフ作成 • ⑤ レポート作成 12

14.

得意分野① データハンドリング • tidyverseパッケージによる効率的なデータハンドリング • 複雑なデータ構造も柔軟に加工・集計できる • dbplyrパッケージでSQLを書くことなしに、簡単に大規模なデータ ベースを操作できる 13

15.

例1:ADaMやSDTMのデータ操作 (松浦の担当回から) 14 • 解析対象集団のなかで、ARMCDごとに報告数が多いAEのランキングを作成する d_count <- d_adsl |> inner_join(d_ae, by = "USUBJID") |> summarise(count = n(), .by = c(ARMCD, AEDECOD)) |> arrange(ARMCD, desc(count)) 解析対象集団データとAEデータを USUBJID列をキーに結合する ARMCD, AEDECODごとに集計 カウントが大きい順に並び替え

16.

例2:一般的なRWDのデータベースからデータを抽出 15 • はじめて乳がんと確定で診断された日が2016年1月1日以降の患者群を選び、 • それらの患者群の処方データを結合し、 • 自分たちが注目する薬剤の処方データだけを抽出する tbl_disease_target <- tbl_disease |> filter(icd10_level3_code == "C50" & kakutei = 1) |> summarise(min_from_date = min(from_date), .by = patient_id) |> filter(min_from_date >= as.Date("2016-01-01")) 確定診断日以降の処方データのみを結合する tbl_target <- tbl_disease_target |> inner_join(tbl_prescription, by = join_by(patient_id, min_from_date <= prescription_date)) |> inner_join(tbl_drug_target, by = "receipt_code") d <- tbl_taget |> collect() 自分たちが注目する薬剤リストの一時テーブルを あからじめ作っておき、ここで結合する 上のコードたちが自動で効率的なSQL文に変換されて実行される

17.

得意分野② 統計解析 • 定番の手法から最新の手法まで幅広く対応している • Rでのみ実装されている手法も多く、臨床試験でRを使う一因となっている • • • • • • • • • 分散分析 一般化線形モデル 生存時間解析 (survivalパッケージ) 一般化推定方程式 (geepackパッケージ) 欠測値を含む解析 (mice, mmrmパッケージなど) ベイズ推定 (cmdstanr, rstan, rjags, TMB, brms, trialrパッケージなど) 因果推論 (PSweight, MatchItパッケージなど) 用量探索 (DoseFinding, BOIN, crmPackパッケージなど) 群逐次法・多重比較 (gsDesign, graphicalMCPパッケージなど) 16

18.

統計解析の5つの事例 • 以降、Rセミナーから抜粋して5つの事例を紹介します • Rセミナーでは理論的背景をしっかり説明しますが、本発表にお いては詳細を省略します。ご了承ください 17

19.

例1:一般化線形モデル (折原先生の担当回から一部改変) 18

20.

19 • ある有害事象の有無を年齢・性別・血圧から説明したい or 予測したい model.1 <- glm(YY1 ~ XX1 + XX2 + XX3, family = binomial, data = DD) summary(model.1) Call: glm(formula = YY1 ~ XX1 + XX2 + XX3, family = binomial, data = DD) Coefficients: Estimate Std. Error z value Pr(>|z|) (Intercept) -24.20422 2.33303 -10.375 < 2e-16 *** XX1 0.13611 0.01685 8.078 6.57e-16 *** XX2 -0.03514 0.24853 -0.141 0.888 XX3 0.11095 0.01506 7.369 1.71e-13 *** --Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 ...(略)...

21.

例2:生存時間解析 (土居先生の担当回から一部改変) • 分かりやすさのため、単群のサンプルデータを使ってKaplan-Meier法によ る生存確率の推定を行う例 library(survival) 信頼区間の オプション デフォルトは log time <- c(1, 2, 3, 3, 5, 7, 8) event <- c(1, 0, 1, 0, 1, 0, 1) 単群 km <- survfit(Surv(time, event == 1) ~ 1, conf.type = "log-log") summary(km) 生存時間解析用データ作成 𝑡 number at risk イベント 発現人数 መ 𝑆(𝑡) 標準誤差 (の推定値) 95% 信頼下限 95% 信頼上限 time n.risk n.event survival std.err lower 95% CI upper 95% CI 1 7 1 0.857 0.132 0.3341 0.979 3 5 1 0.686 0.186 0.2128 0.912 5 3 1 0.457 0.224 0.0691 0.795 8 1 1 0.000 NaN NA NA 20

22.

例3:一般化推定方程式 (石井先生の担当回から一部改変) • 爪甲剥離症に対する二重盲検ランダム化臨床試験 • 48週時点における爪甲剥離症の発生確率を減少させるか • 一般化推定方程式で治療群間の差を推定する 21

23.

22 library(geepack) library(emmeans) res <- geeglm(formula = y ~ trt * week, family = binomial(link = "logit"), corstr = "ar1", id = id, data = toenail) res_em <- emmeans(res, c("trt", "week"), at = list(week = 48)) 平均をとる変数 weekは連続変数なので, どの時点での平均を求める か指定 res_pairs <- pairs(res_em, adjust = "none") geeglm関数の 結果 emmeans関数の 結果 検定の多重性調 整法

24.

例4:ベイズ推定 (坂巻先生の担当回から一部改変) • 各用量における毒性出現確率の事後分布を推定したい 23

25.

24 data { int N; array[N] int tox; vector[N] dose; } // 患者数 // 毒性有無(0: 非毒性, 1: 毒性) // 各患者に投与した用量 parameters { real alpha; real beta; } // 切片(intercept) // 傾き(slope) model { // 事前分布の設定(例として広い正規分布) alpha ~ normal(0, 10); beta ~ normal(0, 10); // 毒性発現のロジスティックモデル for (i in 1:N) { tox[i] ~ bernoulli_logit(alpha + beta * dose[i]); } }

26.

例5:ANCOVAによる共変量調整 (田栗先生の担当回から一部改変) 25

27.

26 • RCTのサンプルデータに対し、共変量調整を行うことでアウトカム の平均の差を精度よく推定する library(sandwich) library(lmtest) ancova_model <- lm(Y ~ A + X1 + X2, data = df) robust_se <- coeftest(ancova_model, vcov = vcovHC(ancova_model)) ロバスト分散を使用

28.

得意分野③ シミュレーション 27 • Rはシミュレーションのコードを書きやすいため、臨床試験の計画段 階においてよく使われている • サンプルサイズ設計のシミュレーション (一貫性確率の計算を含む) • アダプティブデザインの動作特性のシミュレーション • ベイズ流デザインの動作特性のシミュレーション • 並列計算

29.

例:サンプルサイズ設計 (松浦の担当回から) 28

31.
[beta]
例:単群試験のPowerの計算 (2ページ前のStep 3)

30

1 library(tidyverse)
2
3 mean1 <- 5
4 sd1 <- 10
5 sig_level <- 0.025
6 n <- 30
7 N_sim <- 100
8
9 sim_list <- list()
10 for (simID in 1:N_sim) {
11
set.seed(simID)
12
y1 <- rnorm(n = n, mean = mean1, sd = sd1)
13
pval <- t.test(y1, alternative = "greater")$p.value
14
sim_list[[length(sim_list) + 1]] <- data.frame(simID = simID, pval = pval)
15 }
16 d_sim <- bind_rows(sim_list)
17
18 d_res <- d_sim |>
『データハンドリング』で
19
mutate(sig = if_else(pval < sig_level, 1, 0)) |>
20
summarise(power = mean(sig))
シミュレーション結果を集計

32.

31 Rセミナーでは、次の話題も扱います • シミュレーションでよく使うRの関数と文法 • 生存時間のアウトカム • 国際共同治験における一貫性 • 並列計算

33.

得意分野④ グラフ作成 • ggplot2パッケージ (とそのファミリー)が使いやすく習得しやすい • グラフが高品質で、社内報告・学会発表・論文で見栄えが良い • shinyパッケージによってインタラクティブなアプリを作成できる 32

34.

例1:Kaplan-Meier曲線 33 https://blog.devgenius.io/unveiling-longevity-dissecting-survival-probabilities-with-the-kaplan-meier-estimator-636d12b99f3b https://www.danieldsjoberg.com/ggsurvfit/

35.

例2:群逐次法のためのShinyアプリ • rpactパッケージを使って作成した群逐次法のためのShinyアプリ • https://rpact.shinyapps.io/public/ 34

36.

得意分野⑤ レポート作成 • quartoやrmarkdownパッケージによりレポート作成を自動化できる • コード → 解析 → 報告書 (Word/PDF) がワンクリック • テンプレート化によって標準化でき、再現性が確保される 35

37.

例:Clinical Study Report (CSR)の作成 • pharmaverseイニシアチブで精力的に作成されている • 2024 R/Pharmaカンファレンスの発表例: • https://www.youtube.com/watch?v=Socl09MSHL8 36

38.

37 まとめと次の一歩

39.

本日のまとめ • Rは業界標準のツールへ • Rの得意分野によって生産性を大きく向上させることができる 38

40.

次の一歩 • 自分の業務に近い課題でRを試してみると上達が早い • しかし、独自に学んだRコードの書き方はメンテナンスが難しく なりやすい • セミナーや研修を活用して体系的に学ぶのをおすすめしたい 39