Top Banner
Pocock O’Brien-Fleming H24 BioS 1 はじめに 1.1 本稿の内容 O’Brien-Flemming Pocock 2 2 Pocock の方法・O’Brien-Fleming の方法 (その1)(その2) α Pocock O’Brien-Fleming 2 n 1 n * 1 α α Pocock O’Brien-Fleming 「棄 却限界の値」に注目する方法 2.1 Pocock の方法 Pocock 分散既知 t 2.5% ±1.96 t t 2.5% α エラーがインフレを起こす * 2 * 1 α 1 3 4 1 2 3 1 * 2 t α フレ 1
24

中間解析入門(その3: Pocock の方法と O’Brien-Flemingの方法) · 2012-07-21 · 中間解析入門(その3: Pocockの方法とO’Brien-Flemingの方法)

Mar 11, 2020

Download

Documents

dariahiddleston
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: 中間解析入門(その3: Pocock の方法と O’Brien-Flemingの方法) · 2012-07-21 · 中間解析入門(その3: Pocockの方法とO’Brien-Flemingの方法)

中間解析入門(その3:Pocockの方法とO’Brien-Flemingの方法)

H24年度 BioS継続勉強会:第3回補助資料1

土居 正明

1 はじめに

1.1 本稿の内容

本稿では、中間解析の多重性の調整方法のうち、古典的な方法である O’Brien-Flemmingの方法と Pocockの方法の 2種

類を扱います。

2 Pocockの方法・O’Brien-Flemingの方法

歴史的には、(その1)(その2)でご説明した α 消費関数の発明よりも先に発明された手法である、Pocockの方法と

O’Brien-Flemingの方法の 2種類をご紹介します。これらの方法にはいくつか特徴がありますが、

• 最終解析を含めた解析の回数を n回とすると、最終解析の症例数の 1n の症例が集まるごとに解析を行う*1。

• α消費関数は「各解析の消費 α」つまり有意水準に注目しましたが、Pocockの方法や O’Brien-Flemingの方法は「棄

却限界の値」に注目する方法です。

では、それぞれの方法を見ていきましょう。

2.1 Pocockの方法

まずは Pocockの方法です。これは

• 全ての解析の棄却限界を同じ値にする方法

です。ただし、

• 分散既知

を仮定しています。これは大まかに言いますと、t 検定の統計量に対して両側検定を行う際に、全て標準正規分布の上下

2.5%点である ±1.96を棄却限界にするようなものです。t分布と標準正規分布では t分布のほうが上側 2.5%点の値が大き

くなりますので、αエラーがインフレを起こすことが懸念されます*2。

*1 α消費関数を用いた方法は、「最終解析の症例数のうち半分が集まったら 1回、 34が集まったらもう 1回中間解析を行い、最後に最終解析を行う」

デザインや「最終解析の 23の症例数が集まったときに 1回だけ中間解析を行う」方法なども可能です。

*2 例数が増えると t分布は標準正規分布に近づいていきますので、αエラーのインフレは例数が少ないほど顕著であると想定されます。

1

Page 2: 中間解析入門(その3: Pocock の方法と O’Brien-Flemingの方法) · 2012-07-21 · 中間解析入門(その3: Pocockの方法とO’Brien-Flemingの方法)

2.2 O’Brien-Flemingの方法

次に、O’Brien-Flemingの方法です。これも基本は同じですが、α 消費関数の言葉に翻訳しますと、「後の解析に消費 α

を多めに残す」方法です。具体的には

• 全部でK 回解析を行うとし、最終解析の棄却限界を C とすると、k 回目 (1 ≤ k ≤ K)の検定の棄却限界を

√K

k·C

とする方法

です*3。ただし今度も、

• 分散既知

を想定しています。

3 シミュレーションによる棄却限界の算出

さて、棄却限界は [1] などに書いてあるのですが、今回はその値をシミュレーションで求めてみます。

3.1 Pocockの方法

設定は以下の通りです。

• 中間解析を 4回、最終解析を 1回の計 5回解析を行う

• 1群 10例

• シミュレーション回数は 10万回

• 両群とも N(0, 1)に従うとする

• 棄却限界の初期値を適当に 2.3とし、αエラーを求める

• 棄却限界を 0.01ずつ大きくし、計 20個の棄却限界に対する αエラーを求める

これより、k 回目の解析 (k = 1, 2, · · · , 5)の 1群あたりの例数を nk、各群の平均の推定値を µ̂1,k, µ̂2,k としたときに、検定

統計量 zk は

zk =µ̂1,k − µ̂2,k√(

1nk

+ 1nk

)σ2

=µ̂1,k − µ̂2,k√

2nk· 1

となります*4。

プログラムは後に回して、出力をご紹介します。変数の意味は以下の通りです。

no    :通し番号

niter   :繰り返し回数

type   :Pocockか O’Brien-Flemingか

p 1∼p 5 :1∼5回目の検定の αエラー

p total  :全体を通しての αエラー

rej 1∼rej 5:1∼5回目の検定の棄却限界

また、試験全体の αエラーが 0.05に近い部分を、太字や下線で強調しておきます。

*3 つまり、棄却限界の値を段々小さくしていく方法です。つまり、段々有意差がつきやすくなります。きちんと確認してはいませんが、O’Brien-Flemingの方法は、Pocockの方法の「最初の棄却限界が小さすぎて、例数が少ない段階(検出力が低い段階)で αエラーが消費されすぎて、例数が増えてきた頃(検出力が大きい段階)に有意差がつきにくい」という点を補正したくて提案されたのではないかと思います。

*4 分散 σ2 は既知としますので、推定値ではなく、真の値 1を代入します。

2

Page 3: 中間解析入門(その3: Pocock の方法と O’Brien-Flemingの方法) · 2012-07-21 · 中間解析入門(その3: Pocockの方法とO’Brien-Flemingの方法)

3.1.1 Pocockの方法:0.01区切り

no niter n type p 1 p 2 p 3 p 4 p 5 p total rej 1 rej 2 rej 3 rej 4 rej 5

0 100000 10 P 0.0209 0.0157 0.0115 .0096 .0080 0.0658 2.30 2.30 2.30 2.30 2.30

1 100000 10 P 0.0204 0.0154 0.0112 .0094 .0078 0.0643 2.31 2.31 2.31 2.31 2.31

2 100000 10 P 0.0199 0.0150 0.0110 .0092 .0077 0.0628 2.32 2.32 2.32 2.32 2.32

3 100000 10 P 0.0194 0.0148 0.0107 .0090 .0076 0.0614 2.33 2.33 2.33 2.33 2.33

4 100000 10 P 0.0189 0.0145 0.0104 .0088 .0074 0.0599 2.34 2.34 2.34 2.34 2.34

