【非等分散編】pythonでWelch(ウェルチ)のt検定をやってみた

2標本問題において、標本間の母分散が等しいという等分散の仮定は、限られた場でしか信憑性がありません。

今回は、標本間の母分散が異なるときに使えるWelchのt検定を学びましょう。

等分散の仮定を置いた2標本問題の方が簡単なので、まずはそちらを学びたい方は【等分散の仮定】2標本問題ってなんだ?をご覧ください。

統計検定のチートシートは以下をクリック!

【最短合格】統計検定準一級のチートシート|難易度や出題範囲について

【第2弾】統計検定準1級のチートシート|最短合格への道

【やや細かい】G検定のチートシート|最短合格

【最短】統計検定2級合格ロードマップとチートシート|おすすめの本について

Welch(ウェルチ)のt検定

ウェルチのt検定は、2標本間の母分散が異なる場合にの統計的手法です。

t検定と同様の検定方法ですが、ウェルチのt検定は、分散が異なる場合にも有効に使用することができます。

この検定法は、母集団の分布が正規分布に従う場合に使用されます。

ウェルチのt検定は、標本サイズが大きくなるほど、より信頼性が高くなるとされています。

以下検定統計量の定義です。

$$T={\frac{\overline{X}_A-\overline{X}_B}{\sqrt{{\frac{V_{A}^2}{N_{A}}-\frac{V_{B}^2}{N_{B}}}}}}$$

母集団Aと母集団Bの母平均が等しいと仮定する時、上の検定統計量は自由度vのt分布に近似的に従います。



分子:母集団AとBの標本平均の差
分母:不偏分散をサンプルサイズで割った値の和の平方

自由度vは以下の数式に各値を代入した時に、最も近い整数になります。

覚える必要はありません。計算ソフトなどで自動で計算してくれます。

$$\frac{({\frac{V_{A}^2}{N_{A}}+{\frac{V_{B}^2}{N_{B}}}})^2}{\frac{(\frac{V_{A}^2}{N_A})^2}{N_{A}^{-1}}+\frac{(\frac{V_{B}^2}{N_B})^2}{N_{B}^{-1}}}$$

しつこいですが、Welchのt検定は、「2つの母分散が等しくないといえる」場合に使うことができます。

つまり、母分散が等しいか等しくないかわからないときは、「母分散が等しいかどうかの検定」を前段階で行う必要があります。

しかし、検定を複数回行う時点で「検定の多重性」という問題が生じます。

簡潔に説明すると、「少なくとも一つの検定が有意になる」確率が上がってしまうことになるので、検定を複数回行うと帰無仮説を棄却しやすく、つまり有意な結果が生まれやすいことになります。

詳しくは、【統計検定準一級】分散分析による検定の多重性についてをご覧ください。

なぜ分散が違う場合でも2つの集合を比較できるのか

ウェルチのt検定は、分散が異なる場合にも使用できるように改良されたt検定です。

従来のt検定は、分散が等しい場合にのみ適用されますが、分散が異なる場合には誤った結果を導くことがあります。

ウェルチのt検定は、t値を求める前に、分散を調整することで分散が異なる場合でも正確な検定結果を得ることができます。

分散が等しい場合と異なる場合の2つの場合について、それぞれのt値を求め、自由度を調整してから、t値を比較します。

このようにして、分散が等しくない場合でも、正確な検定結果を得ることができます。

では、理論はこのくらいにしておいて実際にpythonでやってみましょう。

CODE|python

今回は以下のような具体例を扱います。

血圧を下げる新しい薬の効果を調べたいです。

10人の被験者に血圧を下げるとされる新薬を投与し、10人には偽薬を与えました。

今回は、血圧の最大値を比べてみます。


処置群Aの血圧は以下の通りです。
A[110.1,112.0,120.9,122.0,111.1,115.9,125.2,129.6,119.7,107.5]

コントロール群Bの血圧は以下の通りです。
B[128.1,123.2,118.3,130.8,123.9,109.4,127.0,139.1,139.6,140.2]


果たして、新薬には血圧を下げる効果があるといえるでしょうか。
等分散の仮定が成り立つかどうかを検定した後で、

等分散の仮定が成り立つ:t検定
等分散の仮定が成り立たない:Welchのt検定

を使ってください。

有意水準5%で、その平均の差が有意か調べたいです。
import numpy as np
from scipy import stats
#データの読み込み
A = np.array([110.1,112.0,120.9,122.0,111.1,115.9,125.2,129.6,119.7,107.5])
B = np.array([128.1,123.2,118.3,130.8,123.9,109.4,127.0,139.1,139.6,140.2])

まず、必要なライブラリをインポートします。

リスト型で読み込みます。

等分散かどうかの検定(F検定)

welchのt検定を使うかどうかを調べるために、一旦検定を行います。

#まずは不偏分散を作ります。
A_var = np.var(A, ddof=1)
B_var = np.var(B, ddof=1)  

#自由度の算出
A_df = len(A) - 1
B_df = len(B) - 1

#F比
f = A_var / B_var


#片側検定のp値をそれぞれ調べる
one_sided_pval1 = stats.f.cdf(f, A_df, B_df)
one_sided_pval2 = stats.f.sf(f, A_df, B_df) 

#両側検定のp値は、片側検定のp値の小さい方を採用して2をかける
two_sided_pval = min(one_sided_pval1, one_sided_pval2) * 2

