見出し画像

t検定を掘り下げる~前編~

こんにちは、ゆるです。自己紹介を除いた初記事となりますが、その記念すべき記事は、t検定について触れたいと思います。t検定は生物学の研究者が何気なく使う仮説検定の一つですが、深く考えずにExcelなどの関数で判定するだけになってしまっている方が多いのではないのでしょうか?そこで統計学の観点から、t検定とはそもそも何か、どういう特徴があるのかについて触れていきたいと思います。この記事で「t検定について完全に理解した」という方は出ないと思いますが(なぜならゆる自身完全に理解しているとは言えないで…)、「なんか統計学に興味が湧いてきた」「t検定1つをとっても奥が深い」と思って頂けることを願って執筆しています。
本記事を作成する上で、以下の書籍を参考にしました。


t分布

t検定自体はよく使ったことある場合でもそのtが何のtか意識したことある方は多くないのではないでしょうか。t検定のtはt分布のtを指します。ここまでは「知ってるよ」「当たり前だ」という方も一定数いると思います。ではt分布とは何でしょうかと問われたら答えに詰まる方が多いのではないでしょうか。数理統計学の参考書などではt分布の導入において

標準正規分布に従う確率変数$${Z}$$と自由度$${p}$$の$${\chi^2}$$分布に従う確率変数$${W}$$があり、それら二つが独立であるとき、$${Z/\sqrt{W/p}}$$は自由度$${p}$$の$${t}$$分布に従う

と記述されます。この式は見慣れない人が多いと思います。なんなら、この式を見ただけでこの記事を閉じたくなる方もいるかもしれません。しかし、ゆる自身が過去にそうだった経験を活かし、可能な限りこのt検定を理解して頂くために以降では具体例とともに、なぜt検定の統計量がt分布に従うの掘り下げていきます。

1群の平均値の検定(分散既知)

t分布について掘り下げるといいつつこの章で最後出てくる検定統計量は標準正規分布に従います、すみません笑。しかし、皆さんがよく使う「2群のt検定(分散未知)」を考える上で「1群の分散既知の検定」を考えることは今後のイメージの上で重要です。ここで、「さっきから分散既知だの分散未知だのなんのことだ」と思っている方も多いと思います。現実に検定をかけるシチュエーションではデータが得られた際にその母集団分布の分散は不明なことが多いので、分散未知のまま仮説検定をかけます。一方で思考実験程度にはなってしまうかもしれませんが、以下のような仮説検定を行いたい場合を考えてください。

母集団分布が分散$${\sigma^2}$$と分かっている正規分布に従っているが、その平均が分からないとする。この時、その分布から得られた標本$${X_1, X_2, …, X_n }$$を用いて、母集団分布の平均が$${\mu}$$に等しいかを検定せよ。

【問題1】

少し一般化し過ぎたかもしれませんが、具体的に以下の場合はどうでしょうか。

A国の男性の身長は平均$${173\text{ cm}}$$であり、分散が$${25\text{ cm}^2}$$であるとする。ここで隣国B国の男性を$${6}$$人連れてきたところ、身長が$${182, 177, 171, 175, 180, 183\text{ cm}}$$であった。男性の身長が従う分布は国によらず分散$${25\text{ cm}^2}$$の正規分布であると仮定したとき、B国の男性の平均身長がA国と同じか否かを検定せよ。

【問題2】

その国によらず標準偏差が等しいという仮定本当か?というご意見はさておき、これで「分散既知の正規分布における1群の平均値の検定」となります。ここで、「いつもとは違う検定だからそもそもどうすればいいのかイメージが湧かない」という方も多いのではないでしょうか?仮説検定は基本的に以下の流れで構成することができます。

  1. 検証したい仮説をもとに帰無仮説$${H_0}$$と対立仮説$${H_1}$$を立てる。

  2. $${H_0}$$下において母集団分布から独立同一に得られた$${n}$$個の確率変数を$${X_1, X_2, …, X_n }$$としたとき、それらから検定統計量$${T(X_1, X_2, …, X_n)}$$を作成する。

  3. $${H_0}$$下において$${T(X_1, X_2, …, X_n)}$$が従う分布$${D}$$を導出する。

  4. $${T(X_1, X_2, …, X_n)}$$の確率変数に得られたデータの値を代入して得られた値を$${T}$$としたとき、分布$${D}$$において$${T}$$以上(or 以下)の値をとる確率$${p}$$がいわゆる$${p}$$値となり、有意水準と比較する。但し両側検定かつ分布$${D}$$が左右対称の場合は、その確率を$${2}$$倍した値が$${p}$$値となる(左右対称でない場合は$${p}$$値の算出方法に複数通りありますがここでは割愛します)。