5 100000 10 P 0.0185 0.0141 0.0101 .0084 .0072 0.0583 2.35 2.35 2.35 2.35 2.35

6 100000 10 P 0.0180 0.0138 0.0099 .0083 .0071 0.0570 2.36 2.36 2.36 2.36 2.36

7 100000 10 P 0.0174 0.0134 0.0096 .0081 .0070 0.0556 2.37 2.37 2.37 2.37 2.37

8 100000 10 P 0.0170 0.0130 0.0095 .0079 .0069 0.0543 2.38 2.38 2.38 2.38 2.38

9 100000 10 P 0.0165 0.0128 0.0093 .0077 .0066 0.0528 2.39 2.39 2.39 2.39 2.39

10 100000 10 P 0.0161 0.0124 0.0090 .0075 .0065 0.0515 2.40 2.40 2.40 2.40 2.40

11 100000 10 P 0.0158 0.0120 0.0089 .0074 .0064 0.0504 2.41 2.41 2.41 2.41 2.41

12 100000 10 P 0.0154 0.0117 0.0086 .0072 .0063 0.0492 2.42 2.42 2.42 2.42 2.42

13 100000 10 P 0.0150 0.0113 0.0085 .0070 .0062 0.0481 2.43 2.43 2.43 2.43 2.43

14 100000 10 P 0.0147 0.0110 0.0083 .0068 .0062 0.0469 2.44 2.44 2.44 2.44 2.44

15 100000 10 P 0.0142 0.0107 0.0080 .0068 .0060 0.0457 2.45 2.45 2.45 2.45 2.45

16 100000 10 P 0.0138 0.0104 0.0078 .0067 .0058 0.0445 2.46 2.46 2.46 2.46 2.46

17 100000 10 P 0.0134 0.0102 0.0076 .0065 .0057 0.0434 2.47 2.47 2.47 2.47 2.47

18 100000 10 P 0.0131 0.0097 0.0074 .0064 .0057 0.0423 2.48 2.48 2.48 2.48 2.48

19 100000 10 P 0.0128 0.0095 0.0072 .0062 .0056 0.0413 2.49 2.49 2.49 2.49 2.49

20 100000 10 P 0.0123 0.0093 0.0071 .0061 .0055 0.0402 2.50 2.50 2.50 2.50 2.50

21 100000 10 P 0.0119 0.0090 0.0068 .0060 .0052 0.0389 2.51 2.51 2.51 2.51 2.51

22 100000 10 P 0.0115 0.0089 0.0066 .0059 .0050 0.0380 2.52 2.52 2.52 2.52 2.52

23 100000 10 P 0.0112 0.0086 0.0064 .0058 .0050 0.0370 2.53 2.53 2.53 2.53 2.53

24 100000 10 P 0.0109 0.0083 0.0063 .0056 .0049 0.0360 2.54 2.54 2.54 2.54 2.54

25 100000 10 P 0.0107 0.0081 0.0062 .0055 .0048 0.0352 2.55 2.55 2.55 2.55 2.55

26 100000 10 P 0.0103 0.0079 0.0060 .0054 .0047 0.0344 2.56 2.56 2.56 2.56 2.56

27 100000 10 P 0.0100 0.0077 0.0060 .0052 .0047 0.0336 2.57 2.57 2.57 2.57 2.57

28 100000 10 P 0.0098 0.0075 0.0058 .0050 .0045 0.0326 2.58 2.58 2.58 2.58 2.58

29 100000 10 P 0.0095 0.0072 0.0057 .0049 .0043 0.0316 2.59 2.59 2.59 2.59 2.59

3

Page 4: 中間解析入門(その3: Pocock の方法と O’Brien-Flemingの方法) · 2012-07-21 · 中間解析入門(その3: Pocockの方法とO’Brien-Flemingの方法)

以上より、どうやら棄却限界は 2.41と 2.42の間にありそうです。より正確に見るために、次は 2.41から始めて 0.001区

切りで見ていきます。

3.1.2 Pocockの方法:0.001区切り

no niter n type p 1 p 2 p 3 p 4 p 5 p total rej 1 rej 2 rej 3 rej 4 rej 5

0 100000 10 P 0.0158 0.0120 .0089 .0074 .0064 0.0504 2.410 2.410 2.410 2.410 2.410

1 100000 10 P 0.0157 0.0120 .0088 .0074 .0064 0.0503 2.411 2.411 2.411 2.411 2.411

2 100000 10 P 0.0157 0.0120 .0088 .0074 .0064 0.0502 2.412 2.412 2.412 2.412 2.412

3 100000 10 P 0.0157 0.0119 .0088 .0073 .0064 0.0501 2.413 2.413 2.413 2.413 2.413

4 100000 10 P 0.0156 0.0119 .0088 .0073 .0064 0.0499 2.414 2.414 2.414 2.414 2.414

5 100000 10 P 0.0156 0.0119 .0088 .0073 .0064 0.0498 2.415 2.415 2.415 2.415 2.415

6 100000 10 P 0.0155 0.0118 .0087 .0072 .0064 0.0497 2.416 2.416 2.416 2.416 2.416

7 100000 10 P 0.0155 0.0118 .0087 .0072 .0064 0.0496 2.417 2.417 2.417 2.417 2.417

8 100000 10 P 0.0154 0.0118 .0087 .0072 .0064 0.0494 2.418 2.418 2.418 2.418 2.418

9 100000 10 P 0.0154 0.0118 .0086 .0072 .0064 0.0493 2.419 2.419 2.419 2.419 2.419

10 100000 10 P 0.0154 0.0117 .0086 .0072 .0063 0.0492 2.420 2.420 2.420 2.420 2.420

11 100000 10 P 0.0153 0.0117 .0086 .0072 .0063 0.0490 2.421 2.421 2.421 2.421 2.421

12 100000 10 P 0.0153 0.0116 .0086 .0071 .0063 0.0489 2.422 2.422 2.422 2.422 2.422

13 100000 10 P 0.0152 0.0116 .0086 .0071 .0063 0.0489 2.423 2.423 2.423 2.423 2.423

14 100000 10 P 0.0152 0.0115 .0087 .0071 .0063 0.0488 2.424 2.424 2.424 2.424 2.424

15 100000 10 P 0.0152 0.0115 .0086 .0071 .0063 0.0487 2.425 2.425 2.425 2.425 2.425

16 100000 10 P 0.0151 0.0115 .0086 .0070 .0063 0.0486 2.426 2.426 2.426 2.426 2.426

17 100000 10 P 0.0151 0.0115 .0086 .0070 .0063 0.0485 2.427 2.427 2.427 2.427 2.427

