t 検定が問うこと
すべての t 検定は同じ根本的な問いに答えます。この平均の差は本物か、それとも単なるノイズか? 標本は揺らぎます。10 人の反応時間を 2 回測れば、何も変わっていなくても 2 つの異なる平均が得られます。t 検定は、観測された差を偶然から期待される揺らぎと比べ、真の差がゼロだったとしたらあなたのデータがどれほど意外かを報告します。
3 つの種類がありますが、関数は 1 つです。
- 1 標本 — この群の平均は固定値と異なるか?
- 2 標本 — この 2 つの独立した群の平均は異なるか?
- 対応あり — 同じ被験者が 2 回の測定の間で変化したか?
1 標本: t.test(x, mu = ...)
あるプロセスが平均 5.0 秒であるはずだとして、10 回の実行を計測したとしましょう。
標本平均は 5.61 ですが、わずか 10 回の実行で目標を 0.61 上回ることに意味があるのか、それとも通常の揺らぎの範囲内なのか。まさにそれに出力が答えます。
出力を 1 行ずつ読む
ここが本領を発揮する節です。どの t.test() の派生でも出力の形は同じなので、一度読めるようになれば済みます。上のブロックを実行して、各行を突き合わせてみましょう。
- t = 4.26 — 検定統計量です。観測された差(5.61 − 5 = 0.61)を平均の標準誤差(約 0.143)で割った値です。標本平均が仮説上の値から標準誤差 4 個分より少し離れていることを示します。|t| が大きいほど、帰無仮説のもとでは意外だということです。
- df = 9 — 自由度で、ここでは n − 1 です。df が小さいのは標本が小さいということであり、検定が感心するにはより大きな t が要求されます。
- p-value ≈ 0.002 — 真の平均が本当に 5 だったとして、平均が(どちらの方向でも)少なくともこれだけ 5 から離れた標本を引く確率は約 0.2% です。それが意味のすべてです。真の平均が 5 である確率では ありません。また p 値が小さいからといって、あなたのお気に入りの説明が 証明された わけでもありません。「偶然のせいにするのは難しい」と言っているだけです。通常の 0.05 の閾値では、ここで帰無仮説は棄却されます。
- alternative hypothesis — 「棄却」が何を意味するかの言い換えです。
not equal to 5は、これが両側検定だったことを確認させてくれます。 - 95 percent confidence interval: 5.29 to 5.93 — データと矛盾しない真の平均の範囲です。5 がその 外側 にあることに注目してください。これは p < 0.05 と同じ判断を、データ自身の単位で述べたものであり、さらに p 値には決してできない、効果のありうる 大きさ も教えてくれます。
- sample estimates — 観測された平均です。検定されている生の事実を読み手が見られるようにするものです。
プログラムから各部分が必要なときは result <- t.test(times, mu = 5) としてから、result$p.value、result$conf.int、result$estimate を使います。
2 標本: 独立した群を比較する
独立した 2 群には、formula インターフェースが問いそのもののように読めます。ToothGrowth は、オレンジジュース (OJ) またはアスコルビン酸 (VC) としてビタミン C を与えたモルモットの歯の成長を記録しています。
「supp で分けた len を検定する」と読みます。出力には 2 つ の標本推定値(群ごとの平均、約 20.7 対 17.0)が表示され、信頼区間はそれらの 差 に対するものになります。ここでは p ≈ 0.061、区間は約 −0.17 から 7.57 です。ゼロをまたぐので、0.05 の水準では「差がない」を排除できません。ただし +7.6 まで伸びる区間は、差が存在しないと宣言することにも警告を発しています。「有意でない」は 証明されていない という意味であり、存在しないと証明された という意味ではありません。
既定は Welch — そしてそれが良い
出力のヘッダーを見てください。Welch Two Sample t-test とあり、df は小数(約 55.3)です。古典的な Student の t 検定は両群の分散が等しいと仮定します。Welch 版はその仮定を捨て、その代わりに自由度を調整します。分散が本当に等しいとき、Welch は実質的に同一の答えを返します。等しくないとき、Student の検定はひどく較正を誤ることがありますが、Welch は誠実であり続けます。したがって R の既定は安全な方であり、これを上書きする理由はめったにありません。
「まず等分散を検定し、それから検定を選ぶ」という事前検定の儀式は時代遅れの助言です。単に Welch を使いましょう。
対応あり: 前と後
両方の測定値が 同じ 被験者から来ている場合、群は独立ではなく、独立として扱うと検定の検出力を捨てることになります。研修コースの前後における 8 人のスコアを見てみましょう。
paired = TRUE は 個人内の差 の平均を検定します(ここでは平均 2.75 点、p ≈ 0.001)。対応付けがすべてを変える理由はこうです。人と人の違いは、研修が誰かを変えた度合いよりはるかに大きいのです。65 から 80 までの被験者間の散らばりは、対応なしの検定では 2〜3 点の改善を飲み込んでしまいます。差を取ることで各人のベースラインが引き算され、変化だけが残ります。ルールはこうです。データに「同じ単位を 2 回測定した」という自然な構造があるなら、対応付けましょう。(そして群が本当に独立なときに paired = TRUE を使ってはいけません。その対応付けは作り話になってしまいます。)
片側検定: 慎重に扱う
既定では検定は両側です。どちらの 方向の差も証拠として数えます。もし — データを見る前に — あなたの仮説が一方向にしか意味をなさなかったのであれば、それを指定できます。
p 値は両側検定に対して半分になります。まさにそれが誘惑の生じる理由です。データを覗いた 後 に片側へ切り替えるのは p ハッキングです。alternative = "greater" や "less" は、本当に事前登録された方向があるときにだけ使いましょう。迷うなら両側のままにしてください。
前提と代替手段
t 検定は、観測値が 独立 であること、そして標本平均がおおむね正規分布に従うことを前提とします。後者はデータ自体がおおむね正規である か、標本がそれなりに大きいときに成り立ちます(中心極限定理が重い仕事を引き受けます。1 群あたり n ≈ 30 以上なら、中程度の非正規性は問題になりません)。分布の形は手早いヒストグラムや箱ひげ図で確認しましょう。ただし独立性はどんな検定でも救えません。それはデータの収集方法から来るものです。
明らかに歪んだデータや極端な外れ値を持つ小標本には、標準的なノンパラメトリックな代替手段が 1 行で使えます。wilcox.test(len ~ supp, data = ToothGrowth) は、平均ではなく順位を通じて分布を比較します。
この章のまとめ
- 1 標本には
t.test(x, mu = )、2 標本にはt.test(y ~ group, data = )、前後の比較にはpaired = TRUEを使います。 - p 値は「真の差がゼロだとしたら、このデータはどれほど意外か」であり、それ以上ではありません。効果のありうる大きさを実際の単位で教えてくれるのは信頼区間です。
- R の 2 標本の既定は Welch の検定(小数の df)です。そのままにしましょう。
- 対応付けは被験者間のノイズを取り除きます。同じ単位を 2 回測定したときは常に使いましょう。
- 片側対立仮説は事前に方向を決めていたときだけ。
wilcox.test()が順位ベースの代替手段です。
次は、3 つ以上 の群の平均を一度に比較すること — aov() による分散分析です。
よくある質問
R で t 検定を実行するにはどうしますか?
t.test() を使います。1 標本を固定値と比べる場合: t.test(x, mu = 5)。独立した 2 群の場合: t.test(value ~ group, data = df)。同じ対象の前後の測定値の場合: t.test(after, before, paired = TRUE)。
R の t 検定の p 値はどう解釈しますか?
真の差がゼロだったとして、少なくともあなたが観測したのと同じ大きさの差が見られる確率です。p 値が小さい(慣例的には 0.05 未満)ということは、データをノイズとして説明するのが難しいということなので、帰無仮説を棄却します。これは帰無仮説が正しい確率ではなく、差がどれだけ大きいか・重要かについては何も語りません。それを知るには信頼区間を読みます。
R が既定で Welch の t 検定を報告するのはなぜですか?
R の 2 標本 t.test() は既定で Welch 版を使います。これは 2 群の分散が等しいと仮定しません。だから自由度が小数になるのです。Welch は分散が等しいときには古典的な Student の検定とほぼ同一に振る舞い、等しくないときにはより安全なので、この既定は正しい選択です。var.equal = TRUE は、課題が古典的なプール検定を明示的に要求するときにだけ使いましょう。
R で対応のある t 検定はいつ使うべきですか?
2 組の測定値が自然な対をなすとき — 同じ被験者を前後で測定した、同じ対象を 2 つの方法で評価した、といった場合です。t.test(after, before, paired = TRUE) は対の内側の差の平均を検定します。これにより被験者間のばらつきが除かれ、独立した群として扱うよりはるかに高い検出力が得られるのが普通です。