見出し画像

パラメトリック検定 vs ノンパラメトリック検定~中編~

こんにちは、ゆるです。パラメトリック検定 vs ノンパラメトリック検定の中編ということでいよいよノンパラメトリック検定が登場します。中編の理解には前編の内容が必要になるので、まだ読んでない方は前編から読んで頂けると嬉しいです!

今回の記事では以下の書籍を参考にしました。


前編のおさらい

前編で扱った中でも重要な項目に再度触れます。
仮説検定において、$${p<0.05}$$といったように有意となる閾値を設定すると思いますが、その意義を考察する上では第1種の過誤について考えなければなりませんでした。

第1種の過誤とは帰無仮説が正しいにも関わらず、帰無仮説を棄却してしまうことであり、その過誤が起こる確率を慣例的に$${\alpha}$$と表す。

【定義1】

仮説検定においては「$${p<0.05}$$を有意の閾値とする」と決めた時点で、「この検定の第1種の過誤率は$${0.05}$$未満である」ことを保証しなければいけない。

【前提1】

分散が等しい$${2}$$つの正規分布について平均の差の検定を行う場合、$${Student}$$の$${t}$$検定を行うと実際に第1種の過誤率が$${0.05}$$に収まりそうなことをシミュレーションで確認しました。また、分散が等しくない正規分布について$${Student}$$の$${t}$$検定を行うと、$${p<0.05}$$という基準にもかかわらず第1種の過誤率が$${0.05}$$より大きくなる(=前提1に反する)こと、そしてその際には代わりに$${Welch}$$の$${t}$$検定を行うと第1種の過誤率が$${0.05}$$に近づき、多少「マシ」な検定になることを確認しました。

「ここでいう$${Student}$$の$${t}$$検定の代わりに$${Welch}$$の$${t}$$検定を行う」というのは、等分散性の仮定ができないときに「$${Student}$$の$${t}$$検定と$${Welch}$$の$${t}$$検定の両方を試す」ということを表しているわけではありません。むしろ、そういった仮説検定を複数回試行錯誤して後決めするのは御法度です(詳細は以下の記事を参照)。一方で正規分布に従いそうだなと思いつつも等分散性の仮定を置けるかわからない場合は最初から$${Welch}$$の$${t}$$を行っておけば安心というスタンスであれば良いと思います。

ノンパラメトリック検定

さて、ようやく表題の内容に切り込んでいけます。前編までは正規分布の仮定のもと、等分散性が成り立つか否かで検定を選んでいました。$${t}$$検定を行う上で母集団分布の正規分布の仮定が必要な理由は、「母集団分布の正規性」が「$${t}$$検定の際に用いる$${t}$$統計量が$${t}$$分布に従う」ための条件であるためです(詳細は以下の記事を参照)。

こういったように母集団分布に何かしら仮定して行う検定をパラメトリック検定と言います。仮定した分布というのは何かしらのパラメーター(正規分布で言うと平均と分散)を持っているので、パラメトリックと呼ばれます。パラメトリックというと正規分布のみを指すニュアンスで使用されることもありますが、より正確には分布(二項分布、ポアソン分布など)の仮定を持った検定を行うのあればそれは全てパラメトリックになります。分布を仮定できるということはその形状を特徴づけるパラメータが存在し、その「パラメータの存在」こそが「パラメトリック」の名前の由来であるためです。
一方で、ノンパラメトリック検定という言葉を聞いたことがある方も多いと思います。これは検定を行う際に母集団分布の形について仮定を置かない検定になります。では分布を仮定せずにどのような検定をおこなうのでしょうか?答えは両群から得られたすべての標本を昇順に並べ、その並び方の場合の数からどの程度稀な現象かを検定します

正規分布以外の分布に対してStudentのt検定を行う場合

基本的に母集団分布はどんな形でもいいですが、例えば連続一様分布の場合を考えてみましょう。一例として$${-1{\leq}x{\leq}1}$$の範囲における連続一様分布を考えるとその確率密度関数は$${f(x)=1/2}$$となります。乱数を生成すると以下のようなヒストグラムとなりますが、標準正規分布と重ねると形が大きく異なるとわかります。

標準正規分布(青)と連続一様分布(橙)から生成された乱数のヒストグラム

このプロットは以下のコードで生成可能です(乱数のためヒストグラムの形は多少変化します)。

import numpy as np
import matplotlib.pyplot as plt

#正規分布と連続一様分布に従う乱数を生成
X = np.random.normal(loc=0, scale=1, size=10000)
Y = np.random.uniform(low=-1, high=1, size=10000)

#それぞれの密度分布をヒストグラムとして重ねて表示
plt.hist(X, density=True, bins=20,alpha=0.7)
plt.hist(Y, density=True, bins=20, alpha=0.7)
plt.show()

今回は一様分布であると予め分かっており、その形を規定する$${x}$$の定義域$${a{\leq}x{\leq}b}$$のパラメータ$${a,b}$$を使用してパラメトリック検定を構成することもできるかもしれません。ただし、今回は母集団分布は正体不明の分布として扱いパラメータの推定などもできないとします。

さて前置きが長くなりましたが、連続一様分布に従う二つの分布に対して$${2}$$群の母集団分布が等しいか否かの検定を行う際に$${Student}$$の$${t}$$検定を行ってみましょう!以下のコードで第1種の過誤率がどの程度かをシミュレーションすることができます。

import numpy as np
import scipy.stats as sts

#有意になった回数を記録する変数
significant = 0

for i in range(100000):
    
    #XとYについてn=6ずつ抽出
    X = np.random.uniform(low=-1, high=1, size=6)
    Y = np.random.uniform(low=-1, high=1, size=6)
    
    #Studentのt検定の結果を格納
    p = sts.ttest_ind(X, Y, equal_var=True).pvalue
    
    #有意になった場合significantに1を足す
    if p<0.05:
        significant += 1
    else:
        pass

