どうも、ツシマです。
私による記念すべき第2回目の統計記事は、「t検定」についてです。
国家試験や卒論を控えている看護学生の皆さんも、統計の知識を忘却の彼方に置いてきてしまった皆さんも、ここで一緒に学びましょう!!
A地区とB地区、何かが違う…?
「A地区の住民、なんか血圧高すぎじゃね?」
あなたは、A地区とB地区の住民の健診結果を見ていました。
B地区は平均127mmHg、でもA地区は134mmHg。
「えっ、7mmHgも違うやんけ!これは健康格差では…?」
……ちょっと待った!!!それは本当に意味のある差なんでしょうか?
たまたま違って見えるだけかもしれないし、
実は大きな地域差かもしれない。
そんなときに登場するのが、t検定です。
t検定ってなに?
t検定は、2つのグループの平均値の差に“意味があるか”を調べる統計手法です。
つまり、差が「偶然」か、「本物」なのかを調べることができます。
たとえば…
- 健康指導の前後で体重は本当に減ったのか?
- A地区とB地区で血糖値の平均に差はあるか?
- 男性と女性で運動時間に違いはあるか?
など、「2つのグループを比べたい!」という場面で大活躍します。
このように、保健師がt検定が使える場面はたくさんあります。
t検定って2種類あんねん
実はt検定は2種類存在するのです。
- Studentのt検定
- Welchのt検定
どちらも2つのグループを比較するという点では同じですが、前提条件が異なります。
Studentのt検定
「2つのグループは、データのばらつきも同じ」という前提で2つのグループを比較します。
簡単にいうと、理想主義者タイプです。
「分散(ばらつき)が同じ」という前提なので、
- 人数が同じ
- バラつきも似ている
というきれいな条件下では、問題なく使えます。
Welchのt検定
「2つのグループのばらつきが違っていても、それぞれきちんと考慮するよ」という検定です。
Studentのt検定とは反対に、現実主義者タイプです。
- グループごとの人数がバラバラ
- バラつきが全然違う
そうです、保健師の現場では、Welchのt検定の方が適していることが多いと考えられます。
なぜ保健師が使うならWelchのt検定が良いの?
現場でありがちなケースとしては、
- 女性30人・男性8人
- 65歳未満10人・高齢者20人
- そもそもばらつきがどうなってんのか想像できねーよ
このような状況では、理想主義者のStudentのt検定は向かないのです。
だからこそ、Welchのt検定が役立ちます。
t検定の比較
- Studentのt検定
分散が同じと仮定。
サンプル数・バラつきが似ている時に有効
- Welchのt検定
分散が異なってもOK。
人数やばらつきが不均等な、現場の実データに向いている。
実際にやってみた
架空のデータを使ってt検定をやってみます。
Studentのt検定
調査対象のA地区とB地区の人達の人数が同じだったとします。
| 地区 | 収縮期血圧 |
| A | 125 |
| A | 127 |
| A | 123 |
| A | 124 |
| A | 126 |
| A | 128 |
| A | 122 |
| A | 129 |
| A | 127 |
| A | 125 |
| A | 126 |
| A | 124 |
| B | 124 |
| B | 126 |
| B | 122 |
| B | 127 |
| B | 125 |
| B | 128 |
| B | 123 |
| B | 126 |
| B | 125 |
| B | 127 |
| B | 124 |
| B | 126 |
こんなに単純なデータは滅多にありませんが、今回はt検定の説明のためなので多めにみてください。
そして、Excelの「データ」タブ→「データ分析」機能を使ってStudentのt検定をやった結果がこちら。
| t-検定: 等分散を仮定した2標本による検定 | ||
| 変数 1(A地区) | 変数 2(B地区) | |
| 平均 | 125.5 | 125.25 |
| 分散 | 4.27272727 | 3.11363636 |
| 観測数 | 12 | 12 |
| プールされた分散 | 3.69318182 | |
| 仮説平均との差異 | 0 | |
| 自由度 | 22 | |
| t (t値) | 0.318651 | |
| P(T<=t) 片側 | 0.37649834 | |
| t 境界値 片側 | 1.71714437 | |
| P(T<=t) 両側(p値) | 0.75299667 | |
| t 境界値 両側(両側t境界値) | 2.07387307 | |
ナニソレイミワカンナイですね。
順を追って解説します。
- 平均
ぱっと見でも、A地区とB地区ではほとんど差がありませんね。
- 分散
これも似たり寄ったり。
- 観測数
12人ずつ。バランスが良いですね。だからこそStudentのt検定を使ってみたのですが。
- プールされた分散
A地区・B地区の2つのグループの分散を合体させたものです。
- 自由度
自由度をざっくり言うと、「データの中で自由に動ける数」=「ある条件を満たしつつ、“自由に決められるデータの数”」のことです。
統計の計算で使える情報の量だと思ってください。
今回のStudentのt検定では、
自由度=地域Aの人数+地域Bの人数-2
今回のケースでは、
A地区:12人、B地区:12人
→ 自由度 = 12 + 12 − 2 = 22
これは「2グループからそれぞれ平均を計算したため、2つの制約1があるから−2」です。
自由度が大きいほど、正規分布に近づき、安定した「信頼できる検定」になります。
- t値
t値は、2つのグループの平均の差が、バラつきに比べてどれくらい大きいかを示す指標です。
つまり、「この差、バラつきを考えてもちゃんと大きいと言えるの?」ということを数値で示してくれます。
t = (平均A − 平均B) ÷ 差の標準誤差(ばらつき+人数で決まる)
平均の差が大きいほどt値が大きく、バラつきが大きいほどt値が小さくなります。
t値の判断基準としては、
t値が両側境界値(後述)より大きければ→有意差あり(p値が小さい)
t値がその範囲であれば→有意差なし(p値が大きい)
- p値(両側2)
p値は簡単に言えば、「本当は差がないはずなのに、こんなに差があるとは…偶然にしてはできすぎじゃね?」ということを数字で表したものです。
一般に「有意水準(α)3」は0.05(5%)です。
今回の場合は、p値は0.753だったため、「今回の検定では有意差がみられなかった」とみなします。
ちなみによく間違えられがちですが、
❌p値が小さい=差が大きい → p値は差の大きさではなく信頼性を示します
❌p値が大きい=差がない →差があるとは言えなかっただけ
❌p値だけ見ればOK →統計的有意とは臨床的な意味があるとは限りません
恥ずかしながら私もつい最近まで誤解してました。これを機に統計つよつよ保健師になっちゃいましょう。
- 両側t境界値
両側t境界値は、「t値がこの数値より大きい(小さい)と、有意な差があるとみなしてOK!」というボーダーラインです。
今回は、
t値 = 0.318
両側t境界値 = ±2.074
p値 = 0.753
今回の t値(0.318)はその範囲内なので、
→「差は有意ではない(偶然の範囲内)」と判断されます。
Welchのt検定
お待たせしました。次はWelchのt検定をやってみます。
Welchのt検定とは、グループごとの人数がバラバラで、バラつきの差が大きいデータに使うんでしたね。
お次に使うデータはこちらです。
| 地区 | 収縮期血圧 |
| A | 125 |
| A | 128 |
| A | 122 |
| A | 130 |
| A | 126 |
| A | 129 |
| A | 127 |
| A | 124 |
| A | 123 |
| A | 125 |
| A | 128 |
| A | 127 |
| A | 126 |
| A | 124 |
| A | 129 |
| B | 132 |
| B | 145 |
| B | 120 |
| B | 138 |
| B | 150 |
| B | 142 |
| B | 135 |
| B | 149 |
| B | 140 |
そして、Welchのt検定の結果がこちら。
| t-検定: 分散が等しくないと仮定した2標本による検定 | ||
| 変数 1(A地区) | 変数 2(B地区) | |
| 平均 | 126.2 | 139 |
| 分散 | 5.6 | 86.75 |
| 観測数 | 15 | 9 |
| 仮説平均との差異 | 0 | |
| 自由度 | 9 | |
| t | -4.0452441 | |
| P(T<=t) 片側 | 0.00145281 | |
| t 境界値 片側 | 1.83311293 | |
| P(T<=t) 両側 | 0.00290561 | |
| t 境界値 両側 | 2.26215716 | |
もう一度結果を見ていきましょう。
- 平均
A地区は穏やかなのに対し、B地区はなかなかパンチが効いていますね。
- 分散
B地区は分散がでかくて個性豊かすぎですね。
- 観測数
A地区が15人に対し、B地区は9人。B地区の人にはもう少し健診に来てもらいたいですね。
- t値
t値が-4.05で両側t境界値が±2.262。t値が両側t境界値を飛び越えています。
この差は偶然では済まされません…!
- 自由度
Studentのt検定とは異なり、人数も分散もバラバラなので自由度は自動で計算されます。
- p値(両側)
今回は0.0029…有意水準(0.05)を下回っているので、この差は有意と考えられます。
まとめ
t検定は難しそうですが、実態は「2つの平均を比べるだけ」です。
味方につければ強力です。
これから楽しいt検定ライフをお過ごしください!
おまけ Pythonでt検定をやるには?
ここから先は、Pythonを使ったt検定について私の備忘録を書きます。
保健師・看護学生の方々は読み飛ばしてもOKです。
先ほどのA地区・B地区のデータを使って、Pythonを使ったコードを作ります。
- Studentの検定
import pandas as pd
from scipy import stats
# データ読み込み
path = 'ファイルパス名'
df_student = pd.read_excel(path)
# グループ分け
groupA_student = df_student[df_student['地区'] == 'A']['収縮期血圧']
groupB_student = df_student[df_student['地区'] == 'B']['収縮期血圧']
# Studentのt検定(equal_var=True)
t_stat_student, p_value_student = stats.ttest_ind(groupA_student, groupB_student, equal_var=True)
print("\nStudentのt検定結果(分散が等しい前提)")
print(f"t値 = {t_stat_student:.4f}")
print(f"p値 = {p_value_student:.4f}")
# 有意水準
alpha = 0.05
# Studentの検定結果判定
if p_value_student < alpha:
print("→ Student検定:有意差あり(差は偶然ではない)")
else:
print("→ Student検定:有意差なし(偶然の範囲)")
出力:
→ Student検定:有意差なし(偶然の範囲)
- Welchのt検定
import pandas as pd
from scipy import stats
# データ読み込み
path = 'ファイルパス名'
df_welch = pd.read_excel(path)
# グループ分け
groupA_welch = df_welch[df_welch['地区'] == 'A']['収縮期血圧']
groupB_welch = df_welch[df_welch['地区'] == 'B']['収縮期血圧']
# Welchのt検定(equal_var=False)
t_stat_welch, p_value_welch = stats.ttest_ind(groupA_welch, groupB_welch, equal_var=False)
print("Welchのt検定結果(分散が異なる前提)")
print(f"t値 = {t_stat_welch:.4f}")
print(f"p値 = {p_value_welch:.4f}")
# 有意水準
alpha = 0.05
# Welchの検定結果判定
if p_value_welch < alpha:
print("→ Welch検定:有意差あり(差は偶然ではない)")
else:
print("→ Welch検定:有意差なし(偶然の範囲)")
出力:
→ Welch検定:有意差あり(差は偶然ではない)
脚注:
- 制約:自由度の中に平均(という条件)があると、最後の値は「自分で決められない=制約されてしまう」ということです。
例えば、「5人の血圧の平均が130になるようにしなさい」と言われた場合、
1人目:128
2人目:132
3人目:131
4人目:127
まで自由に決められます。
しかし、
5人目:計算で自動的に決まってしまいます!
→ 平均130にするには、合計650が必要。4人分で既に518なので、
650 − 518 = 132
この状態を、「自由ではない」=「制約がある」というのです。
今回のA地区・B地区のケースでは、2つの地区それぞれに「平均」という条件をつけているため、合計で-2の制約があります。 ↩︎ - 両側検定とは、「差がある」ことを判断したい時に、差が
プラス側に大きい(例:A>B)、マイナス側に大きい(例:A<B)のどちらにも注目する検定のことです。
片側検定は、上記のどちらかのみに注目します。
今回のt検定では、敢えて片側検定には触れていません。 ↩︎ - 有意水準:「どこまでなら偶然として許せるかのライン」です。つまり、「これくらいの確率で”偶然”が起きるのなら、偶然としてみなすのはやーめた」という判定ラインです。 ↩︎
