---
title: 小さく始めるシミュレーション
tags:  #[第9回大阪sas勉強会]  
author: [森岡裕[SASユーザー総会世話人]](https://www.docswell.com/user/6484025)
site: [Docswell](https://www.docswell.com/)
thumbnail: https://bcdn.docswell.com/page/LE3RP9YD75.jpg?width=480
description: [第9回大阪SAS勉強会] 森田 祐介
published: March 26, 24
canonical: https://www.docswell.com/s/6484025/Z4QGXQ-2024-03-26-065824
---
# Page. 1

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

第9回大阪SAS勉強会
2024.03.22（金）
小さく始めるシミュレーション
～シミュレーションでp値の分布を確かめてみた～
Beginning Simulations on a Simple Example
- Exploring the Distribution of p-values through Simulation -
ノーベルファーマ株式会社
研究開発本部 データサイエンス部
森田 祐介
1


# Page. 2

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

要旨
• シミュレーションは解析業務、研究および統計の学習に有用である
• 簡単な事例を用いて、シミュレーションの実装方法を紹介する
2


# Page. 3

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

発表内容
1. 導入
2. 実践
3. まとめ
4. おまけ
3


# Page. 4

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

導入：臨床試験のシミュレーションとは
• パソコン上で行う仮想的な臨床試験のこと
• 乱数を利用して、様々な試験デザインをモデル化し、
試験を複数回繰り返し実行することで、
介入の有効性や安全性の成績の分布を予測する
• 実際の臨床試験を行う前に、低コストで、試験結果に
どの要因が、どのような影響を及ぼすか評価することで
試験デザインの性能を把握し、成功確率の向上を図る
4


# Page. 5

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

導入：シミュレーションの利用事例
• 症例数設計の検算
• 特に2値アウトカムで正規分布への近似精度が悪い状況のとき
• 複雑な試験デザインや解析手法の検出力（αエラー）の確認
• アダプティブデザイン
• MMRMや感度分析
• 多重性の調整方法
• ベイズなど
• 統計学の学習
• 社内研修で95％信頼区間、検出力、αエラーの説明に利用
5


# Page. 6

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

実践：シミュレーションのシナリオ
• 主要評価項目は血圧（連続量）
• 実薬群 vs プラセボ群
• ベースラインからの変化量の平均値を群間比較
• 群間差は－10、変化量の標準偏差15（共通）
• αエラー両側5％、検出力80％
• 1群37例が必要→
• 中止や脱落は起こらない
• 100,000回試験を繰り返す
proc power;
twosamplemeans test = diff
meandiff = 10
stddev = 15
alpha = 0.05
sides = 2
power = 0.8
npergroup = .
;
run;
6


# Page. 7

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

実践：シミュレーションデータを作成
• データを作る部分が肝心
★ポイント
*シミュレーションデータの作成;
発生する乱数に再現性をもたせる
data simdata;
call streaminit(20240322);*乱数シードの設定;
NperGroup = 37;
do trial = 1 to 100000;
★ポイント
do subjid = 1 to NperGroup;
正規分布に従う乱数を生成
trtpn = 1;*実薬;
chg = rand(&#039;NORMAL&#039;, -10, 15);*mean, sd;
output;
trtpn = 9;*プラセボ;
chg = rand(&#039;NORMAL&#039;, 0, 15);*mean, sd;
output;
end;
end;
run;
7


# Page. 8

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

実践：シミュレーションデータを解析
• BYステートメントを活用して、試験ごとに解析結果を算出！
*高速化のため各出力を一旦停止する;
ods graphics off;
ods exclude all;
ods noresults;
ods listing close;
options nonotes;
★ポイント
マクロでプロシジャを繰り返し実行
すると時間がかかる！
proc ttest data = simdata ;
by trial;*試験ごとに解析する;
class trtpn;
var chg;
ods select ttests conflimits;*必要な結果だけ取得する;
ods output ttests=ttests conflimits=cis;
run;
*各出力を再開する;
ods graphics on;
ods exclude none;
ods results;
ods listing;
options notes;
8


# Page. 9

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

実践：シミュレーション結果を要約
• 要約統計量や可視化を用いて、シミュレーション結果を要約！
data results;
merge
ttests(where=(Method=&quot;Pooled&quot;))
cis(where=(Method=&quot;Pooled&quot;))
;
by trial;
if probt &lt; 0.05 then SUCCESS = 1;
else SUCCESS = 0;
run;
理論値0.808に近い
検出力となっている
*検出力の確認;
proc means data = results n mean;
var SUCCESS;
output out = simres(drop=_:) n = repeat mean = probability1;
run;
9


# Page. 10

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

実践：両側p値の分布を確認
proc univariate data = results ;
var probt;
run;
proc sgplot data = results;
histogram probt/binwidth=0.01;
run;
対立仮説下（群間差=-10）
★ポイント
p&lt;0.01は別に珍しくない
帰無仮説下（群間差=0）
★ポイント
帰無仮説下ではp値は一様分布になる
10


# Page. 11

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

まとめ
• シミュレーションは解析業務、研究および統計の学習に有用である
• 簡単な事例を用いて、シミュレーションの実装方法を紹介した
• 乱数を利用する（結果の再現性のため、乱数シードを設定する）
• BYステートメントで試験ごとに解析する（proc XXXX; by TRIAL;）
• 高速化のため、不要な出力をオフにする（ODS出力制御）
• 可視化も活用してシミュレーション結果を要約する（腕の見せどころ）
11


# Page. 12

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

参考文献


# Page. 13

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

おまけ：シミュレーションの勘所
• 条件にも因るが、概して計算に時間を要するので、高スペックの解析マシンが望ましい
• 処理速度上、プロシジャからの出力は必要最低限に抑えるのが望ましい
• プログラムの作成段階では、繰り返しの数は100～1000回くらいに抑えて、
アルゴリズムをしっかり確認する→回数を増やす
• FDAのアダプティブデザインのガイダンスでは、1条件あたり10万回以上の繰り返しが推奨
• シナリオに応じた乱数生成の技術が重要
• 経時データなどは被験者内相関や欠測の考慮が必要
• Time to Eventのデータは打ち切りも考慮が必要
• シミュレーション結果の提示には、SGPLOTやSGPANELによる可視化・要約が有用
• シミュレーションは、あくまで一定の条件下の結果なので、
条件の一部が変わった場合に、結果にどう影響するかの評価も重要になってくる
→多くの条件でシミュレーションすることになる
→マクロ化するとよい(変更が生じうる条件をマクロパラメータ化しておく)
13