18 100000 10 P 0.0151 0.0114 .0086 .0070 .0062 0.0483 2.428 2.428 2.428 2.428 2.428

19 100000 10 P 0.0150 0.0114 .0085 .0070 .0062 0.0483 2.429 2.429 2.429 2.429 2.429

以上より、棄却限界は 2.413 ∼ 2.414くらいとなりました。 

3.1.3 文献の値との比較

では、文献に記載してある値と、シミュレーション値を比較してみましょう。[1] の 26ページ Table 2.1に記載されてい

る値は 2.413です。シミュレーションで得られた値はだいぶ正確なようです。

3.2 O’Brien-Flemingの方法

では次に O’Brien-Flemingの方法です。初期値と 1.96とすること以外は、Pococokの方法と同じです。

4

Page 5: 中間解析入門(その3: Pocock の方法と O’Brien-Flemingの方法) · 2012-07-21 · 中間解析入門(その3: Pocockの方法とO’Brien-Flemingの方法)

3.2.1 O’Brien-Flemingの方法:0.01区切り

no niter n type p 1 p 2 p 3 p 4 p 5 p total rej 1 rej 2 rej 3 rej 4 rej 5

0 100000 10 O 0 .0019 .0098 0.0208 0.0281 0.0607 4.3827 3.0990 2.5303 2.1913 1.96

1 100000 10 O 0 .0018 .0096 0.0203 0.0274 0.0591 4.4051 3.1148 2.5433 2.2025 1.97

2 100000 10 O 0 .0017 .0093 0.0198 0.0270 0.0578 4.4274 3.1307 2.5562 2.2137 1.98

3 100000 10 O 0 .0017 .0090 0.0194 0.0264 0.0564 4.4498 3.1465 2.5691 2.2249 1.99

4 100000 10 O 0 .0015 .0088 0.0188 0.0259 0.0549 4.4721 3.1623 2.5820 2.2361 2.00

5 100000 10 O 0 .0014 .0086 0.0183 0.0254 0.0537 4.4945 3.1781 2.5949 2.2472 2.01

6 100000 10 O 0 .0013 .0084 0.0179 0.0250 0.0526 4.5169 3.1939 2.6078 2.2584 2.02

7 100000 10 O 0 .0013 .0080 0.0175 0.0245 0.0512 4.5392 3.2097 2.6207 2.2696 2.03

8 100000 10 O 0 .0012 .0077 0.0169 0.0242 0.0499 4.5616 3.2255 2.6336 2.2808 2.04

9 100000 10 O 0 .0011 .0074 0.0165 0.0237 0.0487 4.5839 3.2413 2.6465 2.2920 2.05

10 100000 10 O 0 .0011 .0072 0.0161 0.0232 0.0475 4.6063 3.2571 2.6594 2.3032 2.06

11 100000 10 O 0 .0011 .0069 0.0156 0.0228 0.0463 4.6287 3.2730 2.6724 2.3143 2.07

12 100000 10 O 0 .0010 .0066 0.0152 0.0224 0.0452 4.6510 3.2888 2.6853 2.3255 2.08

13 100000 10 O 0 .0009 .0063 0.0148 0.0220 0.0440 4.6734 3.3046 2.6982 2.3367 2.09

14 100000 10 O 0 .0009 .0061 0.0143 0.0217 0.0430 4.6957 3.3204 2.7111 2.3479 2.10

15 100000 10 O 0 .0008 .0059 0.0140 0.0212 0.0419 4.7181 3.3362 2.7240 2.3591 2.11

16 100000 10 O 0 .0008 .0057 0.0136 0.0208 0.0408 4.7405 3.3520 2.7369 2.3702 2.12

17 100000 10 O 0 .0007 .0055 0.0133 0.0202 0.0397 4.7628 3.3678 2.7498 2.3814 2.13

18 100000 10 O 0 .0007 .0053 0.0128 0.0199 0.0387 4.7852 3.3836 2.7627 2.3926 2.14

19 100000 10 O 0 .0007 .0051 0.0126 0.0196 0.0379 4.8075 3.3994 2.7756 2.4038 2.15

20 100000 10 O 0 .0007 .0048 0.0123 0.0192 0.0369 4.8299 3.4153 2.7885 2.4150 2.16

21 100000 10 O 0 .0006 .0046 0.0120 0.0188 0.0360 4.8523 3.4311 2.8015 2.4261 2.17

22 100000 10 O 0 .0006 .0044 0.0117 0.0186 0.0352 4.8746 3.4469 2.8144 2.4373 2.18

23 100000 10 O 0 .0006 .0043 0.0115 0.0181 0.0344 4.8970 3.4627 2.8273 2.4485 2.19

24 100000 10 O 0 .0006 .0041 0.0111 0.0177 0.0334 4.9193 3.4785 2.8402 2.4597 2.20

25 100000 10 O 0 .0005 .0039 0.0108 0.0173 0.0326 4.9417 3.4943 2.8531 2.4709 2.21

26 100000 10 O 0 .0005 .0038 0.0106 0.0170 0.0319 4.9641 3.5101 2.8660 2.4820 2.22

27 100000 10 O 0 .0005 .0037 0.0102 0.0166 0.0310 4.9864 3.5259 2.8789 2.4932 2.23

28 100000 10 O 0 .0005 .0036 0.0099 0.0163 0.0303 5.0088 3.5418 2.8918 2.5044 2.24

29 100000 10 O 0 .0004 .0034 0.0097 0.0160 0.0295 5.0312 3.5576 2.9047 2.5156 2.25

以上より、大体 2.03 ∼ 2.04の間のようです。今回も 0.001区切りでもう少し正確に見ていきましょう。

5

Page 6: 中間解析入門(その3: Pocock の方法と O’Brien-Flemingの方法) · 2012-07-21 · 中間解析入門(その3: Pocockの方法とO’Brien-Flemingの方法)

3.2.2 O’Brien-Flemingの方法:0.001区切り

no niter n type p 1 p 2 p 3 p 4 p 5 p total rej 1 rej 2 rej 3 rej 4 rej 5

0 100000 10 O 0 .0013 .0080 0.0175 0.0245 0.0512 4.5392 3.2097 2.6207 2.2696 2.030

1 100000 10 O 0 .0013 .0080 0.0174 0.0245 0.0511 4.5415 3.2113 2.6220 2.2707 2.031

2 100000 10 O 0 .0013 .0080 0.0173 0.0244 0.0509 4.5437 3.2129 2.6233 2.2718 2.032

3 100000 10 O 0 .0012 .0079 0.0173 0.0244 0.0508 4.5459 3.2145 2.6246 2.2730 2.033

4 100000 10 O 0 .0012 .0079 0.0172 0.0243 0.0506 4.5482 3.2160 2.6259 2.2741 2.034

