目次
●正規性の検定とは?
●正規性の検定
●正規性の検定の比較(αエラーの比較)
●正規性の検定の比較(1-β)
●結論
正規性の検定とは?
正規性の検定とは,データが正規分布に従わないことを確認する検定です.
昔から医療系の研究で統計解析を行うときに,データが正規分布に従う・従わないという理由で,パラメトリック検定(正規分布に従う場合),ノンパラメトリック検定(正規分布に従わない場合)の何れを選ぶかという迷いに悩まされる人が多かったはずです.
ヒストグラムで確認するという時代もありましたが,N=100程度ではとても確認できるものではありません.かつてはカイ二乗適合度検定や,歪度・尖度を活用する方法もありましたが,十分ではありませんでした.
最初に断っておきますが,正規分布に従う現実のデータを発見した人は,世の中に存在しません(理論的には作成できます).本当に確認する意味あるのかな…と思ってしまいますが,慣例に倣って続きを.
正規性の検定
正規性の検定として,Shapiro-Wilk検定,Kolmogorov-Smirnov検定,Lilliefors検定,Anderson–Darling検定など,があります.
いずれも,正規性の検定なので,どれを使っても間違いとはいい切れません.ただ,それぞれに特徴があります.
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検定
に変えればそれぞれの手法が選べます.
こんなにあると,どれが良いのか悩むと思います.下記に簡単な説明を入れますが,詳しくはここも参考になるでしょう.
Shapiro-Wilk検定
Shapiro-Wilk検定は正規分布に従うデータの検定に特化した手法です.3≦n≦5000のデータであれば,検定できます.SPSSをはじめとした,ほとんどの統計ソフトにプログラムされている手法です.医療系での使用頻度も高いと思います.
Kolmogorov-Smirnov検定とLilliefors検定
基本的なKolmogorov-Smirnov検定は,n≦100のデータでは精度が悪く使えません.そこで,n≦100のときは,Lilliefors検定に切り替える統計ソフト(SPSSなど)もあります.
Lilliefors検定はKolmogorov-Smirnov検定の修正版なので,Rコマンダー2.8.0以降ではLilliefors(Kolmogorov-Smirnov)
と表示されます.
Lilliefors検定は,逆にnが大きい方(2000≦n)が良いともいわれます.
Anderson–Darling検定
Anderson–Darling検定はRコマンダーVer2.8.0になってから,デフォルトで設定されています.デフォルト設定するぐらいなので,もしかして最も優れた手法かも…と考えてしまいます.JMPでもプログラムされているようです.5000≦nのようなデータであれば,この方法が妥当といわれます(根拠は不明です).
その他の検定
かつては使用されていたピアソンのカイ二乗適合度検定,Shapiro-Francia検定は使用の機会が少ないと思います.
Cramer-von Mises検定は,あまり耳にすることがありませんでしたが,歴史的には古い手法です(Cramer-von Mises Smirnov検定とも呼ばれます).
正規性の検定の比較(αエラーの比較)
いずれも甲乙つけがたいし,理論のウンチクを述べても仕方ないので,これらの検定を実際に比較してみます.
- R4.2.2を使用し,標本の大きさn(n=10,30,50,80,100,150,200,250,300)の正規分布に従う乱数 x ~ N (0,1)を発生させます.
-
x に対して,Shapiro-Wilk検定,Kolmogorov-Smirnov検定,Lilliefors検定,Cramer-von Mises検定,Anderson–Darling検定を行ってp値を出力します.
- 使用する関数は,全て
normalityTest
ですが,RではShapiro-Wilk検定の関数としてshapiro.test
が用いられることも多いので,こちらも出力します - 以降,normalityTestによる結果はShapiro-Wilk検定 ① ,shapiro.testはShapiro-Wilk検定 ② とします.
-
Kolmogorov-Smirnov検定は,
normalityTest
にはないので(Lilliefors検定で代用しているようですが),ks.test
関数を使用します.
- 使用する関数は,全て
- この作業を 10万回 繰り返します.
- 各々の手法でp<0.05となった結果の個数(10万個のp値のうちいくつか)を数えます.
正規分布に従うデータを検定しますので,正解はp≧0.05です.間違った判定のp<0.05となった結果の個数(10万個のp値のうちいくつか)を数え,割合を以下の表に示しました.理想は0.05です.この値に近いほど,理論的に優れている検定法となります.
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
の何れを使っても同じ結果なので,どちらでも良いでしょう.
いずれの方法も,0.05にかなり近いので,どれを使っても間違っているとはいえない結果です.RのKolmogorov-Smirnov検定は補正がかかっている(基本的なKolmogorov-Smirnov検定ではない)と思います.
ここまでの結果からは,どれをつかってもほぼ同じ,自らの専門の学術分野でよくみられる方法を使えばよいでしょう.
正規性の検定の比較(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値のうちいくつか)を数え,割合を表に示しました.理想は1に近いほど,理論的に優れている検定法となります.
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検定を除いて),どの手法も似たり寄ったりです.
結論
結論として,Shapiro-Wilk検定が妥当と考えます.
他の分布ではどうなるか不明ですが,本例が一つ発生していますので,この結論でよいと思います.
たまに,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 |
同じ結果でした.