#出力用のフォーマット
print('F:       ', round(f, 3))
print('p-value: ', round(two_sided_pval, 4))
F:        0.526
p-value:  0.3523

上のような結果が出ました。

有意水準は95%なので、p値<0.5より有意といえます。

つまり、「等分散の仮定は成り立つという帰無仮説が棄却された」ということにはなります。

では、welchのt検定を使って新薬に効果があるのかを調べます。

stats.ttest_ind(A, B, equal_var=False)

welchのt検定はなんと上の1行で終わります。F検定の方が大変ですね。

equal_var=False は等分散の仮定が成り立たないという意味です。

Ttest_indResult(statistic=-2.7104419626511276, pvalue=0.015183557777410362)

出力結果としては、p値は0.0151‥となります。

ここで、検定の多重性を考えた時に、一番有意差が出るのが難しい「ボンフェローニの補正」を行います。

$$\frac{有意水準}{検定回数}={\frac{5}{2}}$$

有意水準5%で検定をやろうとしていたので、検定回数で割った値が補正した(検定の多重性を考慮した)有意水準になります。

有意水準2.5%でも 実際のp値 0.0152 < 0.25なので問題ありません。

よって、「新薬には効果がない」という帰無仮説は棄却されます。有意差ありです。

p値に関しては以下のコンテンツで学習ができます。

t分布とカイ二乗分布の関係

さて、今回登場したt分布ですが、カイ二乗分布と関係があります。

カイ二乗分布といえば、下の画像の通り標準正規分布に従う確率変数Zの平方和が従う確率分布です。

ただし自由度はZのサンプルサイズです。

$$Z_{1},…,Z_{n}~N(0,1),Z_{1}^2,+…+Z_{n}^2~χ^2(d)$$

そして、Zの平方和をWとした時、自由度でWを割り、根号をとったものを分母、Zを分子にとったものが、自由度dのt分布に従います。

$${\frac{Z}{\sqrt{z_{\frac{W}{d}}}}}〜t(d)$$

t分布についてもう少し詳しく

ここではt分布の成り立ちをご紹介します。

まず\(u\)を標準正規分布に従う確率変数\(u〜N(0,1)\)とし、\(v\)を自由度\(m\)のカイ二乗分布に従う確率変数\(v〜χ^2(m)\)とします。

この時、確率変数\(t=\frac{u}{\frac{v}{m}}\)は区間\((-∞,∞)\)において、t分布に従います。

以下が確率密度関数になります。

$$f(t) = \frac{\Gamma\left(\frac{m+1}{2}\right)}{\sqrt{m\pi}\,\Gamma\left(\frac{m}{2}\right)} \left(1+\frac{t^2}{m}\right)^{-\frac{m+1}{2}}$$

証明は省きますが、標準正規分布に従う確率変数とカイ二乗分布に従う確率変数の同時確率密度を計算して、上の変数変換を行い、\(t\)に関する周辺分布をとると上の密度関数が出てきます。

正規分布よりも裾が少し広い分布になり、分散未知の場合の母平均の区間推定に使うことができます。

ビジネスの分野でどう使うのか

1商品開発

ウェルチのt検定を使用して、2つの商品の満足度を比較することができます。

例えば、A商品とB商品を比較して、顧客満足度の平均値に有意な差がある場合、どちらの商品がより需要が高いかを判断することができます。

2マーケティング

マーケティングキャンペーンの効果を評価するために、ウェルチのt検定を使用することができます。

例えば、2つの広告を比較して、クリック率やコンバージョン率に有意な差がある場合、どちらの広告がより効果的かを判断することができます。

3人事評価

ウェルチのt検定を使用して、2つの部署の平均的な業績を比較することができます。

例えば、2つの部署を比較して、業績に有意な差がある場合、どちらの部署がより優秀であるかを判断することができます。

4購買行動の分析

ウェルチのt検定を使用して、異なる時間帯における購買行動の違いを分析することができます。

例えば、平日と週末の購買金額を比較して、有意な差がある場合、どの時間帯が需要が高いかを判断することができます。

以上のように、ウェルチのt検定は、ビジネスにおいて様々な分野で活用されています。

ただし、正しい解釈をするためには、データの収集や分析に十分な時間をかけることが重要です。

まとめ

ウェルチのt検定は、分散が異なる2つのグループの平均値の差を比較する統計検定方法です。

分散が異なる場合でも使用できるため、従来のt検定よりも広い範囲で使用されています。

ウェルチのt検定の最大のデメリットは、計算が複雑であることです。

標本サイズが小さい場合には、他の方法を使用した方が効率的です。

また、正規分布に従わないデータには適用できないため、データが正規分布に従うかどうかを確認する必要があります。

さらに、分散が等しい場合には、従来の等分散を仮定したt検定の方が優れていることがあります。

とはいえ、基本的にはWelchの検定でよいと思います。

というのも、母分散は基本未知だし、標本データの情報だけからでは、母分散が等しいかどうかを判断することはできません。

母分散の検定を行なってから、t検定を行うと多重検定の問題が発生して、問題がややこしくなります。

仮に母分散が等しくないのに、等分散の検定を用いた場合、第一種の過誤の確率が非常に大きくなってしまいますが、母分散が等しいのにwelchの検定を行っても、第二種の過誤がわずかに大きくなるだけです。

なので、welchの検定をおこなっておけば大抵OKです。

FOLLOW ME !