ねこすたっと

ねこの気持ちと統計について悩む筆者の備忘録的ページ。

サンプルサイズ計算:1群の2値アウトカムの割合から母集団における割合を推定する [R]

自分用のリファレンスとして、サンプルサイズ計算に関する記事をシリーズで書いています。 なるべく体裁を統一するために、以下のように決めています。

  • 群を示す添字について:
    • c, C = 対照群
    • t, T = 介入群*1
    • e, E = 要因群
    • 添字なし = 全体
  • 使用する記号:
    • p = 反応割合
    • μ = 平均値
    • σ = 標準偏差
    • Φ = 割り付け比 Nt/Nc(デフォルトは1)
    • α = αエラー(デフォルトは0.05)
    • β = βエラー(デフォルトは0.2)
    • z = 標準正規分布の累積分布関数

想定シナリオ

疾患Dの治療として、新規薬Tの奏効割合は感覚的には30%くらいありそうだが、実際はどれくらいだろうか? 新規薬Tを投与された患者の転帰を調べて、奏効割合を推定したい。 95%信頼区間の幅が10%以内になるようにしたい場合、必要なサンプルサイズはどれくらいだろうか?

精度(=信頼区間の幅)の目標値があり、それをもとにしたサンプルサイズ計算である。仮説をベースにしたサンプルサイズ計算ではないので、具体的な既存の比較基準があるわけではない。

方法0:手計算

割合の信頼区間としては、

 
\begin{aligned}
p - z_{1-\alpha/2} \sqrt{p(1-p)/n} , \ p + z_{1-\alpha/2} \sqrt{p(1-p)/n} 
\end{aligned}

が用いられることが多いと思う。これは二項分布を正規分布に近似した計算方法。

しかし、反応割合が0または1に近い場合や、nが小さい場合は以下の式の使用が推奨されているらしい。*2

 
\begin{aligned}
p &= \frac{r}{n} \\
A &= 2r + z_{1-\alpha/2}^2 \\
B &= z_{1-\alpha/2}\sqrt{z_{1-\alpha/2}^2 + 4r(1-p)} \\
C &= 2(n+z_{1-\alpha/2}^2)
\end{aligned}

とすると、100(1-α)%信頼区間は次のようになる。

 
\begin{aligned}
\frac{A-B}{C}, \ \frac{A+B}{C} 
\end{aligned}

この方法だとp=0あるいは1のときでも信頼区間が計算できる。

信頼区間の幅は  w = 2B/C となるので、サンプルサイズは次の式で計算される。

 
\begin{aligned}
N &= \left[ 2 \Omega -1  + \sqrt{(2 \Omega -1)^2 + \frac{1}{w^2}-1} \ \right] z_{1-\alpha/2}^2 \\
\Omega &= \frac{p(1-p)}{w^2}
\end{aligned}

上の式に、

  •  p = 0.3
  •  w = 0.1
  •  z_{1-\alpha/2} = 1.96
  •  z_{ 1 - \beta} = 0.8416

を代入すると、N=319.5...となり320例必要なことがわかる。

方法1:pwr.p.test( )を使って計算する

田中司朗先生たちが翻訳された本には、以下のような説明が書かれている。*3

ここに示す方法(補足:信頼区間からサンプルサイズを計算する方法)は、検出力 50%または1-β=0.5の検出力を仮定していることと等価であり、 Z_{1-\β} = 0 と設定していることになる。

同様の説明は、長島健悟先生の解説ページにも書かれている。*4

ちなみに、信頼区間に基づくサンプルサイズは、同様の条件下での仮説検定の検出力が 50% 程度になるサンプルサイズにほぼ等しくなります (期待有効確率 ± 信頼区間幅を帰無仮説、期待有効確率を対立仮説とおいたとき)。

ちなみに長島先生のページで計算すると、320-341例(選択する方法によって微妙に異なる)になった(ただし、仮説検定を行う試験では信頼区間の幅をもとにした計算方法はダメとのこと)。

精度にもとづいて計算してくれるR関数が見当たらなかったので、前述のことを利用してOneSampleProportion.Equality( )を使って計算してみる。

この関数で指定する引数は、以下のとおり。

  • alpha:αエラー(=0.05)
  • beta:βエラー(=0.5)
  • p:試験群に見込まれる割合(=0.3)
  • differ:試験群の割合と比較したい割合  p_0 の差(= p - p0)

比較したい割合  p_0 は、読み替えれば信頼区間の端の値(有意差が出てほしい値=信頼区間にギリギリ含まれない値)なので、引数differは信頼区間の片腕の長さということになる(なのでここでは0.05を指定する)。

library(TrialSize)
OneSampleProportion.Equality(alpha = 0.05,
                             beta = 0.2,
                             p = 0.3,
                             differ = 0.05)
[1] 322.6825

サンプルサイズは323例必要なことが分かる。長島先生のページで計算した結果とほぼ同じなので、考え方を含めて間違ってなさそう。

おわりに

  • 2値アウトカムシリーズはこれでひとまず終わりです。
  • 一晩家を空けるのに備えて自動給餌器を買いました。

参考資料

  • サンプルサイズ計算の本なのにあまり眠くならない!手計算はこの本を参考にしました。

  • 長島健悟先生のホームページより。計算できるだけじゃなくて解説も詳しく書いてくださっているので勉強になります。

nshi.jp

*1:interventionのIを使うと1と区別しにくいのでtrial

*2:D. Machin, M.J. Campbell, S.B. Tan, S.H. Tan 著. 田中 司朗, 耒海 美穂, 清水 さやか, 土居 正明 訳. 医学のためのサンプルサイズ設計. 京都大学学術出版会(2022). pp.31-33

*3:D. Machin, M.J. Campbell, S.B. Tan, S.H. Tan 著. 田中 司朗, 耒海 美穂, 清水 さやか, 土居 正明 訳. 医学のためのサンプルサイズ設計. 京都大学学術出版会(2022). pp.210

*4:Nagashima K. A sample size determination tool for a confidence interval for the binomial proportion [Internet]. 2012 Mar 30 [cited 2022 Jul 22]; Available from: https://nshi.jp/contents/js/onebinomci/ (In Japanese).