5 100000 10 O 0 .0012 .0078 0.0172 0.0242 0.0505 4.5504 3.2176 2.6272 2.2752 2.035

6 100000 10 O 0 .0012 .0078 0.0172 0.0242 0.0504 4.5526 3.2192 2.6285 2.2763 2.036

7 100000 10 O 0 .0012 .0078 0.0171 0.0242 0.0503 4.5549 3.2208 2.6298 2.2774 2.037

8 100000 10 O 0 .0012 .0077 0.0170 0.0242 0.0502 4.5571 3.2224 2.6310 2.2786 2.038

9 100000 10 O 0 .0012 .0077 0.0170 0.0242 0.0500 4.5593 3.2239 2.6323 2.2797 2.039

10 100000 10 O 0 .0012 .0077 0.0169 0.0242 0.0499 4.5616 3.2255 2.6336 2.2808 2.040

11 100000 10 O 0 .0012 .0077 0.0169 0.0241 0.0498 4.5638 3.2271 2.6349 2.2819 2.041

12 100000 10 O 0 .0012 .0076 0.0168 0.0240 0.0496 4.5661 3.2287 2.6362 2.2830 2.042

13 100000 10 O 0 .0012 .0076 0.0168 0.0239 0.0494 4.5683 3.2303 2.6375 2.2841 2.043

14 100000 10 O 0 .0012 .0075 0.0167 0.0239 0.0493 4.5705 3.2318 2.6388 2.2853 2.044

15 100000 10 O 0 .0012 .0075 0.0167 0.0239 0.0492 4.5728 3.2334 2.6401 2.2864 2.045

16 100000 10 O 0 .0012 .0075 0.0167 0.0238 0.0491 4.5750 3.2350 2.6414 2.2875 2.046

17 100000 10 O 0 .0012 .0075 0.0166 0.0238 0.0490 4.5772 3.2366 2.6427 2.2886 2.047

18 100000 10 O 0 .0011 .0074 0.0166 0.0238 0.0489 4.5795 3.2382 2.6440 2.2897 2.048

19 100000 10 O 0 .0011 .0074 0.0165 0.0238 0.0488 4.5817 3.2398 2.6452 2.2909 2.049

以上より、最終解析での棄却限界は 2.038∼2.040くらいとなりました。

3.2.3 文献の値との比較

Pocockの方法同様、[1] の値と比べてみます。29ページ Table 2.3によると、最終解析の棄却限界は 2.040となります。

やはり、シミュレーションでだいぶ正確な値が得られたようです。

3.2.4 棄却限界のプロット

では最後に、得られた棄却限界を用いて、各解析時点での棄却限界をプロットしておきます。

6

Page 7: 中間解析入門(その3: Pocock の方法と O’Brien-Flemingの方法) · 2012-07-21 · 中間解析入門(その3: Pocockの方法とO’Brien-Flemingの方法)

図 1 Pocockの方法と O’Brien-Flemingの方法の棄却限界

4 αエラーの増大

4.1 シミュレーションによる検討

さて、Pocock, O’Brien-Flemingの方法は、共に分散を既知とした場合の方法でした。実際の治験では、分散が既知とな

ることはほぼあり得ません。そのため、あくまでこれらの方法は近似的にのみ αエラーを制御する方法となります。では、

シミュレーションによって実際に t検定を行う場合、どの程度 αエラーが増大するかを確認してみましょう。

設定は以下の通りです。

• 中間解析 4回と最終解析 1回の計 5回の検討を行う

• 1群 10例、20例、30例、50例、100例、200例、400例の 7通り*5

• シミュレーション回数はそれぞれ 1万回

• 両群ともデータは N(0, 1)に従う。

プログラムは最後に回して、結果を先に示します。

表 1 Pocockの方法の αエラ-

no niter n type mu1 sd1 mu2 sd2 p 1 p 2 p 3 p 4 p 5 p total

1 10000 10 P 0 1 0 1 0.1381 0.0278 0.0152 .0093 .0078 0.1982

2 10000 20 P 0 1 0 1 0.0556 0.0216 0.0143 .0064 .0079 0.1058

3 10000 30 P 0 1 0 1 0.0343 0.0171 0.0125 .0084 .0052 0.0775

4 10000 50 P 0 1 0 1 0.0275 0.0133 0.0098 .0089 .0070 0.0665

5 10000 100 P 0 1 0 1 0.0205 0.0134 0.0084 .0056 .0055 0.0534

6 10000 200 P 0 1 0 1 0.0175 0.0123 0.0085 .0075 .0060 0.0518

7 10000 400 P 0 1 0 1 0.0164 0.0108 0.0087 .0068 .0075 0.0502

*5 明らかに例数が少なすぎて非現実的な場合も含まれますが、極端な場合の影響や手法間の差をはっきりと見るために入れています。

7

Page 8: 中間解析入門(その3: Pocock の方法と O’Brien-Flemingの方法) · 2012-07-21 · 中間解析入門(その3: Pocockの方法とO’Brien-Flemingの方法)

では、各回の αエラーと累積 αエラーを例数ごとにプロットしてみます。

図 2 Pocockの方法の αエラー 図 3 Pocockの方法の累積 αエラー

累積 αエラーの方の参照線は α = 0.05のところに引いていますので、特に少数例の場合に大きく αエラーのインフレが

起こっているようです。たとえば、n = 50では 6.65%となっています。

次に、O’Brien-Flemingの方法を考えます。

表 2 O’Brien-Flemingの方法の αエラー

no niter n type mu1 sd1 mu2 sd2 p 1 p 2 p 3 p 4 p 5 p total

1 10000 10 O 0 1 0 1 0.0432 0.0118 0.0202 0.0199 0.0308 0.1259

2 10000 20 O 0 1 0 1 0.0039 0.0060 0.0149 0.0194 0.0272 0.0714

3 10000 30 O 0 1 0 1 0.0010 0.0045 0.0131 0.0209 0.0260 0.0655

4 10000 50 O 0 1 0 1 0.0001 0.0028 0.0093 0.0195 0.0282 0.0599

5 10000 100 O 0 1 0 1 0.0001 0.0023 0.0085 0.0143 0.0227 0.0479

6 10000 200 O 0 1 0 1 0.0000 0.0024 0.0069 0.0172 0.0265 0.0530

7 10000 400 O 0 1 0 1 0.0000 0.0013 0.0079 0.0156 0.0268 0.0516

図 4 O’Brien-Flemingの方法の αエラー 図 5 O’Brien-Flemingの方法の累積 αエラー

Pocockほど大きくはありませんが、やはり αエラーのインフレが起こっているようです。n = 50のとき、6%程度とな

8

