ナイーブな方法で2群比較のサンプルサイズを決める

臨床試験をデザインするときなどで、適切なサンプルサイズの決定に悩んでいる諸君へ。

このページでは、サンプルサイズ決定の原理、および実装を丁寧に紹介する。
ぜひ皆の役に立てればと思う。
なお、サンプルサイズの決定は手計算では厳しい。プログラムが必要になる。
そんなときのために、[サンプルサイズ決定プログラム(まだ用意していません...)]() を用意しておいた。
webインターフェイスで簡易に使えるようになっている。ぜひ参考にしてほしい。

## 適切なサンプルサイズというのがある

有効/無効 という2つの値に結果が決まる2群(治療A, 治療B)の比較を考えてみよう。

|     | 有効 | 無効 |
|:----|:----|:----|
| 治療A | 300 | 700  |
| 治療B | 200 | 800  |

なんとなく、AとBは差がありそうだ。
ただこの試験に合計2000人も必要となると大変だ。だからもっと合計人数(=サンプルサイズ)を減らしたい。

でも例えば、同じ割合だけど下記のようなデータになったら、差があるといえるだろうか。

|    | 有効 | 無効 |
|:----|:----|:----|
| 治療A | 3 | 7  |
| 治療B | 2 | 8  |

なんとなく厳しそうだ。適切な値にして、「差があると言える、できるだけ少ない数」になればいい。

## サンプルサイズを決定する因子
サンプルサイズを適切な値にするために、事前に用意したい情報は以下の3つだ。それを順に紹介していく。
1. 有効率の見積もり (A, Bそれぞれ)
2. 検出力
3. 有意水準

### 有効率
治療Aが治療Bに比べて明らかに良いものであれば、

|    | 有効 | 無効 |
|:----|:----|:----|
| 治療A | 9 | 1  |
| 治療B | 2 | 8  |

このように20人でも治療Aの有効性が証明できそう。
つまりサンプルサイズの決定には、各治療の有効率の情報が必要だ。
ただ、困惑されたように、誰もこの正確な値を知ることはできない。
よって、過去の試験情報や手元の資料などからロジカルにひねり出す必要が出てくる。


### 検出力
治療Aがどんなに優れたものであっても、運が悪すぎると、

|    | 有効 | 無効 |
|:----|:----|:----|
| 治療A | 2 | 8  |
| 治療B | 2 | 8  |

このように分布してしまい、差がでない、なんてこともある。
サンプルサイズが増えればこのような悲劇は防げていくが、
悲劇が起こらない確率 = 有意なものを有意といえる確率 = 検出力 を決めておくことが必要だ。
これはだいたい0.8とか0.9にする。
例えば0.8なら、5回に1回は、「ホントは差があるのに、ない結果となる」という意味だ。

### 有意水準
治療Aと治療Bには差がないと考えると、この表はレアな確率でしか出てこない。

|    | 有効 | 無効 |
|:----|:----|:----|
| 治療A | 9 | 1  |
| 治療B | 2 | 8  |

レアな確率で出たと考えるか、そもそも差があったと考えるのか。
その境目となる確率を「有意水準」という。
有意水準はだいたい0.05とか0.01に設定される。(片側/両側 という話については後述)。

ということで、**有効率、検出力、有意水準**を決めることが必要だ。

## サンプルサイズを求める！
- 有効率 α, β
- 検出力 0.8
- 有意水準 0.05

なお下記では簡単のため、A群とB群の人数比は1:1とし、全体のサンプルサイズを2Nとする。

## 準備1: 特定の2x2表が実現する確率を求める方法
|    | 有効 | 無効 |
|:----|:----|:----|
| 治療A | 9 | 1  |
| 治療B | 2 | 8  |

こうなる確率をα, βで表してみよう。

治療Aの有効率αとは、「治療Aをしたあと、確率αで有効、1-αで無効」ということだ。
なので、コインを投げて表が出る確率のように、
N人に治療Aを実施し、有効である人数は二項分布 B(N, α) に従う。
同様に、治療Bが有効である人数はB(N, β)に従う。
このとき、データが上の表にようになる確率は、


```math
P = 
\begin{eqnarray}
{}_{10} C _9

α^{9} (1 - α)^{1}
{}_{10} C _2
β^{2} (1 - β)^{8}
\end{eqnarray}
```
下記のように表せる。一般化すると、

|    | 有効 | 無効 |
|:----|:----|:----|
| 治療A | a | N - a  |
| 治療B | b | N - b  |

```math
P(a, b, N) = 
\begin{eqnarray}
{}_{N} C _{a}

α^{a} (1 - α)^{N-a}
{}_{N} C _b
β^{b} (1 - β)^{N-b}
\end{eqnarray}
```

## 準備2: 与えられた2x2表が有意かどうかを求める方法
各表が与えられたとき、それが有意であるかどうかは、有意水準を決めて検定をすればよい。
検定といっても、自由度1のカイ二乗検定なので、カイ二乗値 > 3.84 であれば有意というところまで決まっている。

|    | 有効 | 無効 |
|:----|:----|:----|
| 治療A | a | N - a  |
| 治療B | b | N - b  |

のカイ二乗値は

```math
\chi^{2} = \frac{2(a-b)^{2}N}{(a +b)(2N - a - b)}
```
で表わされるので、a, bに数値を代入して

```math
\chi^{2} > 3.84
```
で判定すればよい。

## サンプルサイズ決定アルゴリズム

1. N を、小さい値(とりあえず10)に設定。
2. このとき、生成されうる2x2表のパターンは11 x 11 の121通りある(後述)。
3. 1つ1つの表について、有意となるもの(準備2)だけを抽出する。
4. 抽出された有意な表それぞれの実現する確率(準備1)を計算し、足し合わせる。
5. 足した結果が検出力(0.8)より大きければ、そのときのNに対して2Nがサンプルサイズ。
6. 足した結果が検出力より小さければ、NをN+1に設定して2へ。

#### 生成される表のパターン

|    | 有効 | 無効 |
|:----|:----|:----|
| 治療A | a | N - a  |
| 治療B | b | N - b  |

N = 10であれば、a, bそれぞれが0~10の11通りの値をとることができるので、合計121通りある。



### 解説
適当にサンプルサイズを与え、得られるすべての2x2表について、実現確率(準備1)と有意性(準備2)を評価し、検出力を計算。
適切な検出力となるまでサンプルサイズを少しずつ増やしてゆく。
このようなナイーブな方法でサンプルサイズを決定することができる。
もちろん大量の計算が必要となるが、プログラムを書けば30秒もあれば終わってくれる。

## 結論
サンプルサイズの決定の原理は、決して複雑なものではない。
実装については、プログラムを用意するので乞うご期待。