この検定統計量$${T(X_1, X_2, …, X_n)}$$は実際のところ、そこまで大きな制限はなく、例えばデータとして$${X_1, X_2, …, X_n }$$が得られたとしても、$${X_1}$$のみを使用して$${T(X_1, X_2, …, X_n) =  X_1}$$としたって何ら問題ないです。
上の【問題2】を例にとった場合、帰無仮説$${H_0}$$は「B国の男性の平均身長$${=173\text{ cm}}$$」であり、対立仮説$${H_1}$$は「B国の男性の平均身長$${\not=173\text{ cm}}$$」となります。そして、$${H_0}$$下で$${T(X_1, X_2, …, X_n) =  X_1}$$が従う分布は「平均$${173}$$、分散$${25}$$の正規分布(以下、平均$${\mu}$$で分散$${\sigma^2}$$の正規分布を$${\mathcal{N}(\mu, \sigma^2)}$$と略記します)」となります。得られた標本のうち一つ目は$${182}$$ですので、$${\mathcal{N}(173, 25)}$$において、$${182}$$以上の値をとる確率を求めればそれが$${p}$$値となります(正確には両側検定なので、$${182}$$以上の値をとる確率の$${2}$$倍が$${p}$$値となります)。実際にpythonを使ってその$${p}$$値を求めてみましょう。以下のコードで確認が可能です。

#モジュールのインポート
import scipy.stats as sts
import math
#検定統計量
Tx = 182
#p値の計算(locが平均、scaleが標準偏差(分散の平方根))
p = (1-sts.norm(loc=173, scale=math.sqrt(25)).cdf(Tx))*2
print(p)

実行すると$${0.0718606…}$$と表示されるのではないでしょうか。これはつまり、【問題2】において$${X_1}$$を検定統計量とした場合$${p > 0.05}$$であり、有意水準$${5}$$%では帰無仮説$${H_0}$$は棄却されず有意にならないことを意味します。実際に得られたデータ$${182, 177, 171, 175, 180, 183}$$の平均値は$${178}$$であり、それよりも割と大きい値$${182}$$を使用しているのにもかかわらずこの検定では平均身長が$${173\text{ cm}}$$である帰無仮説を棄却できません。そのため、仮説検定を行う上ではある程度の妥当性を伴う検定統計量を構成することが重要です(この妥当性というのは検定の「検出力」という概念に関係するのですが、それは今後の記事で触れたいと思います)。
そこで仮説検定における妥当な検定統計量をシステマチックに構成する手段として尤度比検定統計量が挙げられます。実際に今回の分散既知の1群のt検定も分散未知の1群のt検定も、使用する検定統計量は尤度比検定から導かれる検定統計量と一致します。しかし、これもt検定の本筋から外れるので別記事での解説に回します(初記事なのでこればっかりですみません…)。
ここでは少々ふんわりした議論で検定統計量を構成してみます。1群の平均の検定を行うので、標本平均

$$
{\overline{X} = \frac{1}{n}\sum_{i=1}^n{X_i}}
$$

を検定統計量として用いるのが妥当なのは皆さんのイメージと違わないと思います。一般に、確率変数$${X_1, X_2, …, X_n}$$が独立同一に$${\mathcal{N}(\mu, \sigma^2)}$$に従うとき、標本平均$${\overline{X}}$$は$${\mathcal{N}(\mu, \sigma^2/n)}$$に従います。なので【問題2】の状況において、帰無仮説$${H_0}$$下で$${\overline{X}}$$が従う分布は$${\mathcal{N}(173, 25/6)}$$となります。ここで、データから得られる値を標本平均に代入すると$${\overline{X} = 178}$$となるので、$${\mathcal{N}(173, 25/6)}$$において$${178}$$以上の値をとる確率の倍が求める$${p}$$値となり、以下のコードで求められます。

#モジュールのインポート
import scipy.stats as sts
import math
#データ
X_list = [182, 177, 171, 175, 180, 183]
#検定統計量(標本平均)
Tx = sum(X_list)/len(X_list)
#p値の計算(locが平均、scaleが標準偏差(分散の平方根))
p = (1-sts.norm(loc=173, scale=math.sqrt(25/6)).cdf(Tx))*2
print(p)

実行すると$${0.0143058…}$$となり、$${p < 0.05}$$で$${H_0}$$が棄却され、有意差が認められます。このようにデータが得られたときに$${X_1}$$だけでなく、複数のデータを加味した$${\overline{X}}$$を用いることは、仮説検定において有意な結果を出すうえで有利に働くと言えます(但しこの性質を逆手にとって、検定で有意にならなかった際にデータを増やして再度検定をかけるのは仮説検定においてご法度です。これはもしかしたら生物系の研究においてしばしば黙認されてしまっていることかもしれませんが、サイエンスに向き合う上で決して許容されるべきことではありません。その理由は今後の記事で触れたいと思います。)。
今回、【問題2】で検定統計量に用いた標本平均

