何を選ぶ？データの正規性の検定

# 目次

<font color="LightCoral">●[正規性の検定とは？](#正規性の検定とは？)
●[正規性の検定](#正規性の検定)
●[正規性の検定の比較（αエラーの比較）](#正規性の検定の比較αエラーの比較)
●[正規性の検定の比較（1-β）](#正規性の検定の比較1-β)
●[結論](#結論)</font>

# 正規性の検定とは？

　<font color="RoyalBlue">正規性の検定とは，データが正規分布に従わないことを確認する検定</font>です．
　昔から医療系の研究で統計解析を行うときに，データが正規分布に従う・従わないという理由で，パラメトリック検定（正規分布に従う場合），ノンパラメトリック検定（正規分布に従わない場合）の何れを選ぶかという迷いに悩まされる人が多かったはずです．
　ヒストグラムで確認するという時代もありましたが，N=100程度ではとても確認できるものではありません．かつてはカイ二乗適合度検定や，歪度・尖度を活用する方法もありましたが，十分ではありませんでした．
　最初に断っておきますが，正規分布に従う現実のデータを発見した人は，世の中に存在しません（理論的には作成できます）．<font color="RoyalBlue">本当に確認する意味あるのかな…</font>と思ってしまいますが，慣例に倣って続きを．

# 正規性の検定

　正規性の検定として，Shapiro-Wilk検定，Kolmogorov-Smirnov検定，Lilliefors検定，Anderson–Darling検定など，があります．
　いずれも，正規性の検定なので，<font color="RoyalBlue">どれを使っても間違いとはいい切れません．</font>ただ，それぞれに特徴があります．
　RコマンダーではShapiro-Wilk検定，Anderson–Darling検定，Cramer-von Mises検定，Lilliefors(Kolmogorov-Smirnov)検定，ピアソンのカイ二乗検定がメニューに入っています．
　これは，
```
 normalityTest
 ```
　の関数に基づくもので，
```
normalityTest(~ 変数名 , test="lillie.test", data= データ名 )
```
の```"lillie.test"```の"　"内部分を変えれば手法が選択できます．
```
shapiro.test：Shapiro-Wilk検定
ad.test：Anderson–Darling検定
cvm.test：Cramer-von Mises検定
lillie.test：Lilliefors(Kolmogorov-Smirnov)検定
pearson.test：ピアソンのカイ二乗検定
sf.test：Shapiro-Francia検定
```
に変えればそれぞれの手法が選べます．　
　こんなにあると，どれが良いのか悩むと思います．下記に簡単な説明を入れますが，詳しくは[ここ](https://oceanone.hatenablog.com/entry/2020/05/07/001952)も参考になるでしょう．


### Shapiro-Wilk検定
　Shapiro-Wilk検定は正規分布に従うデータの検定に特化した手法です．3≦n≦5000のデータであれば，検定できます．SPSSをはじめとした，<font color="RoyalBlue">ほとんどの統計ソフトにプログラムされている手法</font>です．医療系での使用頻度も高いと思います．

### Kolmogorov-Smirnov検定とLilliefors検定
　<font color="RoyalBlue">基本的なKolmogorov-Smirnov検定は，n≦100のデータでは精度が悪く使えません．</font>そこで，n≦100のときは，Lilliefors検定に切り替える統計ソフト（[SPSSなど](https://www.ibm.com/docs/ja/spss-statistics/saas?topic=tests-one-sample-kolmogorov-smirnov-test)）もあります．
　<font color="RoyalBlue">Lilliefors検定はKolmogorov-Smirnov検定の修正版</font>なので，Rコマンダー2.8.0以降では```Lilliefors（Kolmogorov-Smirnov）```と表示されます．
　Lilliefors検定は，逆にnが大きい方（2000≦n）が良いともいわれます．

### Anderson–Darling検定
　<font color="RoyalBlue">Anderson–Darling検定はRコマンダーVer2.8.0になってから，デフォルトで設定されています．</font>デフォルト設定するぐらいなので，もしかして最も優れた手法かも…と考えてしまいます．[JMP](https://www.jmp.com/japan/support/faq/stat_2085.shtml)でもプログラムされているようです．5000≦nのようなデータであれば，この方法が妥当といわれます（根拠は不明です）．
　

### その他の検定
　かつては使用されていたピアソンのカイ二乗適合度検定，Shapiro-Francia検定は使用の機会が少ないと思います．
<font color="RoyalBlue">Cramer-von Mises検定</font>は，あまり耳にすることがありませんでしたが，歴史的には古い手法です（Cramer-von Mises Smirnov検定とも呼ばれます）．

# 正規性の検定の比較（αエラーの比較）

　いずれも甲乙つけがたいし，理論のウンチクを述べても仕方ないので，<font color="RoyalBlue">これらの検定を実際に比較</font>してみます．
- R4.2.2を使用し，標本の大きさn（n=10，30，50，80，100，150，200，250，300）の正規分布に従う乱数 **x** ～ *N* （0，1）を発生させます．
-  **x** に対して，<font color="SandyBrown">Shapiro-Wilk検定，Kolmogorov-Smirnov検定，Lilliefors検定，Cramer-von Mises検定，Anderson–Darling検定</font>を行ってp値を出力します．
    - 使用する関数は，<font color="SandyBrown">全て```normalityTest```</font>ですが，RではShapiro-Wilk検定の関数として<font color="SandyBrown">```shapiro.test```が用いられることも多い</font>ので，こちらも出力します
    - 以降，<font color="SandyBrown">normalityTestによる結果はShapiro-Wilk検定 **①** </font>，<font color="SandyBrown">shapiro.testはShapiro-Wilk検定 **②** </font>とします．
    - <font color="SandyBrown">Kolmogorov-Smirnov検定は，```normalityTest```にはない</font>ので（Lilliefors検定で代用しているようですが），```ks.test```関数を使用します．
- この作業を **10万回** 繰り返します．
- 各々の手法でp<0.05となった結果の個数（10万個のp値のうちいくつか）を数えます．

　正規分布に従うデータを検定しますので，正解はp≧0.05です．間違った判定のp<0.05となった結果の個数（10万個のp値のうちいくつか）を数え，割合を以下の表に示しました．<font color="RoyalBlue">理想は0.05</font>です．この値に近いほど，理論的に優れている検定法となります．
|n|Shapiro-Wilk①|Shapiro-Wilk②|Anderson–Darling|Lilliefors|Cramer-von Mises|Kolmogorov-Smirnov|
|:---:|:---:|:---:|:---:|:---:|:---:|:---:|
10   |    0.04996   |   0.04996| 0.05052 |    0.05034 | 0.05049| 0.04989
30   |    0.05119   |   0.05119| 0.04996 |    0.04767 | 0.05021| 0.05032
50   |    0.04972   |   0.04972| 0.04975 |    0.04893 | 0.05025| 0.05020
80   |    0.04886   |   0.04886| 0.04958 |    0.04952 | 0.05024| 0.04891
100  |    0.04889   |   0.04889| 0.04934 |    0.05075 | 0.05037| 0.04499
150  |    0.04952   |   0.04952| 0.04927 |    0.05159 | 0.05081| 0.04589
200  |    0.04979   |   0.04979| 0.04965 |    0.05078 | 0.05035| 0.04847
250  |    0.05072   |   0.05072| 0.04989 |    0.05066 | 0.05059| 0.04626
300  |    0.05098   |   0.05098| 0.05032 |    0.05140 | 0.05055| 0.04816

　Shapiro-Wilk検定は，```normalityTest```，```shapiro.test```の何れを使っても同じ結果なので，どちらでも良いでしょう．
　<font color="RoyalBlue">いずれの方法も，0.05にかなり近いので，どれを使っても間違っているとはいえない結果</font>です．RのKolmogorov-Smirnov検定は補正がかかっている（基本的なKolmogorov-Smirnov検定ではない）と思います．
　<font color="RoyalBlue">ここまでの結果からは，どれをつかってもほぼ同じ，自らの専門の学術分野でよくみられる方法を使えばよい</font>でしょう．


# 正規性の検定の比較（1-β）

　上と同様にRで，
- 標本の大きさn（n=10，30，50，80，100，150，200，250，300）の正規分布に従うデータ **x** ～ *LN* （0，0.1）を発生させます．
- 以降は，上記αエラーと同様です．
- 各々の手法でp<0.05となった結果の個数（10万個のp値のうちいくつか）を数えます．

　正規分布に従わないデータを検定しますので，正解はp<0.05です．正解の判定のp<0.05となった結果の個数（10万個のp値のうちいくつか）を数え，割合を表に示しました．<font color="RoyalBlue">理想は1に近いほど，理論的に優れている検定法</font>となります．
|n|Shapiro-Wilk①|Shapiro-Wilk②|Anderson–Darling|Lilliefors|Cramer-von Mises|Kolmogorov-Smirnov|
|:---:|:---:|:---:|:---:|:---:|:---:|:---:|
10    |   0.05770   |   0.05770| 0.05756  |   0.05600 | 0.05601| 0.00003
30    |   0.08648   |   0.08648| 0.07657   |  0.06583 | 0.07357| 0.00025
50    |   0.11402   |   0.11402| 0.09405  |   0.08014|  0.08849| 0.00050
80    |   0.15405   |   0.15405 |0.12022  |   0.09840 | 0.11038| 0.00081
100   |   0.17876   |   0.17876| 0.13950  |   0.11219 | 0.12709| 0.00078
150   |   0.25181   |   0.25181| 0.18821  |   0.14598|  0.16854| 0.00156
200   |   0.31659   |   0.31659| 0.23395  |   0.17481 | 0.20713| 0.00234
250   |   0.38994   |   0.38994 |0.28752  |   0.21009|  0.25485| 0.00370
300   |   0.45652   |   0.45652| 0.33635  |   0.24315 | 0.29536| 0.00508

　Shapiro-Wilk検定が最も高い検出力を示しました．最も低いのはKolmogorov-Smirnov検定，Lilliefors検定も低めです．
nが小さければ（Kolmogorov-Smirnov検定を除いて），どの手法も似たり寄ったりです．

# 結論

　結論として，<font color="RoyalBlue">Shapiro-Wilk検定が妥当</font>と考えます．
　他の分布ではどうなるか不明ですが，本例が一つ発生していますので，この結論でよいと思います．
　たまに，Kolmogorov-Smirnov検定を使う方がいますが，nが小さい（といってもn=300でも疑わしいですが）と検出力は疑問です．ないとは思いますが，正規分布ではない，という結果を（意図的に）避ける示唆となっているかもしれません．


# 追加

**x** ～ *U* (0，1)でも確認．

|n|Shapiro-Wilk①|Shapiro-Wilk②|Anderson–Darling|Lilliefors|Cramer-von Mises|Kolmogorov-Smirnov|
|:---:|:---:|:---:|:---:|:---:|:---:|:---:|
10   |    0.08166  |    0.08166| 0.07851  |   0.06227 | 0.07147| 0.00002
30   |    0.38345  |    0.38345| 0.29791  |   0.14087 | 0.23164| 0.00032
50   |    0.74907  |    0.74907| 0.57498  |   0.25543 | 0.43711| 0.00139
80   |    0.97329  |    0.97329| 0.86342  |   0.45936 | 0.71684| 0.00498
100  |    0.99628  |    0.99628| 0.94872  |   0.59141 | 0.84071| 0.00914
150   |   0.99998  |    0.99998| 0.99776  |   0.83150 | 0.97306| 0.03965
200  |    1.00000  |    1.00000| 0.99998  |   0.94721 | 0.99728| 0.11460
250  |    1.00000  |    1.00000| 1.00000  |   0.98648 | 0.99979| 0.24254
300  |    1.00000  |    1.00000| 1.00000  |   0.99743 | 0.99998| 0.40962

同じ結果でした．