Page 9: 中間解析入門(その3: Pocock の方法と O’Brien-Flemingの方法) · 2012-07-21 · 中間解析入門(その3: Pocockの方法とO’Brien-Flemingの方法)

りました。

4.2 Pocockの方法と O’Brien-Flemingの方法の違い

Pocockの方法と O’Brien-Flemingの方法を比較してみます。

• Pocockの方法の方が、1回目の解析での αエラーが大きい。これは、1回目の棄却限界が Pocockの方が小さいため、

間違って棄却されやすいからである。

• 例数の少ない段階では、「分散を既知」と仮定したことの「無理が大きい」ため、αエラーが出やすくなっている。

• O’Brien-Flemingの方法は、特に最初は棄却限界が大変大きいため、10例(1回目の中間解析では 1群 2例)という

極端な場合を除いては、1回目のαエラーは小さい (0.5%未満)。

5 微修正した方法

さて、Pocockの方法、O’Brien-Flemingの方法ともに、α エラーの増大が起こっていることが分かりました。そこで次

に、これらの方法を微修正した方法を考えます。つまり、Pocockの方法・O’Brien-Flemingの方法は分散既知の標準正規分

布をベースに考えましたが、これを t検定「っぽく」考えてやります。具体的に言いますと、棄却限界を t分布を用いたも

のに変更してやるのです。ただし、後から述べますがこの方法は厳密な方法ではありません。

表 3 1群 100例のときの微修正した Pocockの方法の棄却限界 c′k

解析の順番 例数 Pocockの方法の ck の標準正規分布での t検定の  自由度 df の t分布での

(i) (ni) 棄却限界 (ck) 下側パーセント点 (pk) 自由度 (df ) 下側 pk パーセント点 (c′k)

1 20 2.413 0.9921 18 2.664

2 40 2.413 0.9921 38 2.526

3 60 2.413 0.9921 58 2.486

4 80 2.413 0.9921 80 2.467

5 100 2.413 0.9921 100 2.456

式で考えていきます。k 回目の t統計量を Tk とおきますと、Pocockの方法は

|Tk| > ck

となったときに棄却する方法でした。これを標準正規分布の累積分布関数 Φを用いて書き直しますと、回りくどくなりま

すが、

|Tk| > Φ(Φ−1(ck)) (1)

となります。ここで、Φ−1(ck)の部分は、「棄却限界 ck は正規分布でみたときに下側何パーセント点に相当するか」という

意味があり、外の Φは「それを(Pocockの方法の検定統計量が従うと仮定している)標準正規分布に当てはめたときのパー

セント点」という意味があります。そこで、中の Φ−1(ck)を残した状態で、「今回の検定は t検定なので、t分布に変更して

やる」ということをします。つまり、(1)を

|Tk| > t(df, Φ−1(ck)) (2)

としてやります (df は Tk の自由度)。

O’Brien-Flemingの方法でも同様に考えることにします。

9

Page 10: 中間解析入門(その3: Pocock の方法と O’Brien-Flemingの方法) · 2012-07-21 · 中間解析入門(その3: Pocockの方法とO’Brien-Flemingの方法)

表 4 1群 100例のときの微修正した O’Brien-Flemingの方法の棄却限界 c′k

解析の順番 例数 O’Brien-Flemingの方法の ck の標準正規分布での t検定の  自由度 df の t分布での

(i) (ni) 棄却限界 (ck) 下側パーセント点 (pk) 自由度 (df ) 下側 pk パーセント点 (c′k)

1 20 4.562 1.0000 18 6.394

2 40 3.226 0.9994 38 3.485

3 60 2.634 0.9958 58 2.727

4 80 2.281 0.9887 78 2.327

5 100 2.040 0.9793 98 2.067

5.1 この方法の微妙な点

あまり深追いせずにさらっと書いておきますと、分散既知のモデルでの解析時点ごとの統計量の相関構造と、分散未知の

モデルでの解析時点の相関構造が異なる点が、この方法のやや正確さに欠ける点です。

詳細は、(その4)(その5)でご説明します。

5.2 シミュレーションによる検討

では、シミュレーションにより今回の状況での αエラーの大きさを検討してみましょう。やはりプログラムは最後に回し

まして、結果を先にご紹介します。

5.2.1 Pocockの方法

表 5 微修正した Pocockの方法の αエラー

no niter n type p 1 p 2 p 3 p 4 p 5 p total rej 1 rej 2 rej 3 rej 4 rej 5

1 10000 10 P 0.0156 0.0153 0.0120 .0070 .0063 0.0562 7.8554 3.3292 2.9004 2.7443 2.6638

2 10000 20 P 0.0156 0.0134 0.0106 .0087 .0067 0.0550 3.3292 2.7443 2.6147 2.5579 2.5261

3 10000 30 P 0.0150 0.0116 0.0082 .0084 .0063 0.0495 2.9004 2.6147 2.5400 2.5057 2.4860

4 10000 50 P 0.0190 0.0125 0.0095 .0076 .0057 0.0543 2.6638 2.5261 2.4860 2.4669 2.4557

5 10000 100 P 0.0179 0.0111 0.0088 .0078 .0056 0.0512 2.5261 2.4669 2.4484 2.4393 2.4340

6 10000 200 P 0.0167 0.0111 0.0095 .0074 .0072 0.0519 2.4669 2.4393 2.4304 2.4260 2.4234

7 10000 400 P 0.0149 0.0112 0.0092 .0079 .0062 0.0494 2.4393 2.4260 2.4216 2.4195 2.4182

10

Page 11: 中間解析入門(その3: Pocock の方法と O’Brien-Flemingの方法) · 2012-07-21 · 中間解析入門(その3: Pocockの方法とO’Brien-Flemingの方法)

図 6 微修正した Pocockの方法の αエラー 図 7 微修正下 Pocockの方法の累積 αエラー

特に例数が少ない場合に顕著ですが、明らかな改善が見られています。全ての場合で αエラーが 6%未満となりました。

また、n = 20以上で、5.5%以下となりました。

5.2.2 O’Brien-Flemingの方法

表 6 微修正した O’Brien-Flemingの方法の αエラー

no niter n type p 1 p 2 p 3 p 4 p 5 p total rej 1 rej 2 rej 3 rej 4 rej 5

1 10000 10 O 0 .0017 .0089 0.0167 0.0274 0.0547 443.806 5.7024 3.2688 2.5626 2.1971

2 10000 20 O 0 .0007 .0080 0.0184 0.0244 0.0515 15.220 4.0232 2.8926 2.4047 2.1116

3 10000 30 O 0 .0013 .0080 0.0171 0.0222 0.0486 8.797 3.6976 2.7961 2.3602 2.0864