$$
{T(X_1, X_2, …, X_n) = \overline{X} = \frac{1}{n}\sum_{i=1}^n{X_i}}
$$

が$${\mathcal{N}(173, 25/6)}$$に従うことから$${p}$$値を算出しました。このままでも全く問題ないのですが、一般に分布$${D}$$の方をより単純な形、つまり標準正規分布$${\mathcal{N}(0, 1)}$$になるように検定統計量を変形することで、より一般性のある形で表現することができます。ここで、正規分布に従う確率変数の性質を用いることで簡単に$${\mathcal{N}(0, 1)}$$に従う検定統計量を導出できます。確率変数$${X}$$が$${\mathcal{N}(\mu, \sigma^2)}$$に従うとき、その線形変換$${aX+b}$$が従う分布は$${\mathcal{N}(a\mu+b, a^2\sigma^2)}$$となります。ここで、【問題1】において帰無仮説$${H_0}$$下で標本$${X_1, X_2, …, X_n }$$が従う分布は$${\mathcal{N}(\mu, \sigma^2)}$$であり、標本平均$${\overline{X}}$$が従う分布は$${\mathcal{N}(\mu, \sigma^2/n)}$$となるため、

$$
{T(X_1, X_2, …, X_n) = \frac{\overline{X}-\mu}{\sqrt{\frac{\sigma^2}{n}}}}
$$

とすれば、$${T(X_1, X_2, …, X_n)}$$が$${\mathcal{N}(0, 1)}$$に従います。【問題2】の具体例に適用してみましょう。

$$
{T(X_1, X_2, …, X_n) = \frac{178-173}{\sqrt{\frac{25}{6}}}}
$$

となるので、以下のコードで$${p}$$値を求めることが可能になります。

#モジュールのインポート
import scipy.stats as sts
import math
#データ
X_list = [182, 177, 171, 175, 180, 183]
#検定統計量
X_mean = sum(X_list)/len(X_list)
mu = 173
sigma2 = 25
n = 6
Tx = (X_mean-mu)/math.sqrt(sigma2/n)
#p値の計算
p = (1-sts.norm(loc=0, scale=math.sqrt(1)).cdf(Tx))*2
print(p)

実行すると$${0.0143058…}$$となり、$${\overline{X}}$$を検定統計量に用いた時と同様の結果になりました。このようにして「分散既知の正規分布における1群の平均値の検定」を構成することができます。【問題1】の一般性を持った表記でまとめてみましょう。

母集団分布が分散$${\sigma^2}$$と分かっている正規分布に従っているが、その平均が分からないとする。この時、その分布から得られた標本$${X_1, X_2, …, X_n }$$を用いて、母集団分布の平均が$${\mu}$$に等しいかを検定せよ。

【問題1】

という問いに対しては、

検定統計量を$${T(X_1, X_2, …, X_n) = (\overline{X}-\mu)/{\sqrt{\sigma^2/n}}}$$とし、$${\mathcal{N}(0, 1)}$$において$${T}$$以上($${T}$$が負となった場合は「以下」)の値をとる確率の倍の値を$${p}$$値として有意判定をする。

というのが妥当性のある答えとなります。今回は、最終的に検定統計量$${T(X_1, X_2, …, X_n)}$$が従う分布として標準正規分布$${\mathcal{N}(0, 1)}$$を用いました。この$${\mathcal{N}(0, 1)}$$はZ分布と称されることがあり、今回行った検定はZ検定と呼べます。それではよく使うt検定とZ検定の違いは何でしょうか。それは母集団分布の分散が既知か未知かの違いと言えます。Z検定で使用した検定統計量

$$
{T(X_1, X_2, …, X_n) = \frac{\overline{X}-\mu}{\sqrt{\frac{\sigma^2}{n}}}}
$$

には$${\sigma^2}$$という既知の値が含まれますが、これが分散未知の場合変える必要があります。おそらく

$$
{T(X_1, X_2, …, X_n) = \frac{\overline{X}-\mu}{\sqrt{\frac{?}{n}}}}
$$

という何となくのイメージを持たれる方が多いのではないでしょうか。この「?」は分散の推定量に相当するのですが、分散の推定量を「?」に代入すると$${T(X_1, X_2, …, X_n)}$$がt分布に従うようになるのです!このまま続きを書きたいところですが、本記事も長くなってしまったので、3編程度に分けて記載したいと思います。ここまで読んでくださりありがとうございました!

(2023/07/23 追記)中編は以下になります!

【更新履歴】
2023/07/17 初稿
2023/07/23 中編へのリンク追加

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