【非等分散編】pythonでWelchのt検定をやってみた

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

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

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

Welchのt検定

ウェルチのt検定は、二標本間の母分散が異なる場合に行う検定方法です。

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

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



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

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

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

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

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

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

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

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

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

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])

そんなにデータ量が多い訳ではないので、csvにしていません。

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

等分散かどうかの検定(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‥となります。

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

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

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

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

-Udemy-のご紹介

データサイエンスやプログラミングに興味がある方におすすめなのが、Udemyと呼ばれる世界最大級のオンライン学習プラットフォームです。

Udemyは、世界中の学びたい人と教えたい人をオンラインでつなぐサービスです。

つまり、講師は企業ではなく、一般のエンジニアやデータサイエンティスト、デザイナーです。

講座カテゴリー

  • Pythonなど、機械学習プログラミング言語
  • Javaなど、Webアプリケーション言語
  • Webデザイン(HTML&CSS/JavaScript)
  • Excel
  • マーケティング

特に最近ではAI・データサイエンスなど先端ITの講座が人気を博しております。気になる方は以下のボタンからご覧ください。

ジャンルが豊富で学びたい講座がきっとみつかる

受講者数講師数講座数
4,000万人70,000人約18.5万
2021年3月時点(Udemy)

世界中にサービスを展開しているため、サービスの規模は非常に大きいです。

AI・データサイエンスなど最先端のIT技術からプレゼンなどビジネススキルに関する講座まで 18.5万以上(※海外講座含む)あるため、自分が学びたい講座をみつけることができます。

きっとピッタリな講座が見つかるでしょう!

講座は、PC一台があればカフェでも学校でも職場でも受講することができます。

また倍速対応ができ、0.5〜2倍の変速機能で自分のペースで受講が可能です。

お手頃な価格帯

講座により、価格は大きく変わりますが、数千円台のものも多く、手を出しやすいです。

講座は一度購入すれば視聴期限なく受講でき、30日返金保証もついているので安心して始めることができます

こんな方におすすめ!

  • Webデザイナーになって、自由な生活を手に入れたい方。
  • プログラマーになって、本業以外の副収入を得たい方。
  • 自学自習じゃなかなか続かない方。
  • 資格習得や、スキルの向上により、今の年収をupさせたい方。

具体的には、以下のようなコースがあります。きっと良い講師に出会えるはずです。

FOLLOW ME !

PAGE TOP