【解答】シミュレーションその3 (シミュレーショ...
TRANSCRIPT
【解答】シミュレーションその3(シミュレーションによる例数設計2)
H22年度 BioS継続勉強会:第5回
土居正明
はじめに
本稿の最後に補足として、補助資料1「シミュレーション速度の比較」を用いて高速化させたプログラムによる、10,000
回シミュレーションの結果も載せてあります。適宜ご参照下さい。
問題1
まず、フォーマットを作ります。
*フォーマット作成;
proc format;
value group 1 = ’ プラセボ群’
2 = ’ 実薬群’
;
value effect 1 = ’ 有効’
2 = ’ 無効’
;
run;
次に、データセットを作ります。
*データセット作成
*group = 1:プラセボ群、 2:実薬群;
*effect = 1:有効、2:無効;
data d1;
input group effect num;
label group =’投与群’ effect = ’ 効果’;
format group group. effect effect.;
cards;
1 1 12
1 2 16
2 1 18
2 2 14
;
run;
1
解析プログラムは以下の通りです。
proc freq data = d1;
table group*effect / chisq;
weight num;
run;
出力は以下のようになります。
FREQ プロシジャ
表 : group * effect
group effect(効果) 合計
有効 無効
プラセボ群 12 16 28
実薬群 18 14 32
合計 30 30 60
group * effect の統計量
統計量 自由度 値 p 値
カイ 2 乗値 1 1.0714 0.3006
尤度比カイ 2 乗値 1 1.0747 0.2999
連続性補正カイ 2 乗値 1 0.6027 0.4376
Mantel-Haenszel のカイ 2 乗値 1 1.0536 0.3047
ファイ係数 -0.1336
一致係数 0.1325
Cramer の V 統計量 -0.1336
標本サイズ = 60
出力はたくさん出ますが、とりあえず今はほとんど無視しまして「group * effectの統計量」の表の「カイ 2乗値」の部分だ
けに注目します。この p値が 0.3006であることにだけ注意しておいてください。
2
問題2
では次に、同じデータに対して直接比率を比較する検定をします。データステップで、データの入力から p値の計算まで
全て行います。
data d2;
a = 12; b = 16; c = 18; d = 14; *データの入力;
n P = a+b; nA = c+d;
n E = a+c; nN = b+d;
N = a+b+c+d;
p P hat = a / nP; p A hat = c / nA; *対立仮説のもとでの最尤推定値;
p hat = nE / N; *帰無仮説のもとでの最尤推定値;
z = (p A hat - pP hat ) / sqrt((1 / nA + 1 / n P) * p hat * (1 - p hat)); *統計量の計算;
p value = 2 * (1 - cdf(’norm’, abs(z))); *両側 p値なので zは絶対値をとる;
keep a c nP n A p P hat pA hat phat z pvalue ;
run;
proc print data = d2; run; *結果をアウトプットに出力;
このとき、proc printの出力は以下の通りとなります。
OBS a c n P n A p P hat p A hat p hat z p value
1 12 18 28 32 0.42857 0.5625 0.5 1.03510 0.30062
「問題1」と(ほぼ)同じく、p値が 0.30062となっています*1。一般に 2群の比率を比較する場合、「問題1」の proc
freq を用いた独立性の χ2 検定と、「問題2」の比率を直接比較する正規近似による検定は、全く同じ p値を与える検定と
なります。
問題3
比率の比較を行う際、「問題1」の方法と「問題2」の方法のどちらを用いてもよいのですが、「問題2」の方が実行時
間が短くなります*2。従って、以下の例数設計では検定は「問題2」の方法で行います。
【マクロ作成】
以下、「問題3-1」「問題3-2」に共通に使えるマクロを作成して、一括で処理します。マクロは、まず検出力を計算
する「マクロ 1」を作り、その後「マクロ 1」を組み合わせて、色々な例数での検出力を計算する「マクロ 2」を作ります。
*1 表示桁数の都合で、表示されている数値は 1桁違っています。*2 データステップしか使っていませんし、必要最小限のものしか出力しないので、「問題2」の方が速くなるはずです。
3
*マクロ 1:例数と有効率を与えれば検出力を計算するマクロ;
*1 がプラセボ・2が実薬;
*iter:繰り返し回数;
%macro samplesize ratio(num1, p1, num2, p2, no);
proc datasets;
delete out1; *out1は proc appendの baseで使うので、念のため消しておきます*3。;
run;
% do i = 1% to &iter;
data d1;
call streaminit(112914810 + 124181*&no +&i);
x11 = rand(’binom’,&p1,&num1); *プラセボ群の有効例数;
x21 = rand(’binom’,&p2,&num2); *実薬群の有効例数;
p1 hat = x11 /&num1; *プラセボ群の有効率の推定値;
p2 hat = x21 /&num2; *実薬群の有効率の推定値;
phat = (x11+x21) / (&num1+&num2); *帰無仮説のもとでの有効率の推定値;
z = (p2 hat - p1hat) / sqrt((1/&num1 + 1/&num2) * phat * (1-phat)); *z統計量;
p value = 2 * (1 - cdf(’norm’, abs(z))); *両側 p値なので、zは絶対値で考える;
if z > 0 and pvalue< 0.05 then sig = 1; *検出力なので、実薬の有効率が高い場合のみ「有意差あり」と考える。;
else sig = 0;
flag = 1; *データセットの処理用のフラグ;
run;
proc append data = d1 base = out1;
run;
data out2;
set out1;
retain sum 0;
sum = sum + sig;
run;
*3 もし別プログラムで out1を作ってそれが残っている場合、proc appendがエラーを起こす可能性があります。
4
data out&no;
set out2;
by flag;
if last.flag;
no =&no;
iteration =&iter;
samplesizeplacebo =&num1;
p placebo =&p1;
samplesizeactive =&num2;
p active =&p2;
power = sum /&iter;
keep no iteration samplesizeplacebo pplacebo samplesizeactive pactive power;
run;
% end;
%mend samplesize ratio;
*マクロ 2:色々な例数で検出力を計算するマクロ;
*num1:プラセボ群の例数の最小値 → 以下、20例ずつ、+180例になるまで例数を増やしていく;
*ratio:実薬群の例数がプラセボ群の例数の何倍かを示す定数(「問題3-1」では 1、「問題3-2」では 2);
*p1, p2:プラセボ群・実薬群の比率;
*no:通し番号;
%macro exe(num1, ratio, p1, p2, no);
% samplesize ratio(&num1,&p1,% eval(&num1 *&ratio),&p2,% eval((&no - 1)*10 + 1))
% samplesize ratio(% eval(&num1 + 20 ),&p1,% eval((&num1 + 20) *&ratio),&p2,% eval((&no - 1)*10 + 2))
% samplesize ratio(% eval(&num1 + 40 ),&p1,% eval((&num1 + 40) *&ratio),&p2,% eval((&no - 1)*10 + 3))
% samplesize ratio(% eval(&num1 + 60 ),&p1,% eval((&num1 + 60) *&ratio),&p2,% eval((&no - 1)*10 + 4))
% samplesize ratio(% eval(&num1 + 80 ),&p1,% eval((&num1 + 80) *&ratio),&p2,% eval((&no - 1)*10 + 5))
% samplesize ratio(% eval(&num1 + 100 ),&p1,% eval((&num1 + 100) *&ratio),&p2,% eval((&no - 1)*10 + 6))
% samplesize ratio(% eval(&num1 + 120 ),&p1,% eval((&num1 + 120) *&ratio),&p2,% eval((&no - 1)*10 + 7))
% samplesize ratio(% eval(&num1 + 140 ),&p1,% eval((&num1 + 140) *&ratio),&p2,% eval((&no - 1)*10 + 8))
% samplesize ratio(% eval(&num1 + 160 ),&p1,% eval((&num1 + 160) *&ratio),&p2,% eval((&no - 1)*10 + 9))
% samplesize ratio(% eval(&num1 + 180 ),&p1,% eval((&num1 + 180) *&ratio),&p2,% eval((&no - 1)*10 + 10))
data out;
set out% eval((&no - 1)*10 + 1) out% eval((&no - 1)*10 + 2) out% eval((&no - 1)*10 + 3)
out % eval((&no - 1)*10 + 4) out% eval((&no - 1)*10 + 5) out% eval((&no - 1)*10 + 6)
out % eval((&no - 1)*10 + 7) out% eval((&no - 1)*10 + 8)
out % eval((&no - 1)*10 + 9) out% eval((&no - 1)*10 +10);
run;
proc print data = out noobs; run;
%mend exe;
となります。以下、この exeを用いるだけです。
5
問題3-1
% let iter = 1000; *シミュレーション回数 1,000回(「問題3-2」まで同じ);
プラセボ群の例数の最小値 num1は適当に指定してやります。(i)~(v)まで一気に実行しますと、
% exe(260, 1, 0.2, 0.3, 1)
% exe(100, 1, 0.2, 0.35, 2)
% exe(360, 1, 0.5, 0.6, 3)
% exe(260, 1, 0.7, 0.8, 4)
% exe(100, 1, 0.8, 0.9, 5)
となります。結果は、以下の通りです。
(i) まず、プラセボ群の有効率が 0.2、実薬群が 0.3の場合です。
no iteration sample size placebo p placebo sample size active p active power
1 1000 260 0.2 260 0.3 0.758
2 1000 280 0.2 280 0.3 0.750
3 1000 300 0.2 300 0.3 0.791
4 1000 320 0.2 320 0.3 0.832
5 1000 340 0.2 340 0.3 0.862
6 1000 360 0.2 360 0.3 0.894
7 1000 380 0.2 380 0.3 0.910
8 1000 400 0.2 400 0.3 0.887
9 1000 420 0.2 420 0.3 0.919
10 1000 440 0.2 440 0.3 0.942
一見したところ、例数が増えても単調に検出力が増えていない部分があります。これより、1,000回というシミュレーショ
ン回数が十分でない可能性が疑われます*4。
精度が十分ではないことに留意しつつ、今はとりあえずこの表から読み取れる部分を読み取ります。検出力が 80%とな
るのは大体 1群 300~320例くらい、90%となるのは、1群 360~400例くらいではないかと思えます。より正確な値が知
りたい場合は、例数をこの近くに絞って、シミュレーション回数を増やしてみてください。
*4 シミュレーションにかかる時間の都合で、今回は問題の設定としては 1,000回としています。また、「はじめに」にも書きましたが、高速化させたプログラムと 10,000回のシミュレーション結果を最後に補足として載せています。
6
(ii) 次に、プラセボ群の有効率 0.2、実薬群は 0.35の場合です。
no iteration sample size placebo p placebo sample size active p active power
11 1000 100 0.2 100 0.35 0.650
12 1000 120 0.2 120 0.35 0.773
13 1000 140 0.2 140 0.35 0.782
14 1000 160 0.2 160 0.35 0.882
15 1000 180 0.2 180 0.35 0.919
16 1000 200 0.2 200 0.35 0.919
17 1000 220 0.2 220 0.35 0.939
18 1000 240 0.2 240 0.35 0.974
19 1000 260 0.2 260 0.35 0.971
20 1000 280 0.2 280 0.35 0.973
これも、シミュレーション回数が少ないことを意識しつつ、大体検出力 80%となるのが 1群 140~160例くらいで、検出力
90%となるのが 1群 160~200例くらいだと予想できます。ただし、180例と 200例で検出力が同じ値になっていたりしま
すので、心許ない結果です。
(iii) 次に、プラセボ群の有効率 0.5、実薬群 0.6のときです。
no iteration sample size placebo p placebo sample size active p active power
21 1000 360 0.5 360 0.6 0.773
22 1000 380 0.5 380 0.6 0.804
23 1000 400 0.5 400 0.6 0.820
24 1000 420 0.5 420 0.6 0.830
25 1000 440 0.5 440 0.6 0.859
26 1000 460 0.5 460 0.6 0.873
27 1000 480 0.5 480 0.6 0.898
28 1000 500 0.5 500 0.6 0.882
29 1000 520 0.5 520 0.6 0.890
30 1000 540 0.5 540 0.6 0.895
検出力 80%となるのは、大体 1群 380例くらいのときで、90%となるのは、1群 540例かもう少し多いくらいとなりそう
です。もう少し例数を増やした場合もやってみるとよいでしょう。
7
(iv) 次は、プラセボ群 0.7、実薬群 0.8の場合です。
no iteration sample size placebo p placebo sample size active p active power
31 1000 260 0.7 260 0.8 0.762
32 1000 280 0.7 280 0.8 0.776
33 1000 300 0.7 300 0.8 0.805
34 1000 320 0.7 320 0.8 0.845
35 1000 340 0.7 340 0.8 0.870
36 1000 360 0.7 360 0.8 0.868
37 1000 380 0.7 380 0.8 0.894
38 1000 400 0.7 400 0.8 0.919
39 1000 420 0.7 420 0.8 0.920
40 1000 440 0.7 440 0.8 0.939
検出力 80%となるのは大体 1群 300例くらいのときで、90%となるのは 1群 380~400例くらいとなりそうです。
(v)最後に、プラセボ群 0.8、実薬群 0.9のときです。
no iteration sample size placebo p placebo sample size active p active power
41 1000 100 0.8 100 0.9 0.531
42 1000 120 0.8 120 0.9 0.572
43 1000 140 0.8 140 0.9 0.644
44 1000 160 0.8 160 0.9 0.767
45 1000 180 0.8 180 0.9 0.761
46 1000 200 0.8 200 0.9 0.788
47 1000 220 0.8 220 0.9 0.841
48 1000 240 0.8 240 0.9 0.868
49 1000 260 0.8 260 0.9 0.896
50 1000 280 0.8 280 0.9 0.905
検出力 80%となるのは、大体 1群 200~220例くらい、90%となるのは、1群 260~280例くらいと予想されます。
8
問題3-2
では次に、例数がアンバランスな場合です。プラセボ群 :実薬群 = 1 : 2より、ratioを 2としてやります。これも (vi)~
(x)まで全て最初に実行させてやりますと、
% exe(180, 2, 0.2, 0.3, 6)
% exe(60, 2, 0.2, 0.35, 7)
% exe(200, 2, 0.5, 0.6, 8)
% exe(180, 2, 0.7, 0.8, 9)
% exe(60, 2, 0.8, 0.9, 10)
となります。
(vi) まず、プラセボ群の有効率が 0.2、実薬群が 0.3の場合です。出力は、
no iteration sample size placebo p placebo sample size active p active power
51 1000 180 0.2 360 0.3 0.694
52 1000 200 0.2 400 0.3 0.799
53 1000 220 0.2 440 0.3 0.772
54 1000 240 0.2 480 0.3 0.797
55 1000 260 0.2 520 0.3 0.853
56 1000 280 0.2 560 0.3 0.873
57 1000 300 0.2 600 0.3 0.897
58 1000 320 0.2 640 0.3 0.913
59 1000 340 0.2 680 0.3 0.950
60 1000 360 0.2 720 0.3 0.960
となります。検出力が 80%となるのがプラセボ群 200~240例、実薬群 400~480例くらいのときで、90%となるのが、プ
ラセボ群 300~320例・実薬群 600~640例くらいのときと予想されます。
9
(vii) 次に、プラセボ群の有効率が 0.2、実薬群の有効率が 0.35のときです。出力は、
no iteration sample size placebo p placebo sample size active p active power
61 1000 60 0.2 120 0.35 0.549
62 1000 80 0.2 160 0.35 0.709
63 1000 100 0.2 200 0.35 0.804
64 1000 120 0.2 240 0.35 0.846
65 1000 140 0.2 280 0.35 0.906
66 1000 160 0.2 320 0.35 0.957
67 1000 180 0.2 360 0.35 0.967
68 1000 200 0.2 400 0.35 0.971
69 1000 220 0.2 440 0.35 0.982
70 1000 240 0.2 480 0.35 0.995
となります。検出力 80%となるのは、大体プラセボ群 100例、実薬群 200例くらいのときで、検出力 90%となるのは、プ
ラセボ群 140例・実薬群 280例くらいの場合であることが予想されます。
(viii) 次は、プラセボ群の有効率 0.5、実薬群の有効率 0.6の場合です。出力は、
no iteration sample size placebo p placebo sample size active p active power
71 1000 200 0.5 400 0.6 0.598
72 1000 220 0.5 440 0.6 0.674
73 1000 240 0.5 480 0.6 0.746
74 1000 260 0.5 520 0.6 0.743
75 1000 280 0.5 560 0.6 0.771
76 1000 300 0.5 600 0.6 0.823
77 1000 320 0.5 640 0.6 0.860
78 1000 340 0.5 680 0.6 0.862
79 1000 360 0.5 720 0.6 0.840
80 1000 380 0.5 760 0.6 0.879
となります。検出力 80%となるのは、プラセボ群 280~300例くらい、実薬群は 560~600例くらいとなります。90%と
なるのは、プラセボ群 380例~、実薬群 760例~となりそうです。
10
(ix) 次は、プラセボ群の有効率 0.7、実薬群の有効率 0.8の場合です。出力は、
no iteration sample size placebo p placebo sample size active p active power
81 1000 180 0.7 360 0.8 0.735
82 1000 200 0.7 400 0.8 0.804
83 1000 220 0.7 440 0.8 0.794
84 1000 240 0.7 480 0.8 0.820
85 1000 260 0.7 520 0.8 0.871
86 1000 280 0.7 560 0.8 0.912
87 1000 300 0.7 600 0.8 0.899
88 1000 320 0.7 640 0.8 0.934
89 1000 340 0.7 680 0.8 0.938
90 1000 360 0.7 720 0.8 0.933
となります。検出力 80%となるのはプラセボ群 200~240例くらい、実薬群 400~480例くらいと予想されます。また、90
%となるのはプラセボ群 260~300例くらい、実薬群 520~600例くらいとなりそうです。
(x)最後は、プラセボ群の有効率 0.8、実薬群の有効率 0.9の場合です。出力は、
no iteration sample size placebo p placebo sample size active p active power
91 1000 60 0.8 120 0.9 0.418
92 1000 80 0.8 160 0.9 0.596
93 1000 100 0.8 200 0.9 0.654
94 1000 120 0.8 240 0.9 0.720
95 1000 140 0.8 280 0.9 0.809
96 1000 160 0.8 320 0.9 0.859
97 1000 180 0.8 360 0.9 0.860
98 1000 200 0.8 400 0.9 0.916
99 1000 220 0.8 440 0.9 0.932
100 1000 240 0.8 480 0.9 0.950
となります。検出力 80%となるのはプラセボ群 140例くらい、実薬群 280例くらいで、90%となるのは、プラセボ群 180
~200例くらい、実薬群 360~400例くらいと予想されます。
11
【補足問題】
(a)「問題3-1」「問題3-2」の例数設計を Proc Powerで行います。(ii) と (vii) 以外は群間差が 0.1ですのでまとめて
プログラムします。
proc power;
twosamplefreq test = pchi
proportiondiff = 0.1
refproportion = 0.2, 0.5, 0.7, 0.8
alpha = 0.05
groupweight = 1| 1 2
ntotal = .
power = 0.8, 0.9
;
run;
としますと、出力は以下のようになります。なお、Weight2 = 1が「問題3-1」に、Weight2 = 2が「問題3-2」に対応
します。
The POWER Procedure
Pearson Chi-square Test for Two Proportions
Fixed Scenario Elements
Distribution Asymptotic normal
Method Normal approximation
Alpha 0.05
Proportion Difference 0.1
Group 1 Weight 1
Number of Sides 2
Null Proportion Difference 0
12
Computed N Total
Index Ref Proportion Weight2 Nominal Power Actual Power N Total
(i)1 0.2 1 0.8 0.801 588
(i)2 0.2 1 0.9 0.900 784
(vi)3 0.2 2 0.8 0.801 672
(vi)4 0.2 2 0.9 0.901 891
(iii)5 0.5 1 0.8 0.801 776
(iii)6 0.5 1 0.9 0.901 1038
(viii)7 0.5 2 0.8 0.801 870
(viii)8 0.5 2 0.9 0.900 1164
(iv)9 0.7 1 0.8 0.801 588
(iv)10 0.7 1 0.9 0.900 784
(ix)11 0.7 2 0.8 0.801 648
(ix)12 0.7 2 0.9 0.900 873
(v)13 0.8 1 0.8 0.800 398
(v)14 0.8 1 0.9 0.900 532
(x)15 0.8 2 0.8 0.802 432
(x)16 0.8 2 0.9 0.900 585
です。一方、(ii) と (vii) は、群間差が 0.15ですので、プログラムを
proc power;
twosamplefreq test = pchi
proportiondiff = 0.15
refproportion = 0.2
alpha = 0.05
groupweight = 1| 1 2
ntotal = .
power = 0.8, 0.9
;
run;
とすると、出力は
13
The POWER Procedure
Pearson Chi-square Test for Two Proportions
Fixed Scenario Elements
Distribution Asymptotic normal
Method Normal approximation
Alpha 0.05
Reference (Group 1) Proportion 0.2
Proportion Difference 0.15
Group 1 Weight 1
Number of Sides 2
Null Proportion Difference 0
Computed N Total
Index Weight2 Nominal Power Actual Power N Total
(ii)1 1 0.8 0.800 276
(ii)2 1 0.9 0.901 370
(vii)3 2 0.8 0.802 318
(vii)4 2 0.9 0.901 420
となります。
(b) t検定の場合を参考にして、理論値を計算していきます。なお、理論についての詳細は補助資料2「比率の差の検定の例
数設計」をご覧ください。
(準備)
ここからしばらく、状況設定と準備をします。目標はまず検定統計量 (z とおきます)を定め、z がH0 とH ′1 のそれぞれ
のもとで従う分布を(大体)決定することです。
プラセボ群の有効率を p1、実薬群の有効率を p2 とし、プラセボ群・実薬群の例数をそれぞれ n1, n2 とします。プラセボ
群のうち、有効となる例数を示す確率変数を X1、実薬群のうち有効となる例数を示す確率変数を X2 とおき、X1, X2 はそ
れぞれ二項分布
X1 ∼ Bin (p1, n1) , X2 ∼ Bin (p2, n2) (1)
に従うとします。帰無仮説・対立仮説は
H0 : p1 = p2(帰無仮説)
H1 : p1 < p2(対立仮説)
とします。ここで特に「見込みの対立仮説」を
H ′1 : p2 = p1 + ∆
14
とおくと、今回は (i) では ∆ = 0.1、(vii) では ∆ = 0.15です*5。
以下、(i), (vii) の解答を両方考慮に入れて、プラセボ群 n1 例、実薬群 n2 例としておきます。このとき H1 のもとで
の p1, p2 の最尤推定量 p̂1, p̂2 は p̂1 = X1n1
, p̂2 = X2n2となります。ここで、E[p̂1] = p1, V [p̂1] = p1(1−p1)
n1と E[p̂2] =
p2, V [p̂2] = p2(1−p2)n2
となることから、p̂1, p̂2 が H1 のもとで漸近的に従う分布はそれぞれ
p̂1·∼ N
(p1,
p1(1 − p1)n1
), p̂2
·∼ N
(p2,
p2(1 − p2)n2
)となります*6。一方、帰無仮説 H0 : p1 = p2 のもとで、p1, p2 を共に pとおくと、pの最尤推定量は
p̂ =X1 + X2
n1 + n2
となります。次に、また H1 に戻って、
∆̂ = p̂2 − p̂1
とおくと、∆̂の漸近的に従う分布は
∆̂ ·∼ N
(p2 − p1,
p1(1 − p1)n1
+p2(1 − p2)
n2
)(2)
となります。
以下、∆̂を用いて検定統計量を考えていきます。
(i)H0 : p1 = p2 が正しいとき
p1 = p2 で、これを pとおきましたので、まず (2)は
∆̂ ·∼ N
(0,
(1n1
+1n2
)p(1 − p)
)となります。これより、z′ を
z′ =∆̂√V [∆̂]
=p̂2 − p̂1√(
1n1
+ 1n2
)p(1 − p)
とおきますと、
z′·∼ N(0, 1)
となります。これを利用して検定を行いたいのですが、統計量 z′ は未知のパラメータ pを含んでいますので値が求まりません。
そこで、z′ 中の pに上で求めた最尤推定量 p̂を代入したものを検定統計量とします。つまり、検定統計量 z は
z =p̂2 − p̂1√(
1n1
+ 1n2
)p̂(1 − p̂)
とします。このとき、H0 が正しいときに、
z·∼ N(0, 1)
となります*7。これより有意水準 αの片側検定は
z > z1−α (3)
*5 「見込みの対立仮説」は、第4回補助資料「例数設計について2」で定義した造語です。*6 ·∼は「漸近的に従う」つまり、「例数が多いときは大体従うとみなせる」という意味です。*7 z′ と z はほとんど同じ(z′ = az とおくと、aは n → ∞で 1に確率収束する程度)ですので、漸近分布は同じになります。
15
のときに棄却すればよいこととなります*8。
(ii)H ′1 : p2 = p1 + ∆が正しいとき
では次に、検定統計量 z が H ′1 のもとで従う分布を求めます。H ′
1 : p2 = p1 + ∆ より、p2 − p1 = ∆ となりますので、
(2)は、
∆̂ ·∼ N
(∆,
p1(1 − p1)n1
+p2(1 − p2)
n2
)となります。このとき、
z̃ =∆̂√V [∆̂]
とおきますと、
z̃ =∆̂√V [∆̂]
=p̂2 − p̂1√
p1(1−p1)n1
+ p2(1−p2)n2
·∼ N(0, 1)
となります。これは検定統計量 z とは少し異なりますので、H ′1 が正しいときに z の従う分布は z̃ の従う分布を見ても
いまいちよく分かりません。そこで、z′ を少し変形してやりますと*9
z′ =p̂2 − p̂1√(
1n1
+ 1n2
)p(1 − p)
=p̂2 − p̂1√
p1(1−p1)n1
+ p2(1−p2)n2
·
√√√√√ p1(1−p1)n1
+ p2(1−p2)n2(
1n1
+ 1n2
)p(1 − p)
= z̃ ·
√√√√√ p1(1−p1)n1
+ p2(1−p2)n2(
1n1
+ 1n2
)p(1 − p)
·∼ N
∆√(1
n1+ 1
n2
)p(1 − p)
,
p1(1−p1)n1
+ p2(1−p2)n2(
1n1
+ 1n2
)p(1 − p)
となります。これより、z の H ′
1 のもとで従う分布も
z ; z̃ ·
√√√√√ p1(1−p1)n1
+ p2(1−p2)n2(
1n1
+ 1n2
)p(1 − p)
·∼ N
∆√(1
n1+ 1
n2
)p(1 − p)
,
p1(1−p1)n1
+ p2(1−p2)n2(
1n1
+ 1n2
)p(1 − p)
(4)
となります。
*8 なお、有意水準 αの両側検定は
z < z α2または z1− α
2< z
のときに棄却すればよくなります。*9 z と z′ の漸近的に従う分布は同じですので、扱いやすい z′ を変形します。
16
(i)の解答
ではようやく、(i) の解答に入ります。今回の状況は
• プラセボ群の有効率:p1 = 0.2
• 実薬群の有効率 :p2 = 0.3
• 両群の差 :∆ = p2 − p1 = 0.3 − 0.2 = 0.1
• 有意水準 :α = 0.025 → 棄却限界 z0.975 = 1.96
• 1−検出力 :β = 0.1, 0.2 → z0.10 = −1.28, z0.2 = −0.84
• 両群の例数:n1 = n2、これを nとおきます。
となります。さらに、
• H0 のもとでの有効率:両群の例数が n例ずつなので p = np1+np2n+n = p1+p2
2 = 0.2+0.32 = 0.25
とします。
このとき、z が H ′1 で従う漸近分布は(4)より、
z·∼ N
0.1√2n · 0.25 · 0.75
,0.2·0.8
n + 0.3·0.7n
2n · 0.25 · 0.75
= N(0.1633√
n, 0.99332) (5)
となります。今、検出力 100(1 − β)%とするには、片側 2.5%の検定の棄却限界 z0.975 を超える確率が 100(1 − β)%とな
ればよいですので、上の分布 (5)の下側 (100 · β) %点が棄却限界と一致すればよいこととなります。(5)の下側 (100 · β)
%点は、0.1633√
n + 0.9933 · zβ となります*10ので、
1.96︸︷︷︸棄却限界
= 0.1633√
n + 0.9933 · zβ︸ ︷︷ ︸H′
1のもとでの z の漸近分布の下側 (100·β) %点
となります。「n =」の形に直しますと、
0.1633√
n = 1.96 − 0.9933 · zβ
√n =
1.96 − 0.9933 · zβ
0.1633
n =(1.96 − 0.9933 · zβ)2
0.16332
となります。これより、(検出力 80%)の場合は、β = 0.2より zβ = z0.2 = −0.84を代入して
n =(1.96 − 0.9933 · (−0.84))2
0.16332= 292.82
となり、小数点以下を切り上げると、1群あたり 293例となります。
次に、(検出力 90%)の場合は、β = 0.1より zβ = z0.1 = −1.28を代入して、
n =(1.96 − 0.9933 · (−1.28))2
0.16332= 391.58
となり、小数点以下を切り上げると、1群あたり 392例となります。どちらの場合も、Proc Powerの出力とほぼ一致して
います。
*10正規分布N(µ, σ2)の下側 (100 · β)%点は、以下のように求めます。まず、z̃β をN(µ, σ2)の下側 (100 · β)%点とします。このとき、bz =z̃β−µ√
σ2
とおくと、bz はN(0, 1)の下側 (100 · β)%点、つまり zβ となります。これより、
zβ =z̃β − µ√
σ2⇐⇒ z̃β = µ +
√σ2zβ
となり、N(µ, σ2)の下側 (100 · β)%点は z̃β = µ +√
σ2zβ が求まります。
17
(vii)の解答
• プラセボ群の有効率:p1 = 0.2
• 実薬群の有効率:p2 = 0.35
• 両群の差 :∆ = p2 − p1 = 0.35 − 0.20 = 0.15
• 有意水準 :α = 0.025 → 棄却限界 z0.975 = 1.96
• 1−検出力 :β = 0.1, 0.2 → z0.10 = −1.28, z0.2 = −0.84
• 両群の例数 → プラセボ群 :実薬群 = 1 : 2より、プラセボ群を n例、実薬群を 2n例とおきます。
となります。さらに、
• H0 のもとでの有効率:プラセボ群 n例、実薬群 2n例なので p = np1+2np2n+2n = 1·p1+2·p2
3 = 0.2+2·0.353 = 0.3
とします。
このとき、上の (ii) より、z が H ′1 で従う分布は (4)より、
z·∼ N
0.15√32n · 0.3 · 0.7
,0.2·0.8
n + 0.35·0.652n
32n · 0.3 · 0.7
= N(0.2673√
n, 0.93222) (6)
となります。今、検出力 100(1 − β) %とするには、棄却限界 z0.975 を超える確率が 100(1 − β) %となればよいです
ので、上の分布 (6) の下側 (100 · β) %点が棄却限界と一致すればよいこととなります。(6) の下側 (100 · β) %点は、
0.2673√
n + 0.9322 · zβ となります。これより、
1.96︸︷︷︸棄却限界
= 0.2673√
n + 0.9322 · zβ︸ ︷︷ ︸H′
1のもとでの z の漸近分布の下側 (100·β) %点
となります。「n =」の形に直しますと、
0.2673√
n = 1.96 − 0.9322 · zβ
√n =
1.96 − 0.9322 · zβ
0.2673
n =(1.96 − 0.9322 · zβ)2
0.26732
となります。これより、(検出力 80%)の場合は、β = 0.2より、zβ = z0.2 = −0.84を代入して、
n =(1.96 − 0.9322 · (−0.84))2
0.26732= 105.31
となり、小数点以下を切り上げると、プラセボ群 106例、実薬群 106 × 2 = 212例 となります。合計は 106+212=318例
です。
次に、(検出力 90%)の場合は、β = 0.1より、zβ = z0.1 = −1.28を代入して、
n =(1.96 − 0.9322 · (−1.28))2
0.26732= 139.16
となり、小数点以下を切り上げると、プラセボ群 140例、実薬群 140 × 2 = 280例となります。合計は 140+280=420例で
す。どちらの場合も、Proc Powerの出力と、ほぼ一致しています。
18
【補足】:プログラムの高速化と 10,000回シミュレーション
「補助資料1」での「プログラム2」で考えました「全体のデータセットを作っておいてから、検定を行う」という方法に
従ったプログラムを考えます。なお、シミュレーションが相当高速化することを考慮して、シミュレーション回数を 10,000
回にしてあります。また、バッチサブミットする場合を考慮して、結果は Dドライブの BioSフォルダに永久データセット
として保存することとします。Dドライブに BioSフォルダがない場合には、必ず作成してください*11。
libname lib ”D:UBioS”; *D ドライブの BioSフォルダをライブラリネーム lib とおく;
*マクロ 1:検出力計算マクロ;
*1 がプラセボ・2が実薬;
%macro samplesize ratio2(num1, p1, num2, p2, no);
proc datasets;
delete out1; *proc appendの baseで使う予定なので、事前に消しておきます。;
run;
data d1;
call streaminit(112914810 + 1281*&no );
retain sum 0;
do iter = 1 to&iter;
x11 = rand(’binom’,&p1,&num1); *プラセボ群の有効例数;
x21 = rand(’binom’,&p2,&num2); *実薬群の有効例数;
p1 hat = x11 /&num1; *プラセボ群の有効率の推定値;
p2 hat = x21 /&num2; *実薬群の有効率の推定値;
phat=(x11+x21) / (&num1+&num2); *帰無仮説のもとでの有効率の推定値;
z = (p2 hat - p1hat) / sqrt((1/&num1 + 1/&num2)*phat*(1-phat)); *z統計量;
p value = 2*(1 - cdf(’norm’, abs(z))); *両側 p値;
if z > 0 and pvalue< 0.05 then sig = 1;
else sig = 0;
sum = sum + sig;
flag = 1;
output;
end;
run;
*11もしくは、既にあるフォルダ名を指定してください。
19
data out&no;
set d1;
by flag;
if last.flag;
no =&no;
iteration =&iter;
samplesizeplacebo =&num1;
p placebo =&p1;
samplesizeactive =&num2;
p active =&p2;
power = sum /&iter;
keep no iteration samplesizeplacebo pplacebo samplesizeactive pactive power;
run;
%mend samplesize ratio2;
*マクロ 2:色々な例数で検出力を計算するマクロ;
%macro exe2(num1, ratio, p1, p2, no);
% samplesize ratio2(&num1 ,&p1,% eval(&num1 *&ratio),&p2,% eval((&no - 1)*10 + 1))
% samplesize ratio2(% eval(&num1 + 20 ),&p1,% eval((&num1 + 20) *&ratio),&p2,% eval((&no - 1)*10 + 2))
% samplesize ratio2(% eval(&num1 + 40 ),&p1,% eval((&num1 + 40) *&ratio),&p2,% eval((&no - 1)*10 + 3))
% samplesize ratio2(% eval(&num1 + 60 ),&p1,% eval((&num1 + 60) *&ratio),&p2,% eval((&no - 1)*10 + 4))
% samplesize ratio2(% eval(&num1 + 80 ),&p1,% eval((&num1 + 80) *&ratio),&p2,% eval((&no - 1)*10 + 5))
% samplesize ratio2(% eval(&num1 + 100 ),&p1,% eval((&num1 + 100) *&ratio),&p2,% eval((&no - 1)*10 + 6))
% samplesize ratio2(% eval(&num1 + 120 ),&p1,% eval((&num1 + 120) *&ratio),&p2,% eval((&no - 1)*10 + 7))
% samplesize ratio2(% eval(&num1 + 140 ),&p1,% eval((&num1 + 140) *&ratio),&p2,% eval((&no - 1)*10 + 8))
% samplesize ratio2(% eval(&num1 + 160 ),&p1,% eval((&num1 + 160) *&ratio),&p2,% eval((&no - 1)*10 + 9))
% samplesize ratio2(% eval(&num1 + 180 ),&p1,% eval((&num1 + 180) *&ratio),&p2,% eval((&no - 1)*10 +10))
*出力を、永久データセットとして Dドライブの BioSフォルダに格納する;
data lib.out&no;
set out% eval((&no - 1)*10 + 1) out% eval((&no - 1)*10 + 2) out% eval((&no - 1)*10 + 3)
out % eval((&no - 1)*10 + 4) out% eval((&no - 1)*10 + 5) out% eval((&no - 1)*10 + 6)
out % eval((&no - 1)*10 + 7) out% eval((&no - 1)*10 + 8)
out % eval((&no - 1)*10 + 9) out% eval((&no - 1)*10 +10);
run;
%mend exe2;
【「問題3-1」の 10,000回シミュレーションの結果】
% let iter = 10000; *「問題3-1」「問題3-2」共に繰り返し数 10,000回;
20
実行プログラムは、まず (i)~(v)は
% exe2(260, 1, 0.2, 0.3, 1)
% exe2(100, 1, 0.2, 0.35, 2)
% exe2(360, 1, 0.5, 0.6, 3)
% exe2(260, 1, 0.7, 0.8, 4)
% exe2(100, 1, 0.8, 0.9, 5)
となります。出力は以下の通りです。
(i) まず、プラセボ群の有効率 0.2、実薬群の有効率 0.3のときの結果は
no iteration sample size placebo p placebo sample size active p active power
1 10000 260 0.2 260 0.3 0.7571
2 10000 280 0.2 280 0.3 0.7784
3 10000 300 0.2 300 0.3 0.8104
4 10000 320 0.2 320 0.3 0.8331
5 10000 340 0.2 340 0.3 0.8564
6 10000 360 0.2 360 0.3 0.8781
7 10000 380 0.2 380 0.3 0.8914
8 10000 400 0.2 400 0.3 0.9151
9 10000 420 0.2 420 0.3 0.9162
10 10000 440 0.2 440 0.3 0.9318
となります。1,000回のときは例数が増えても検出力が減る場合がありましたが、今回は例数が増えると検出力が大きく
なっていますので、より安定した結果とみなせるでしょう。結果は検出力 80%となるのが 1群 280~300例くらいのとき、
90%となるのが 1群 380~400例くらいのときとなり、1,000回のときより少しだけずれた結果となっています。
(ii) 次に、プラセボ群の有効率 0.2、実薬群の有効率 0.35の場合の結果は
no iteration sample size placebo p placebo sample size active p active power
11 10000 100 0.2 100 0.35 0.6563
12 10000 120 0.2 120 0.35 0.7527
13 10000 140 0.2 140 0.35 0.8003
14 10000 160 0.2 160 0.35 0.8573
15 10000 180 0.2 180 0.35 0.9023
16 10000 200 0.2 200 0.35 0.9237
17 10000 220 0.2 220 0.35 0.9465
18 10000 240 0.2 240 0.35 0.9613
19 10000 260 0.2 260 0.35 0.9703
20 10000 280 0.2 280 0.35 0.9783
となります。検出力 80%となるのは大体 1群 140例くらい、90%となるのが大体 1群 180例くらいとなります。
21
(iii) 次は、プラセボ群の有効率 0.5、実薬群の有効率 0.6のときの結果です。
no iteration sample size placebo p placebo sample size active p active power
21 10000 360 0.5 360 0.6 0.7661
22 10000 380 0.5 380 0.6 0.7971
23 10000 400 0.5 400 0.6 0.8212
24 10000 420 0.5 420 0.6 0.8253
25 10000 440 0.5 440 0.6 0.8542
26 10000 460 0.5 460 0.6 0.8600
27 10000 480 0.5 480 0.6 0.8728
28 10000 500 0.5 500 0.6 0.8965
29 10000 520 0.5 520 0.6 0.8971
30 10000 540 0.5 540 0.6 0.9069
となり、検出力 80%となる例数は 1群 380~400例くらい、90%となるのは 1群 520~540例くらいとなります。
(iv) 次に、プラセボ群の有効率 0.7、実薬群の有効率が 0.8の場合の結果です。
no iteration sample size placebo p placebo sample size active p active power
31 10000 260 0.7 260 0.8 0.7578
32 10000 280 0.7 280 0.8 0.7907
33 10000 300 0.7 300 0.8 0.8155
34 10000 320 0.7 320 0.8 0.8356
35 10000 340 0.7 340 0.8 0.8550
36 10000 360 0.7 360 0.8 0.8753
37 10000 380 0.7 380 0.8 0.8941
38 10000 400 0.7 400 0.8 0.9086
39 10000 420 0.7 420 0.8 0.9228
40 10000 440 0.7 440 0.8 0.9315
となり、検出力 80%となるのが 1群 280~300例くらい、90%となるのが 1群 380~400例くらいとなります。
22
(v)次に、プラセボ群の有効率 0.8、実薬群の有効率 0.9の場合の結果は
no iteration sample size placebo p placebo sample size active p active power
41 10000 100 0.8 100 0.9 0.5147
42 10000 120 0.8 120 0.9 0.5934
43 10000 140 0.8 140 0.9 0.6558
44 10000 160 0.8 160 0.9 0.7149
45 10000 180 0.8 180 0.9 0.7660
46 10000 200 0.8 200 0.9 0.8111
47 10000 220 0.8 220 0.9 0.8376
48 10000 240 0.8 240 0.9 0.8743
49 10000 260 0.8 260 0.9 0.8993
50 10000 280 0.8 280 0.9 0.9209
となります。検出力 80%となるのは 1群 180~200例くらい、90%となるのは 1群 260~280例くらいとなります。
【「問題3-2」の 10,000回シミュレーションの結果】
では次に「問題3-2」に移ります。(vi)~(x)の実行プログラムは、
% exe2(180,2,0.2,0.3,6)
% exe2(60,2,0.2,0.35,7)
% exe2(200,2,0.5,0.6,8)
% exe2(180,2,0.7,0.8,9)
% exe2(60,2,0.8,0.9,10)
です。結果は以下の通りです。
23
(vi) プラセボ群の有効率 0.2、実薬群の有効率 0.3の場合の結果は以下の通りです。
no iteration sample size placebo p placebo sample size active p active power
51 10000 180 0.2 360 0.3 0.7131
52 10000 200 0.2 400 0.3 0.7579
53 10000 220 0.2 440 0.3 0.7926
54 10000 240 0.2 480 0.3 0.8277
55 10000 260 0.2 520 0.3 0.8625
56 10000 280 0.2 560 0.3 0.8823
57 10000 300 0.2 600 0.3 0.9021
58 10000 320 0.2 640 0.3 0.9207
59 10000 340 0.2 680 0.3 0.9392
60 10000 360 0.2 720 0.3 0.9478
検出力 80%となるのは、プラセボ群 220~240例くらい、実薬群 440~480例くらいとなります。90%となるのは、プラセ
ボ群 280~300例くらい、実薬群 560~600例くらいとなります。
(vii) プラセボ群の有効率 0.2、実薬群 0.35の場合の結果は以下の通りです。
no iteration sample size placebo p placebo sample size active p active power
61 10000 60 0.2 120 0.35 0.5542
62 10000 80 0.2 160 0.35 0.6840
63 10000 100 0.2 200 0.35 0.7841
64 10000 120 0.2 240 0.35 0.8481
65 10000 140 0.2 280 0.35 0.9027
66 10000 160 0.2 320 0.35 0.9407
67 10000 180 0.2 360 0.35 0.9565
68 10000 200 0.2 400 0.35 0.9750
69 10000 220 0.2 440 0.35 0.9842
70 10000 240 0.2 480 0.35 0.9901
検出力 80%となるのはプラセボ群 100~120例くらい、実薬群 200~240例くらいとなります。90%となるのは、プラセ
ボ群 140例くらい、実薬群 280例くらいとなります。
24
(viii) 次は、プラセボ群の有効率 0.5、実薬群の有効率 0.6の場合の結果です。
no iteration sample size placebo p placebo sample size active p active power
71 10000 200 0.5 400 0.6 0.6423
72 10000 220 0.5 440 0.6 0.6897
73 10000 240 0.5 480 0.6 0.7338
74 10000 260 0.5 520 0.6 0.7520
75 10000 280 0.5 560 0.6 0.7886
76 10000 300 0.5 600 0.6 0.8106
77 10000 320 0.5 640 0.6 0.8399
78 10000 340 0.5 680 0.6 0.8582
79 10000 360 0.5 720 0.6 0.8824
80 10000 380 0.5 760 0.6 0.8938
検出力 80%となるのは、プラセボ群が 280~300例くらい、実薬群が 560~600例くらいのときとなります。90%となる
のは、プラセボ群が 380例~、実薬群が 760例~のときとなりそうです。
(ix) プラセボ群の有効率が 0.7、実薬群の有効率が 0.8のときの結果です。
no iteration sample size placebo p placebo sample size active p active power
81 10000 180 0.7 360 0.8 0.7227
82 10000 200 0.7 400 0.8 0.7656
83 10000 220 0.7 440 0.8 0.8081
84 10000 240 0.7 480 0.8 0.8459
85 10000 260 0.7 520 0.8 0.8684
86 10000 280 0.7 560 0.8 0.8965
87 10000 300 0.7 600 0.8 0.9087
88 10000 320 0.7 640 0.8 0.9199
89 10000 340 0.7 680 0.8 0.9444
90 10000 360 0.7 720 0.8 0.9542
検出力 80%となるのはプラセボ群が 220例くらい、実薬群が 440例くらいのときで、90%となるのはプラセボ群が 280~
300例くらい、実薬群が 560~600例くらいのときとなります。
25
(x)最後に、プラセボ群の有効率 0.8、実薬群の有効率 0.9の場合の結果です。
no iteration sample size placebo p placebo sample size active p active power
91 10000 60 0.8 120 0.9 0.4586
92 10000 80 0.8 160 0.9 0.5693
93 10000 100 0.8 200 0.9 0.6688
94 10000 120 0.8 240 0.9 0.7305
95 10000 140 0.8 280 0.9 0.7917
96 10000 160 0.8 320 0.9 0.8475
97 10000 180 0.8 360 0.9 0.8793
98 10000 200 0.8 400 0.9 0.9124
99 10000 220 0.8 440 0.9 0.9369
100 10000 240 0.8 480 0.9 0.9514
検出力 80%となるプラセボ群の例数は 140~160例くらい、実薬群は 280~320例くらいとなり、90%となるのはプラセ
ボ群 180~200例、実薬群 360~400例くらいとなります。
26