検定を実施する際、パラメトリックかノンパラメトリックかで検定の種類が変わることがありますが、この判断に使われる手段の一つが正規性の検定です。
今回はRで正規性の検定を実施する方法としてシャピロ・ウィルク検定とコルモゴロフ・スミルノフ検定の2つを紹介します。これによってデータが正規分布に従うかどうかが判断できます。
シャピロ・ウィルクの検定
正規性の検定で最も一般的に使われるのがシャピロ・ウィルク検定(Shapiro-Wilk test)です。
シャピロ・ウィルク検定をRで実施するには
shapiro.test(x=データ)
と書きます。
「x=」の部分は省略してデータだけ書いてもOKです。
例えば、RのサンプルデータのirisデータのPetal.Length(花びらの長さ)が正規分布かどうかを調べるには
shapiro.test(iris$Petal.Length)
となります。
1 2 3 4 5 6 |
shapiro.test(iris$Petal.Length) Shapiro-Wilk normality test data: iris$Petal.Length W = 0.87627, p-value = 7.412e-10 |
結果を見ると、p値(p-value)が7.412e-10となっています。
シャピロ・ウィルク検定の帰無仮説はデータが正規分布に従う、ということなので次のように解釈しましょう。
- p<0.05…正規分布に従うとは言えない
- p≧0.05…正規分布に従う
今回の結果は、p<0.05であり、帰無仮説が棄却され、正規分布に従うとはいえないということになります。
また、シャピロ・ウィルク検定は少ないサンプル数を前提に設計されているため、大量のデータでこの検定を実施しようとすると、
「サンプルの大きさは 3 と 5000 の間になければなりません」
というエラーメッセージが表示されます。
この場合は次に紹介するコルモゴロフ・スミルノフの検定を使いましょう。
コルモゴロフ・スミルノフの検定
サンプルサイズの大きいデータで正規性の検定を行う際にはコルモゴロフ・スミルノフ検定を使い、Rでは
ks.test(x=データ, y=”pnorm”)
と書きます。
yの部分は分布を指定しており、今回は正規性の検定なので正規分布を意味するpnormとしていますが、他にも下記のような確率分布を指定することができます。
yの値 | 確率分布 |
---|---|
pnorm | 正規分布 |
ppois | ポアソン分布 |
punif | 一様分布 |
シャピロ・ウィルク検定の時と同じようにirisデータで使用例を見てみましょう。
ks.test(iris$Petal.Length, “pnorm”)
と書きます。
1 2 3 4 5 6 7 8 9 10 11 12 |
ks.test(iris$Petal.Length, "pnorm") Asymptotic one-sample Kolmogorov-Smirnov test data: iris$Petal.Length D = 0.87653, p-value < 2.2e-16 alternative hypothesis: two-sided Warning message: In ks.test.default(iris$Petal.Length, "pnorm") : コルモゴロフ・スミノフ検定において、タイは現れるべきではありません |
p<0.05となっているので、正規分布とは言えないことになります。
結果の最後の部分に「タイは現れるべきではありません」というメッセージが表示されています。
これは同一データが含まれているときに表示され、p値が正確に計算できていない可能性があり、p値が0.05に近いときは判断が難しいかもしれません。
今回のように明らかにp値が0.05より小さいときはそれほど気にしなくてよいかと思います。
以上、正規性の検定の方法を2つ紹介しました。
コメント