#第1種の過誤を犯した割合
alpha = significant/100000
print(alpha)

ゆるが実行した際には、第1種の過誤率が$${0.0534}$$となりました。何回か実行してみても$${0.05}$$より微かに大きな値を示しているのではないでしょうか。以上より、一様分布に対して$${Student}$$の$${t}$$検定を行うと第1種の過誤率が意図した通りに保たれておらず理想的な検定ではないことが分かります。

こういったときに分布の形状によらず第1種の過誤率を保ちやすい検定として$${Wilcoxon}$$の順位和検定が知られています

【コラム】
今回、一様分布に対して$${t}$$検定を行いましたが、第1種の過誤率が$${0.05}$$に抑えられていない一方で、「$${0.05}$$を少し超えた程度で割と第1種の過誤率を抑えられているのではないか」と感じる方もいたのではないでしょうか?実際、$${t}$$検定は正規分布をもとにして構築された検定であるものの、分布の形に対して比較的ロバストな検定であることが一般的に知られています。母集団分布の形を理解して検定を行うことは非常に重要ですが、正規性については明らかに従わない場合を除き、実務上は気にし過ぎる必要はないというスタンスもあります。

Wilcoxonの順位和検定

$${Wilcoxon}$$の順位和検定、または$${Mann\text-Whitney}$$の$${U}$$検定は$${2}$$群の標本全ての標本を昇順に並べて、各群における順位の合計を計算し、その順位和がどの程度起こりづらい事象かを見るという形式の仮説検定になります。標本の値の順番のみを使用するので母集団分布の形は問いません。
今から行う検定は「$${Wilcoxon}$$の順位和検定」「$${Mann\text-Whitney}$$の$${U}$$検定」の二通りの名称がついています。厳密にはこれら二つの検定は、順位を検定統計量に反映する方法が異なっているのですが、実質同値な検定を構成することができます。

先ほどと同様に一様分布に対して$${Mann\text-Whitney}$$の$${U}$$検定を行ってみましょう!以下のコードで実行可能です。

import numpy as np
import scipy.stats as sts

#有意になった回数を記録する変数
significant = 0

for i in range(100000):
    
    #XとYについてn=6ずつ抽出
    X = np.random.uniform(low=-1, high=1, size=6)
    Y = np.random.uniform(low=-1, high=1, size=6)
    
    #Mann-WhitneyのU検定の結果を格納
    p = sts.mannwhitneyu(X, Y, method="exact").pvalue
    
    #有意になった場合significantに1を足す
    if p<0.05:
        significant += 1
    else:
        pass

#第1種の過誤を犯した割合
alpha = significant/100000
print(alpha)

ゆるが実行した際には$${0.04141}$$となりました!先ほどの$${t}$$検定の場合とは異なり、第1種の過誤率が抑えられたと言えます。
以上より、$${Student}$$の$${t}$$検定は母集団分布が正規分布に従う場合のみ第1種の過誤率を適切にコントロールできそうであるということが分かりました。
今回は一様分布に対して$${t}$$検定を行い第1種の過誤率が$${0.05}$$を上回ってしまう事例を紹介しました。一方で正規分布以外の分布に対して$${t}$$検定を個なった場合に、第1種の過誤率が大きくなりすぎる場合だけでなく、逆に小さくなりすぎてしまう場合もあります。例えば指数分布に対してはパラメータ次第では$${t}$$検定を行った際に第1種の過誤率が$${0.05}$$を下回ります。こういった場合は、検定の枠組み上は問題ないことをしているのですが、逆に検定の検出力も大きく低下している場合が多く、理想的な検定とは言えません。
中編の最後から後編にかけては「パラメトリック検定 vs ノンパラメトリック検定」の本質となる「結局どの場合にどの検定を使用すればいいのか」という部分に触れたいと思います。

検出力

検定手法を選ぶ際には以下の方針で行うことが重要になります。

有意水準$${\alpha}$$とした場合に、第1種の過誤率が$${\alpha}$$を超えない範囲で検出力がなるべく大きくなるような検定を選ぶ

【方針1】

ここで先ほどから何回か新しい言葉「検出力」が出てきました。検出力の定義は以下になります。

仮説検定において、対立仮説が正しい時に帰無仮説を受容してしまうことを第2種の過誤と呼び、第2種の過誤を起こす確率を慣例的に$${\beta}$$と表す。この時$${1-\beta}$$を検出力と呼ぶ。つまり検出力とは「仮説検定において、対立仮説が正しい時に帰無仮説を棄却する確率」のことである。

【定義2】

以上の概念がなぜ重要かというと、例えばこれまでのような第1種の過誤率の議論だけからだと、「分布の仮定しなくていいノンパラメトリック検定を毎回使用すれば少なくとも第1種の過誤率を抑えられるから問題ないのではないか。そうすれば難しいことを考えなくてもいいのではないか。」という結論になってしまうためです。一方で仮説検定による意思決定は、サイエンスやビジネスにおいて、クリティカルな選択になることも珍しくありません。そういった場面で検出力を軽視すると、実験リソースの無駄使いにつながる事態を招きます。
後編ではこの検出力にフォーカスして結局どの検定を使うべきなのかについて触れていきたいと思います。

おわりに

ここまで読んでくださった方々、ありがとうございました!前編から見て頂いている方は「ようやくノンパラの検定が出てきた」とか、「これでまだ中編か」と思われる方もいるかもしれませんが、最後までお付き合いいただけけると嬉しいです!それではまた!

【更新履歴】
2024/03/24 初稿投稿

この記事が気に入ったらサポートをしてみませんか?