R統計検定6（サンプルサイズの設計）

# Rで行う基本的な統計検定とその選択フローチャート2

このシリーズでは生物学で用いられている基本的な統計検定をRで行う際の手順と実際のコードを特集します。自身のデータセットの特徴と実験目的から適切な統計検定法を選択し、それをRで実行できるようになるための指針となれば幸いです。
第一回：平均値の差の検定（2群） 
第二回：一元配置の分散分析
第三回：一元配置の多重比較
第四回：二元配置の分散分析とその後の多重比較 
第五回：比率の差の検定
**第六回：サンプルサイズの設計法**
第七回：回帰分析

## 第六回　サンプルサイズの設計

### 6.1 サンプルサイズ、効果量、有意水準、検出力
詳しい説明は省略するが、サンプルサイズ-効果量-有意水準-検出力の4つは他の3つが決定すれば最後の1つが自動的に決まるという性質をもつ。
有意水準は大体の場合は0.05、検出力は0.9のことが多い。0.8でも十分
効果量は実験デザインによって様々だが、先行研究や予備実験などから大体の想定を持っておく必要がある。効果量の低い処理では微細な差しか生まれないため、有意な差を検出するためにはサンプルサイズを大きくする必要がある。一方で効果の大きい処理では少ないサンプルサイズ で有意差が検出される。

つまりサンプルサイズの設計には効果量がどれくらいなのか予測することが重要になる。
＊サンプルサイズを操作することで小さい効果量でも有意差が検出できてしまうことに注意。有意差というものがあまり意味がないかもしれないという感覚を持っておくことも重要である。最近では、有意差の有無とともに効果量にも言及することが推奨されているようだ。

### 6.2 母平均の差の検定のためのサンプルサイズ設計法

これから取得するデータの母集団については正規性・等分散性を仮定する。
ちなみにサンプルサイズを計算してくれるオンラインツールがあったので紹介：https://keisan.casio.jp/exec/user/1491310412
このサイトでは有意水準、検出力、効果量(u1-u2/σ)を入力するとサンプルサイズが計算できる。
両側検定、片側検定どちらにも対応可能である。算出されるサンプルサイズは多分2群のサンプルサイズ が同じか大体同じを前提にしているので、群あたりのサンプルサイズ と思われる。

Rでもサンプルサイズを算出できる関数が用意されている。
1標本検定、2標本の平均値の差の検定（対応あり、対応なし）、片側検定/両側検定に適用可能。ただし2標本の平均値の差の検定は正規性、等分散性、n数が大体同じを仮定している。実験をやる前に明らかに正規性や等分散性が仮定できない場合、n数が極端に異なることが想定される場合は適用できないが、目安を知るだけでも価値はあるのでとりあえずサンプル数を計算しておくとよいと思います。

とりあえずRで実行してみる。
参照：https://multivariate-statistics.com/2021/10/16/r-programming-power-sample-size/#usage

```R
delta = 4　　　#標本平均の差の絶対値が4程度と仮定
sd = 1.5　　　　#標本の標準偏差が1.5程度と仮定
alpha = 0.05　　　#有意水準 α=0.05で検定をすると仮定
beta = 0.1　　　　#検出力 1-βで帰無仮説を棄却したいと仮定

power.t.test(delta = delta, sd = sd, sig.level = alpha, power = 1-beta, type = "two.sample", alternative = "two.sided")
```
結果
```
Two-sample t test power calculation 

              n = 4.194094
          delta = 4
             sd = 1.5
      sig.level = 0.05
          power = 0.9
    alternative = two.sided

NOTE: n is number in *each* group
```

以上から標本平均の差が4、2群の標準偏差が1.5の標本では、有意水準0.05,検出力0.9で有意差を検出するためには各群のサンプルサイズ が5程度であればよいとの目安が得られた。

### 6.3 母比率の差の検定のためのサンプルサイズ設計




参照：https://multivariate-statistics.com/2021/10/16/r-programming-power-sample-size/#usage

```R
p1　=　0.08               #　p1群の比率が0.08と仮定
p2　=　0.18　　　　　#　p2群の比率が0.18と仮定
alpha = 0.05　　　#　有意水準 α=0.05で検定をすると仮定
beta = 0.1　　　　#　検出力 1-βで帰無仮説を棄却したいと仮定
power.prop.test( p1 = p1 , p2 = p2, sig.level = alpha, power = 1-beta)
```
結果
```
Two-sample comparison of proportions power calculation 

              n = 235.5938
             p1 = 0.08
             p2 = 0.18
      sig.level = 0.05
          power = 0.9
    alternative = two.sided

NOTE: n is number in *each* group
```
以上から8%と18%の比率を持つ2群について、有意水準0.05,検出力0.9で有意差を検出するためには各群のサンプルサイズ が236程度であればよいとの目安が得られた。