4 10000 50 O 0 .0008 .0091 0.0165 0.0247 0.0511 6.394 3.4849 2.7267 2.3270 2.0672

5 10000 100 O 0 .0011 .0078 0.0170 0.0252 0.0511 5.307 3.3474 2.6786 2.3034 2.0534

6 10000 200 O 0 .0013 .0080 0.0162 0.0273 0.0528 4.901 3.2847 2.6558 2.2920 2.0466

7 10000 400 O 0 .0009 .0063 0.0169 0.0225 0.0466 4.724 3.2547 2.6446 2.2863 2.0433

11

Page 12: 中間解析入門(その3: Pocock の方法と O’Brien-Flemingの方法) · 2012-07-21 · 中間解析入門(その3: Pocockの方法とO’Brien-Flemingの方法)

図 8 微修正した O’Brien-Flemingの方法の αエラー 図 9 微修正下 O’Brien-Flemingの方法の累積 αエラー

Pocockの方法同様、特に例数が少ない場合に、明らかな改善が見られています。全ての場合で、αエラーは 5.5%未満と

なりました。

6 まとめなど

6.1 現在の立場

最初に、Pocockの方法や O’Brien-Flemingの方法は「古典的」だと述べました。この理由は、最初にも書きましたよう

に、「解析の回数を n回とすると、最終解析の症例数の1nの症例が集まるごとに解析を行う」という風に、中間解析のタイ

ミングが規定されていることなどから、使い勝手が悪い面があるからです*6。

では、現在はどのようにしているのかと言いますと、「大体 Pocockや O’Brien-Flemingと同じような棄却限界となる」α

消費関数を考えて、それを用いることが多いです。実は(その1)ですでに書いているのですが、再度書いておきます。記

号は(その1)に合わせますと、

1. f5(t) = min{

2− 2 · Φ(

z1−α2√t

), α

}:[2] で O’Brien & Flemingの方法に近いと言われた関数

(ただし、f5(0) = 0とする。また、Φ(x)は標準正規分布の累積分布関数とする)

2. f6(t) = min{α log(1 + (e− 1)t), α}:[2] で Pocockの方法に近いと言われた関数

です。

なお、α 消費関数が理論上無限個考えられることを考慮すれば、Pocockや O’Brien-Flemingが中間解析の方法論の中で

「とりたてて優れた」ものであるとは思えません。ですので、必ずしもこれらを用いる必要はありません*7。その意味で、厳

密に「最適な α消費関数を見つける」ことは、大変難しい問題だと思います。

しかし、そもそも中間解析を行うのが「計画段階で有効性の見込みが十分にできていないから」という場合もあると思い

ます。そのような場合に、各種 α消費関数を比べること自体には意味があるとしても、「微細な差異」に拘泥することがそ

れほど有益であるとは思えません*8。ですので、「大体、後の方で αをたくさん消費したいから O’Brien-Flemingで」とい

う感じの大雑把な判断も、それほど悪くないのではないかと思います。

6.2 検出力の比較

長くなりましたので、O’Brien-Flemingと Pocockの方法の検出力の比較は問題に回します。

*6 逆に、このタイミングで試験を行う際には、Pocockや O’Brien-Flemingの方法を用いていただいて問題ありません。*7 現実に、これ以外にも数多くの α消費関数が提案されています。*8 情報が少ない状態でどれだけ計算しても、情報が増えるわけではありませんので。また、「正しい手法」が複数ある場合、その優劣は「真の状況(群間差など)に依存する」場合も多いですので、真の状況が分からない状態でどれだけ考えても限界があるかと思います。

12

Page 13: 中間解析入門(その3: Pocock の方法と O’Brien-Flemingの方法) · 2012-07-21 · 中間解析入門(その3: Pocockの方法とO’Brien-Flemingの方法)

7 プログラム

7.1 Pocock・O’Brien-Flemingの棄却限界を求めるプログラム

%let niter = 100000;

%let n = 10;

%let mu1 = 0;

%let mu2 = 0;

%let sd1 = 1;

%let sd2 = 1;

*type=P:Pocock, O:O’Brien-Fleminng;

*まずはデータと、統計量を作成するマクロを作成します。;

%macro data(no);

  data d1;

   call streaminit(642110 + 3*&no);

   do iter = 1 to&niter;

    %do group = 1%to 2;

       do i = 1 to&n;

        group =&group;

        x = rand(”norm”,&&mu&group,&&sd&group);

        if   i <=  &n/5 then flag = 1;

        else if i<= 2*&n/5 then flag = 2;

        else if i<= 3*&n/5 then flag = 3;

        else if i<= 4*&n/5 then flag = 4;

        else         flag = 5;

        output;

       end;

    %end;

   end;

  run;

 *統計量の計算;

  %do i = 1 %to 5;

  *z 統計量を作るために、平均の群間差を proc ttestで求める;

   ods output Statistics=out1&i;

   proc ttest data=d1;

    class group;

    var x;

    where flag<= &i;

    by iter;

   run;

13

Page 14: 中間解析入門(その3: Pocock の方法と O’Brien-Flemingの方法) · 2012-07-21 · 中間解析入門(その3: Pocockの方法とO’Brien-Flemingの方法)

  *z 統計量の計算;

   data out11&i;

    set out1&i;

    if class = ’Diff (1-2)’;

    z&i = mean / sqrt(2/(&n/5*&i)); *分散既知(σ2 = 1)のため、z 統計量を用いる;

    keep iter z&i;

   run;

  %end;

  data out1;

   merge out111 out112 out113 out113 out114 out115 end=final;

   by iter;

   keep iter z1 z2 z3 z4 z5;

  run;

%mend data;

*次に、棄却限界を入れると αエラーを求めるマクロを作成します。;

%macro rej(type, no, rej5);

  data out&type. &no;

   set out1 end=final;

   no =&no;

   niter =&niter;

   n = &n;

   type = ”&type”;

   if ” &type” = ”P” then do;

    %do i=1%to 5;

       rej&i = &rej5;

    %end;

   end;

   else if ”&type” = ”O” then do;

    %do i = 1 %to 5;

       rej&i = &rej5 * sqrt(5 /&i);

    %end;

   end;

  *検定の実行;

   if   abs(z1)> rej1 then flag1 = 1;

   else if abs(z2)> rej2 then flag2 = 1;

   else if abs(z3)> rej3 then flag3 = 1;

   else if abs(z4)> rej4 then flag4 = 1;

   else if abs(z5)> rej5 then flag5 = 1;

   %do i = 1 %to 5;

      if flag&i =. then flag&i=0;

   %end;

14

Page 15: 中間解析入門(その3: Pocock の方法と O’Brien-Flemingの方法) · 2012-07-21 · 中間解析入門(その3: Pocockの方法とO’Brien-Flemingの方法)

   total = sum(of flag1-flag5);

   sum1 + flag1;

   sum2 + flag2;

   sum3 + flag3;

   sum4 + flag4;

   sum5 + flag5;

   sumtotal + total;

   p 1 = round(sum1/niter, 0.0001);

   p 2 = round(sum2/niter, 0.0001);

   p 3 = round(sum3/niter, 0.0001);

   p 4 = round(sum4/niter, 0.0001);

   p 5 = round(sum5/niter, 0.0001);

   p total = round(sumtotal/ niter, 0.0001);

  *出力用に桁数を制限;

   rej 1 = round(rej1, 0.0001);

   rej 2 = round(rej2, 0.0001);

   rej 3 = round(rej3, 0.0001);

   rej 4 = round(rej4, 0.0001);

   rej 5 = round(rej5, 0.0001);

   if final then output;

   keep no type niter n p1-p 5 p total rej 1-rej 5;

  run;

%mend rej;

0.01区切りで αエラーを算出するマクロを作成します。

%macro exe(type, start, no2);

  %do no = 0 %to 29;

   data d2;

    a =&start +&no / 100;

    call symput(”rej0”, a);

   run;

   %rej(&type,&no,&rej0)

  %end;

  data out&type.&no2;

   set %do no = 0 %to 29;

          out &type. &no

      %end;

     ;

  run;

%mend exe;

15

Page 16: 中間解析入門(その3: Pocock の方法と O’Brien-Flemingの方法) · 2012-07-21 · 中間解析入門(その3: Pocockの方法とO’Brien-Flemingの方法)

次に、0.001区切りのマクロです。

%macro exe1(type, start, no2);

  %do no = 0 %to 19;

    data d2;

     a =&start +&no / 1000;

     call symput(”rej0”, a);

    run;

    %rej(&type,&no,&rej0)

  %end;

  data out&type.&no2;

   set %do no = 0 %to 19;

         out &type. &no

      %end;

     ;

  run;

%mend exe1;

実行プログラムは以下の通りです。

ods listing close;

option nonotes nosource;

  %data(1)

  %exe(P, 2.3, 1)

  %exe1(P, 2.41, 2)

  %exe(O, 1.96, 1)

  %exe1(O, 2.03, 2)

option notes source;

ods listing;

16

Page 17: 中間解析入門(その3: Pocock の方法と O’Brien-Flemingの方法) · 2012-07-21 · 中間解析入門(その3: Pocockの方法とO’Brien-Flemingの方法)

7.2 Pocock, O’Brien-Flemingの方法の αエラー算出プログラム(表 1、表 2)

まずは棄却限界を求めるマクロを作ります。

%macro rej();

  %global rej p1 rej p2 rej p3 rej p4 rej p5 rej o1 rej o2 rej o3 rej o4 rej o5;

  data null ;

   %do i = 1 %to 5;

    call symputx(”rejp&i”, 2.413, G);

    call symputx(”rejo&i”, 2.040 * sqrt( 5 /&i), G);

   %end;

  run;

%mend rej;

次に、データと統計量を発生させるマクロを作ります。

*type=P:Pocock, O:O’Brien-Fleminng;

%macro data(no);

  data d1;

   call streaminit(664217 + 17*&no);

   do iter = 1 to&niter;

    %do group = 1%to 2;

      do i = 1 to&n;

       group =&group;

       x = rand(”norm”,&&mu&group,&&sd&group);

       if i ¡= &n / 5 then flag = 1;

       else if i ¡= 2*&n / 5 then flag = 2;

       else if i ¡= 3*&n / 5 then flag = 3;

       else if i ¡= 4*&n / 5 then flag = 4;

       else flag = 5;

       output;

      end;

    %end;

   end;

  run;

 * t検定統計量の計算;

  %do i = 1 %to 5;

   ods output ttests=out1&i;

   proc ttest data=d1;

    class group;

    var x;

    where flag<= &i;

    by iter;

   run;

17

Page 18: 中間解析入門(その3: Pocock の方法と O’Brien-Flemingの方法) · 2012-07-21 · 中間解析入門(その3: Pocockの方法とO’Brien-Flemingの方法)

   data out11&i;

    set out1&i;

    tvalue&i = tvalue;

    if compress(variances) =”Equal”;

    format tvalue&i 9.5;

   run;

  %end;

  data out1;

   merge out111 out112 out113 out113 out114 out115 end=final;

   by iter;

   keep iter tvalue1 tvalue2 tvalue3 tvalue4 tvalue5;

  run;

%mend data;

次に、αエラーを算出するマクロです。

%macro alpha(type, no2);

  data out&type.&no2;

   set out1 end=final;

   no =&no2;

   niter =&niter;

   n = &n;

   type = ”&type”;

   mu1 =&mu1;

   sd1 =&sd1;

   mu2 =&mu2;

   sd2 =&sd2;

  *検定の実行;

   if   abs(tvalue1)> &&rej &type.1 then flag1 = 1;

   else if abs(tvalue2)> &&rej &type.2 then flag2 = 1;

   else if abs(tvalue3)> &&rej &type.3 then flag3 = 1;

   else if abs(tvalue4)> &&rej &type.4 then flag4 = 1;

   else if abs(tvalue5)> &&rej &type.5 then flag5 = 1;

   %do i = 1 %to 5;

    if flag&i =. then flag&i = 0;

   %end;

   total = sum(of flag1 - flag5);

   sum1 + flag1;

   sum2 + flag2;

   sum3 + flag3;

   sum4 + flag4;

   sum5 + flag5;

   sumtotal + total;

18

Page 19: 中間解析入門(その3: Pocock の方法と O’Brien-Flemingの方法) · 2012-07-21 · 中間解析入門(その3: Pocockの方法とO’Brien-Flemingの方法)

   p 1 = round(sum1 / niter, 0.0001);

   p 2 = round(sum2 / niter, 0.0001);

   p 3 = round(sum3 / niter, 0.0001);

   p 4 = round(sum4 / niter, 0.0001);

   p 5 = round(sum5 / niter, 0.0001);

   p total = round(sumtotal / niter, 0.0001);

   if final then output;

   keep no type niter n mu1 sd1 mu2 sd2 p1-p 5 p total ;

  run;

%mend alpha;

最後に、実行マクロを作成します。

%macro exe(no, n);

  %data(&no)

  %alpha(P,&no)

  %alpha(O,&no)

  data lib1.outp&no;

   set outp&no;

  run;

  data lib1.outo&no;

   set outo&no;

  run;

%mend exe;

19

Page 20: 中間解析入門(その3: Pocock の方法と O’Brien-Flemingの方法) · 2012-07-21 · 中間解析入門(その3: Pocockの方法とO’Brien-Flemingの方法)