### 6.4 one-way ANOVAのためのサンプルサイズ設計

参照：
https://runebook.dev/ja/docs/r/library/stats/html/power.anova.test
https://blog.goo.ne.jp/r-de-r/e/0cbfc9095c6513dbfac03fbce1cd4d7e
https://multivariate-statistics.com/2021/10/16/r-programming-power-sample-size/#usage

```R
groups　= 4
Vb = 543.06     # 分散分析表で出てくる群のMeanSq
Vw = 138.74　　　　# 分散分析表で出てくるResidualsのMeanSq
alpha = 0.05　　　# 有意水準 α=0.05で検定をすると仮定
beta = 0.1　　　　# 検出力 1-βで帰無仮説を棄却したいと仮定

power.anova.test(groups = groups, between.var = Vb, within.var = Vw, sig.level = alpha, power = 1 - beta)
```
ちなみに、Vbは群間平均平方、Bwは群内平均平方である。以下の分散分析表では群のMeanSqとResidualsのMeanSqにそれぞれ相当する。https://qiita.com/sakutoy/private/e9a8cd539d86963348c7 の2.2.1の分散分析の結果から拝借。
```
Analysis of Variance Table

Response: score
          Df Sum Sq Mean Sq F value  Pr(>F)  
class      3 1629.2  543.06  3.9141 0.02708 *
Residuals 17 2358.6  138.74                  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
```

結果
```
Balanced one-way analysis of variance power calculation 

         groups = 4
              n = 2.456935
    between.var = 543.06
     within.var = 138.74
      sig.level = 0.05
          power = 0.9

NOTE: n is number in each group
```
以上から群間平均平方が543.06、群内平均平方が138.74の標本では、有意水準0.05,検出力0.9で有意差を検出するためには各群のサンプルサイズ が3程度であればよいとの目安が得られた。

### 6.5 多重比較のためのサンプルサイズ設計

Rでは多重比較のためのサンプルサイズの算出も行える。パッケージであるTrialSizeを使う方法を紹介する。

参照：https://toukeier.hatenablog.com/entry/bonferroni-sample-size-in-r
https://www.rdocumentation.org/packages/TrialSize/versions/1.4/topics/OneWayANOVA.pairwise

```R
install.packages("TrialSize")
library(TrialSize)

tau = 6          　　　# 比較したい群数、群の数kならkC2の組み合わせ　
sigma = 1　　　　　# 各群の標準偏差
margin = 1　　　　# 平均値の差
alpha = 0.05　　　# 有意水準 α=0.05で検定をすると仮定
beta = 0.1　　　　# 検出力 1-βで帰無仮説を棄却したいと仮定

OneWayANOVA.pairwise(alpha=alpha, beta=beta, tau=tau, sigma=sigma, margin=margin)
```
結果
```
[1] 30.7298
```
すごくシンプル。とにかく4群の比較を行う時、各群の標準偏差が1で平均値の差が1程度ならば、有意水準0.05,検出力0.9で有意差を検出するためには各群のサンプルサイズ が31程度であればよいとの目安が得られた。

ちなみに、比率の多重比較でも同様に使用できる関数がある。

```R
install.packages("TrialSize")
library(TrialSize)

tau = 6          　　　# 比較したい群数、群の数kならkC2の組み合わせ　
p1 = 0.4　　　　　# 各群の標準偏差
p2 = 0.25　　　　# 平均値の差
delta = 0.3 　　　# よくわからん、R Documentationにはdelta=p_i - p_jと記載してあった
alpha = 0.05　　　# 有意水準 α=0.05で検定をすると仮定
beta = 0.1　　　　# 検出力 1-βで帰無仮説を棄却したいと仮定

OneWayANOVA.PairwiseComparison(tau=tau, alpha=alpha, beta=beta, p1=p1, p2=p2, delta=delta)
```
結果
```
[1] 72.98328
```
以上から6群の比率の比較において、0.3くらいの差を有意水準0.05,検出力0.9で有意差を検出するためには各群のサンプルサイズ が73程度であればよいとの目安が得られた。
結構比率の差の検定で、有意差を出すためにはサンプルサイズ が大きくないといけないような気がした。