実行プログラムは以下の通りです。

%let niter = 10000;

%let mu1 = 0;

%let mu2 = 0;

%let sd1 = 1;

%let sd2 = 1;

ods listing close;

option nosource nonotes;

  %rej()

  %exe(1, 10)

  %exe(2, 20)

  %exe(3, 30)

  %exe(4, 50)

  %exe(5, 100)

  %exe(6, 200)

  %exe(7, 400)

  data outp;

   set outp1-outp7;

  run;

  data outo;

   set outo1-outo7;

  run;

ods listing ;

option source notes;

20

Page 21: 中間解析入門(その3: Pocock の方法と O’Brien-Flemingの方法) · 2012-07-21 · 中間解析入門(その3: Pocockの方法とO’Brien-Flemingの方法)

7.3 微修正した Pocock・O’Brien-Flemingの方法のシミュレーション(表 5, 表 6)

*まずは例数を入れると微修正した Pocockの方法と O’Brien-Flemingの方法の棄却限界を作成するマクロを作成します。;

%macro rej(n);

  %global rej t p1 rej t p2 rej t p3 rej t p4 rej t p5 rej t o1 rej t o2 rej t o3 rej t o4 rej t o5;

  data rejt;

   %do i = 1 %to 5;

      df = 2 * &n / 5 * &i - 2; * t分布の自由度;

     /*Pocockの方法の棄却限界*/

      rej p = 2.413;

      cdf p = cdf(’norm’, rej p);

      rej t p = quantile(’t’, cdf p, df);

      call symputx(”rejt p&i”, rej t p);

     /*O’Brien-Flemingの方法の棄却限界*/

      rej o = 2.040 * sqrt( 5 /&i );

      cdf o = cdf(’norm’, rej o);

      rej t o = quantile(’t’, cdf o, df);

      call symputx(”rejt o&i”, rej t o);

      output;

    %end;

  run;

%mend rej;

*type:P:Pocock, O:O’Brien-Fleminng;

%macro data(no, n);

  data d1;

   call streaminit(69421 + 3*&no);

   do iter = 1 to&niter;

    %do group = 1%to 2;

       do i = 1 to&n;

        group =&group;

        x = rand(”norm”,&&mu&group,&&sd&group);

        if      i <= &n/5 then flag = 1;

        else if i <= 2*&n/5 then flag = 2;

        else if i <= 3*&n/5 then flag = 3;

        else if i <= 4*&n/5 then flag = 4;

        else           flag = 5;

        output;

       end;

    %end;

   end;

  run;

21

Page 22: 中間解析入門(その3: Pocock の方法と O’Brien-Flemingの方法) · 2012-07-21 · 中間解析入門(その3: Pocockの方法とO’Brien-Flemingの方法)

 * t検定統計量の計算;

  %do i = 1 %to 5;

   ods output ttests=out1&i;

   proc ttest data=d1;

    class group;

    var x;

    where flag<= &i;

    by iter;

   run;

   data out11&i;

    set out1&i;

    tvalue&i = tvalue;

    if compress(variances) = ”Equal”;

    format tvalue&i 9.5;

   run;

  %end;

  data out1;

   merge out111 out112 out113 out113 out114 out115 end=final;

   by iter;

   keep iter tvalue1 tvalue2 tvalue3 tvalue4 tvalue5;

  run;

%mend data;

%macro rejt(type, no);

  data out&type. &no;

   set out1 end=final;

   no =&no;

   niter =&niter;

   n = &n;

   type = ”&type”;

   if ” &type” = ”P” then do;

    %do i = 1 %to 5;

       rej&i = &&rej t p&i;

    %end;

   end;

   else if ”&type” = ”O” then do;

    %do i = 1 %to 5;

        rej&i = &&rej t o&i;

    %end;

   end;

22

Page 23: 中間解析入門(その3: Pocock の方法と O’Brien-Flemingの方法) · 2012-07-21 · 中間解析入門(その3: Pocockの方法とO’Brien-Flemingの方法)

  *検定の実行;

   if    abs(tvalue1)> rej1 then flag1 = 1;

   else if abs(tvalue2)> rej2 then flag2 = 1;

   else if abs(tvalue3)> rej3 then flag3 = 1;

   else if abs(tvalue4)> rej4 then flag4 = 1;

   else if abs(tvalue5)> rej5 then flag5 = 1;

   %do i = 1 %to 5;

     if flag&i =. then flag&i = 0;

   %end;

   total = sum(of flag1-flag5);

   sum1 + flag1;

   sum2 + flag2;

   sum3 + flag3;

   sum4 + flag4;

   sum5 + flag5;

   sumtotal + total;

   p 1 = round(sum1 / niter, 0.0001);

   p 2 = round(sum2 / niter, 0.0001);

   p 3 = round(sum3 / niter, 0.0001);

   p 4 = round(sum4 / niter, 0.0001);

   p 5 = round(sum5 / niter, 0.0001);

   p total = round(sumtotal / niter, 0.0001);

  *出力用に桁数を整える;

   rej 1 = round(rej1, 0.0001);

   rej 2 = round(rej2, 0.0001);

   rej 3 = round(rej3, 0.0001);

   rej 4 = round(rej4, 0.0001);

   rej 5 = round(rej5, 0.0001);

   if final then output;

   keep no type niter n p1-p 5 p total rej 1-rej 5;

  run;

%mend rejt;

最後に、実行マクロを作成します。

%macro exe1(no, n);

  %rej(n)

  %data(&no,&n)

  &rej t(P,&no)

  &rej t(O, &no)

%mend exe1;

23

Page 24: 中間解析入門(その3: Pocock の方法と O’Brien-Flemingの方法) · 2012-07-21 · 中間解析入門(その3: Pocockの方法とO’Brien-Flemingの方法)

実行プログラムは以下の通りです。

%let niter = 10000;

%let mu1 = 0;

%let mu2 = 0;

%let sd1 = 1;

%let sd2 = 1;

ods listing close;

option nosource nonotes;

  %exe(1, 10)

  %exe(2, 20)

  %exe(3, 30)

  %exe(4, 50)

  %exe(5, 100)

  %exe(6, 200)

  %exe(7, 400)

ods listing;

option source note;

参考文献

[1] Jennison,C., and Turnbull,B,W. (1999)Group Sequential Methods with application to Clinical Trials. Chapman Hall/CRC.

[2] Lan,K.K.G. and DeMets,D.L. (1983) Descrete sequential boundaries for clinical trials.Biometrika, 70, 659-663.

[3] 森川敏彦,山中竹春(2012)臨床試験における群逐次法 理論と応用,株式会社シーエーシー.([1] の和訳です)

24