医療統計学・医療情報学・遠隔医療

医療統計学・医療情報学・遠隔医療 · 08

平均の比較 — 1標本・対応なし・対応ありのt検定

Comparing Means: One-Sample, Independent, and Paired t-Tests

🧠 全体像:t検定はただ1つの形をしている。「見えている差」÷「その差がだけで揺らぐ幅」。分子が効果量、分母が標準誤差である。1標本・対応なし・対応ありの3種類は、この分数の中身をデータの構造に合わせて詰め替えているだけで、対応ありのt検定は「差」というひとつのに対する1標本t検定そのものである。3つを別々のとして覚えるのではなく、この1本の分数として覚える。

t分布 — なぜ正規分布ではないのか

中心極限定理により、標本平均はに従う。母 σ\sigma が既知なら標準のが作れる。

Z=Xˉ−μσ/nZ = \frac{\bar{X} - \mu}{\sigma/\sqrt{n}}

しかし実際には σ\sigma は分からない。そこで標本 ss(SD)で代用する。

t=Xˉ−μs/nt = \frac{\bar{X} - \mu}{s/\sqrt{n}}

⭐ 分母を推定値に置き換えたことで、この統計量はもはや標準に従わない。従うのが t分布( f=n−1f = n-1)である。Gosset がギネス社の化学者としての小標本を扱う中で導き、社員として実名で発表できなかったため Student という筆名を使った。

標準との共通点 標準との違い
y軸に関して対称な釣鐘型 σ\sigma に直接依存せず、SD にのみ依存する
定義域は [−∞,∞][-\infty, \infty] ff ごとに別の分布がある
が小さいと裾が厚く平たい。ff が大きいとに近づく

💡 裾が厚いことの意味は明確である。ss 自体が誤差を含むため、「たまたま ss を小さく見積もったせいで t が大きく出た」可能性がされる。分布はその分だけ外側に確率を配り、結果として棄却の閾値がより遠くなる。だから小標本のは広い。

1標本 t検定

問いの立て方

問い:Framingham の患者集団の平均心拍数 μ\mu は、 μ0=80\mu_0 = 80 min⁻¹ と異なるか。

項目 内容
H0 差はない。μ=μ0\mu = \mu_0
H1 差がある。μ≠μ0\mu \neq \mu_0
効果量 平均との差 xˉ−μ0\bar{x} - \mu_0
relevance 2 min⁻¹ の差を臨床的に意味ありとする
有意水準 α=5%\alpha = 5%(信頼水準 1−α=95%1-\alpha = 95%)
標本 Framingham 心臓研究 第1期からの 3263例(HEARTRTE )

⭐ relevance の閾値をデータを見る前に宣言していることに注目する。これが「有意だが無意味な差」に流されないための唯一の防具である。

検定統計量

t=xˉ−μ0SExˉwhereSExˉ=sndf=n−1t = \frac{\bar{x} - \mu_0}{SE_{\bar{x}}} \qquad\text{where}\qquad SE_{\bar{x}} = \frac{s}{\sqrt{n}} \qquad df = n-1

実習の値を入れる。s=12.4904s = 12.4904、n=3259n = 3259 なので

SExˉ=12.49043259=0.2188t=77.3578−800.2188=−2.64220.2188=−12.076SE_{\bar{x}} = \frac{12.4904}{\sqrt{3259}} = 0.2188 \qquad t = \frac{77.3578 - 80}{0.2188} = \frac{-2.6422}{0.2188} = -12.076

💡 t値の意味:分子が観測された差=効果量、分母が平均のランダムなゆらぎ(SE)。すなわち t値は「効果量を、のゆらぎの単位で測ったもの」である。t値が大きいほど、その差がである説明が苦しくなる。

⚠️ したがって t値は効果の大きさではない。nn を増やせば分母が小さくなるので、同じ差でも t値はいくらでも大きくなる。

適用条件

# 条件 中身
1 尺度 数値尺度で測定(または表現)されたデータ
2 抽出 単純 — 母集団の各要素が同じ確率で標本に入る
3 正規性 平均の分布が正規であること。(a) 標本サイズが十分(目安 n≥30n \ge 30、中心極限定理)または (b) 小標本ではデータ自体が正規(既知・仮定・QQプロットで確認)

⚠️ 「データが必ずしていなければならない」は誤解である。 必要なのは平均の分布の正規性であって、データそのものの正規性ではない。nn が十分大きければ、データがどんな分布でも中心極限定理により平均は正規に近づく。実習の例(n=3259n = 3259)では、心拍数の分布が正規でなくても条件は満たされる。

正規性を仮説検定で確かめない。 Shapiro–Wilk 検定などを前段に挟むと、それ自体が検定の追加になり第1種の過誤を歪める(多重性の問題 → )。しかも nn が大きいと些細な逸脱でも「非正規」と判定され、nn が小さいと検出力不足で何も検出できないという、必要とは逆の挙動をする。についての既存の知識と、ヒストグラム・QQプロットで判断する。

結果を読む

出力 値
標本平均(点推定) 77.358 min⁻¹
効果量 77.358−80=−2.64277.358 - 80 = -2.642 min⁻¹
SD 12.490 min⁻¹
SE 0.2188 min⁻¹
95% (μ\mu の区間推定) 80 を含まない
tt(df=3258df = 3258) −12.076-12.076
p値 <2.2×10−16< 2.2 \times 10^{-16}

💡 出力を読む順序

  1. 効果量 — −2.64-2.64 min⁻¹。集団の平均心拍数はより低い
  2. 臨床的relevance — 閾値 2 min⁻¹ を超える。relevant
  3. — μ\mu の 95% CI が 80 を含まない → H0 を棄却
  4. p値 — <2.2×10−16< 2.2 \times 10^{-16}。有意

⚠️ 手順 3 と 4 は必ず同じになる。が H0 の値を含まないことと p<αp < \alpha は同値だからである。別々の証拠ではなく、同じ事実の2つの表示である。

p値が 10−1610^{-16} 台なのは効果が巨大だからではなく、n=3259n = 3259 が大きいからである。もし relevance の閾値を 2 min⁻¹ ではなく 5 min⁻¹ に置いていたら、同じ結果は「有意だが臨床的に無意味」になっていた。 有意性と relevance が独立であることは、この1例で完全に見て取れる。

from scipy import stats
import statsmodels.stats.api as sms
stats.ttest_1samp(hr, popmean=80, nan_policy="omit")     # t = -12.076, p < 2.2e-16
sms.DescrStatsW(hr.dropna()).tconfint_mean()             # 平均μの95%信頼区間

対応なし(独立2標本)t検定 — Welch検定

問いの立て方

問い:女性(μf\mu_f)と男性(μm\mu_m)で コレステロールの平均値は異なるか。

項目 内容
H0 差はない。μf=μm\mu_f = \mu_m、すなわち μf−μm=0\mu_f - \mu_m = 0
H1 差がある。μf−μm≠0\mu_f - \mu_m \neq 0
効果量 2つの平均の差
relevance 5 mg/dL の差を臨床的に意味ありとする
標本 Framingham 3263例(HDLC 、SEX で群分け)

検定統計量

2群が独立なので、差の分散は2群の分散の和になる。

t=xˉ1−xˉ2s12n1+s22n2t = \frac{\bar{x}_1 - \bar{x}_2}{\sqrt{\dfrac{s_1^2}{n_1} + \dfrac{s_2^2}{n_2}}}

これが Welch 検定である。分母を「共通の分散」に置き換えて sp2(1/n1+1/n2)\sqrt{s_p^2(1/n_1 + 1/n_2)} とするのが古典的な Student の2標本t検定だが、そちらは両群の分散が等しいことを前提にする。

既定で Welch を使う — 分散の事前検定をしない

Student の2標本 t検定 Welch 検定
分散が等しいという仮定 必要 不要(分散差に頑健)
n1+n2−2n_1 + n_2 - 2 Welch–Satterthwaite の近似(小数になる)
分散が実際に等しいとき わずかに検出力が高い 損失はごくわずか
分散が違うとき 第1種の過誤が歪む 正しく振る舞う

⚠️ 「まず F検定で分散が等しいか調べ、その結果で Student と Welch を使い分ける」という2段階の手続きをしない。 前段の検定自体が多重性を生み、第1種の過誤の実際の値が名目の α\alpha からずれる。分散が等しい場合でも Welch の検出力の損失はごくわずかなので、最初から Welch を既定にするのが正しい1。講義が「分散が分からないなら検定するな(多重性)。Welch を使え」と述べているのは、この論点そのものである。

💡 分散そのものを比較したい(=ばらつきの違いが研究の関心である)ときは F検定を使う。ただし F検定は正規性に非常に敏感で、標本サイズが大きくてもその弱点は救われない。t検定と違い、中心極限定理は助けにならない。

適用条件

  1. 2つの独立した群の比較 — 各観測単位はどちらか一方の群にしか属さない
  2. 両群で同じ数値を測っている
  3. 群内・群間ともに独立な無作為観測
  4. 両群で平均の分布が正規 — (a) 各群 n≥30n \ge 30 または (b) 小標本ではデータが正規

⚠️ Welch検定では分散の等質性は条件に含まれない。

2群の平均の信頼区間を並べて見るときの罠

各群の平均と 95% CI を並べたグラフ(plot of means)は直感的だが、差のとは別物である。

見え方 言えること
2つの CI が重ならない 差は有意である(十分条件)
2つの CI が重なる 有意でないとは言えない。重なっていても有意な差はありうる

💡 理由は単純である。差の標準誤差は SE12+SE22\sqrt{SE_1^2 + SE_2^2} であり、SE1+SE2SE_1 + SE_2 より小さい(三角不等式)。個々の CI の重なりは SE1+SE2SE_1 + SE_2 を基準にしているので、差そのものの基準より甘い判定になる。判断は必ず「差の」で行う。

結果を読む

出力 値
女性の平均 53.643 mg/dL
男性の平均 43.712 mg/dL
効果量(差) 9.931 mg/dL
relevance の閾値 5 mg/dL
差の 95% 0 を含まない
p値 <2.2×10−16< 2.2 \times 10^{-16}

💡 出力を読む順序

  1. 効果量 — 9.93 mg/dL。女性のほうが高い(どちらからどちらを引いたかを出力の見出しで確認する)
  2. 臨床的relevance — 閾値 5 mg/dL を超える。relevant
  3. — 差の CI が 0 を含まない → H0 を棄却
  4. p値 — 有意
from scipy import stats
import statsmodels.stats.api as sms
stats.ttest_ind(hdl_f, hdl_m, equal_var=False)      # equal_var=False が Welch検定
sms.CompareMeans.from_data(hdl_f, hdl_m).tconfint_diff(usevar="unequal")   # 差の95% CI

対応あり(paired)t検定

問いの立て方

問い:同一患者の血糖値は第1期(μ1\mu_1)と第3期(μ3\mu_3)で変化したか。

項目 内容
H0 変化はない。μ1=μ3\mu_1 = \mu_3、すなわち μ3−μ1=0\mu_3 - \mu_1 = 0
H1 変化がある。μ3−μ1≠0\mu_3 - \mu_1 \neq 0
効果量 2つの平均の差 = 差の平均
relevance 5 mg/dL の差を臨床的に意味ありとする
標本 同一個体の 2×1142 \times 114 反復測定(GLUCOSE )。データは long 形式

対応ありt検定は「差」に対する1標本t検定である

個体 ii について差 di=x3i−x1id_i = x_{3i} - x_{1i} を作れば、検定統計量は1標本t検定とまったく同じ形になる。

t=dˉ−0sd/ndf=n−1(n=データ対の数)t = \frac{\bar{d} - 0}{s_d/\sqrt{n}} \qquad df = n-1 \quad (n = \text{データ対の数})

3つのt検定を並べると、同じ分数であることが見える。

t=xˉ−μ0s/n⏟1標本t=xˉ1−xˉ2s12/n1+s22/n2⏟対応なし(Welch)t=dˉsd/n⏟対応あり\underbrace{t = \frac{\bar{x}-\mu_0}{s/\sqrt{n}}}_{\text{1標本}} \qquad \underbrace{t = \frac{\bar{x}_1-\bar{x}_2}{\sqrt{s_1^2/n_1 + s_2^2/n_2}}}_{\text{対応なし(Welch)}} \qquad \underbrace{t = \frac{\bar{d}}{s_d/\sqrt{n}}}_{\text{対応あり}}

⭐ 対応ありと1標本は文字が違うだけで同じ式である。だから「対応ありt検定のは n−1n-1(nn は対の数、観測値の総数 2n2n ではない)」が自然に出てくる。

💡 「平均の差 = 差の平均」 は算術的に常に成り立つ(欠損がない限り)。しかし標準誤差は同じにならない。対応ありでは個体間のばらつきが差をとる時点でされるため sds_d が小さくなり、そのぶん検出力が高い。これが「対応のある設計はふつう検出力が高い」の中身である。

long 形式と wide 形式

反復測定データの保存形式には2通りある。

long 形式 wide 形式
1行が表すもの 1回の測定 1つの観測単位(個体)
列 個体ID、測定時期ID、測定値 個体ID、第1期の値、第3期の値
どこで使われるか 臨床データベースの標準的な形 対応のある解析に必要な形
同一個体の2測定 2つの行に分かれる 1つの行の2つの列
flowchart TD
  A["long 形式<br>RANDID / PERIOD / GLUCOSE<br>(臨床DBの標準形)"] --> B["reshape<br>個体IDをキーに横に展開"]
  B --> C["wide 形式<br>RANDID / GLUCOSE.p1 / GLUCOSE.p3"]
  C --> D["差の<span class='jp-term jp-term-diagram' title='variables'>変数</span>を作る<br>GLUCOSE.diff = p3 − p1"]
  D --> E["差の記述統計<br>ヒストグラム・箱ひげ図・平均・SE"]
  E --> F["差に対する 1標本 t検定<br>= 対応ありt検定"]

対応あり/対応なしの選択 — 試験の定番の罠

⭐ どちらを使うかを決めるのは「データがどう並んでいるか」ではなく「どう集められたか()」である。

デザイン 例 使う検定
各観測単位が一方の群にしか属さない 男性 vs 女性、治療群 vs 対照群 対応なし(Welch)
同一個体を2回測る 治療前後、第1期と第3期 対応あり
個体が意味のあるペアを成す 双子、マッチドペア研究、左右の眼 対応あり

⚠️ long 形式のデータは「2つの群」に見える。 「PERIOD」という列で群分けできてしまうので、そのまま対応なしt検定に流し込めてしまう。しかしそれは個体の対応情報を捨てる行為であり、次の2つの害を同時に生む。

  1. 検出力を失う — 個体間のばらつきが分母に残り続けるので SE が大きくなる
  2. 独立性の仮定を破る — 同一個体の2測定は独立ではないので、そもそも検定の前提が成り立たない

💡 実習の血糖値の例では、p値は 0.02683 と 0.05 をわずかに下回るだけである。対応を捨てていれば、この差は有意にならなかった可能性が高い。 検定の選択そのものがを変える典型例である。

逆に、独立な2群を無理に「対応あり」として扱うこともできない。対応ありt検定は n1=n2n_1 = n_2 かつ行の並び順が個体の対応を表していることを前提にするので、独立なデータに使えばまったく無意味な結果が出る。

欠損値の扱い

long から wide へ変換するとき、片方の期の測定が欠けている個体は行ごと落ちる。実習の例では 114 個体のうち 30 個体(26%)が除外され、解析対象は 84 対になった。

⚠️ これは「」であり、欠損が無作為でなければ結果に偏りが生じる。血糖値の追跡が途切れた理由が、転院・死亡・重症化と関係していれば、残った 84 例は元の集団を代表しない。解析対象が何例で、なぜ何例が落ちたのかを必ず報告する(→ 調査法とデータ表の作り方)。

適用条件

  1. 数値尺度で測定されたデータ対
  2. データ対の単純 — 対の中の2つの値は従属だが、対どうしは互いに独立であること
  3. 差の平均の分布が正規 — (a) 対が 30 以上、または (b) 小標本では差が正規(QQプロットで確認)

💡 条件 3 で正規性を要求されているのは差であって、元の測定値ではない。前後どちらの分布が歪んでいても、差が対称なら問題は小さい。

⚠️ 完全な独立(対応なし)と対ごとの従属(対応あり)の中間にあたる状況が実務には多い。たとえば治療群と対照群が8つの施設に分かれていれば、同じ施設の患者は似た条件にさらされている。この種の依存構造の扱い(混合効果モデル、補正)はこの科目の範囲外だが、「独立か対応ありかの二択ではない」ことは知っておく。

結果を読む

出力 値
効果量(差の平均) relevance 閾値 5 mg/dL を超える
差の 95% H0 の値 0 を含まない
p値 0.02683

💡 出力を読む順序

  1. 効果量 — 差の平均。ソフトウェアは「第1 − 第2」で計算するので、符号が期待と逆になることがある(大きさは同じなのでは変わらない)
  2. 臨床的relevance — 閾値 5 mg/dL を超える。relevant
  3. — 差の CI が 0 を含まない → H0 を棄却
  4. p値 — 0.02683 < 0.05。有意

⚠️ p = 0.027 は α=0.05\alpha = 0.05 のすぐ内側である。他の3つのt検定(p<2.2×10−16p < 2.2 \times 10^{-16})と比べて「弱い証拠」なのは確かだが、p値どうしを効果の大きさとして比べてはならない2。ここで見るべきは、差のが 0 のすぐ近くまで伸びていること(=効果の下限がほぼ 0 でありうること)である。

from scipy import stats
import statsmodels.stats.api as sms
wide = long.pivot(index="RANDID", columns="PERIOD", values="GLUCOSE").dropna()   # long → wide
d = wide[3] - wide[1]                                    # 差の変数を作る
stats.ttest_rel(wide[3], wide[1])                        # 対応ありt検定 → p = 0.0268
sms.DescrStatsW(d).tconfint_mean()                       # 差の95%信頼区間
stats.ttest_1samp(d, popmean=0)                          # ⭐ 上とまったく同じ結果になる

どの検定を使うか

flowchart TD
  A["数値<span class='jp-term jp-term-diagram' title='variables'>変数</span>の位置(平均)を比べたい"] --> B{"比較の相手は?"}
  B -->|"既知の<span class='jp-term jp-term-diagram' title='baseline / reference value'>基準値</span> μ0"| C["1標本 t検定<br>df = n − 1"]
  B -->|"もう1つの群"| D{"同じ個体を<br>2回測っているか?<br>(意味のある対か?)"}
  D -->|"はい(前後・双子・左右)"| E["対応あり t検定<br>= 差に対する1標本t検定<br>df = 対の数 − 1"]
  D -->|"いいえ(別々の個体)"| F["Welch検定<br>⚠️ 分散の事前検定はしない"]
  C --> G["⭐ 効果量 → relevance → <span class='jp-term jp-term-diagram' title='confidence interval'>信頼区間</span> → p値 の順に読む"]
  E --> G
  F --> G
何を知りたいか の型 検定
平均が既知のと等しいか 数値・連続 1個 1標本 t検定
2群(独立)の平均が等しいか 数値・連続 1個 + 2値の群 1個 Welch検定(既定)/Student の2標本t検定
2群(対応あり)の平均が等しいか 数値・連続 1個 + 対の識別子 対応あり t検定
2群の分散が等しいか 数値・連続 1個 + 2値の群 1個 F検定(正規性に敏感)
2つのカテゴリが独立か カテゴリ 2個 χ²検定・
既知の比率と等しいか 2値 1個 二項検定

💡 t検定は「中央値・分位点など他の位置の比較」にも流用が利くと講義は述べているが、厳密に扱いたいなら順位にもとづくノン検定(Mann–Whitney の U検定、Wilcoxon の符号順位検定)を使う。検定は特定の分布族を前提にし、ノン検定はより広い分布族で成り立つ代わりに検出力をいくらか失う。

非有意だったときに書いてよいこと

⭐ t検定が有意でなかったとき、「2群に差はなかった」と書いてはならない3。書けるのは次のどちらかであり、差のの幅がそれを決める。

差の 95% CI 書けること
−1.0∼+1.2-1.0 \sim +1.2 mg/dL(relevance 閾値 5 より狭い) 「臨床的に意味のある差(5 mg/dL)は否定できる」
−9.0∼+11.0-9.0 \sim +11.0 mg/dL(閾値をまたぐ) 「差があるとも、ないとも言えない。この標本サイズでは判定できない」

まとめ

  • t検定はすべて 効果量 ÷ その効果量の標準誤差という1本の分数である。t=(xˉ−μ0)/(s/n)t = (\bar{x}-\mu_0)/(s/\sqrt{n})。
  • t分布は σ\sigma を ss で代用したことから生じ、 f=n−1f = n-1 ごとに異なる。小標本ほど裾が厚く、閾値が遠い。
  • t値は効果の大きさではない。 nn を増やせば同じ差でも t値は大きくなる。
  • 条件で要求されるのは平均の分布の正規性であって、データの正規性ではない。n≥30n \ge 30 なら中心極限定理で足りる。
  • 正規性も分散の等質性も、前段の仮説検定で確かめない。 多重性を生み第1種の過誤を歪める。既定で Welch検定を使う。
  • 2群の平均の CI が重ならなければ有意だが、重なっても非有意とは言えない。判断は必ず差ので行う。
  • 対応ありt検定 = 差という1に対する1標本t検定。 は「対の数 − 1」。「平均の差 = 差の平均」だが、SE は個体間変動がされるぶん小さく、検出力が高い。
  • long 形式のデータは対応ありを対応なしに見せかける。 検定の選択を決めるのはデータの並びではなくである。対応を捨てると検出力を失い、独立性の仮定も破る。
  • long → wide の変換で欠損のある対は落ちる(実習では 114 対中 30 対)。何例が、なぜ落ちたのかを報告する。
  • 読む順序は 効果量 → 臨床的relevance → → p値。と p値は同じ事実の別表示であり、必ず一致する。
  • 非有意な結果を「差がない」と書かない。差のの幅が、何を否定できたかを決める。

出典

  1. 1.Why Psychologists Should by Default Use Welch's t-test Instead of Student's t-test(International Review of Social Psychology・2017)分散の等質性を事前検定してからStudentのt検定とWelch検定を使い分ける2段階の手続きが第1種の過誤を歪めること、および分散が等しい場合でもWelch検定の検出力の損失はごくわずかで、既定でWelch検定を用いるべきであること閲覧 2026-08-17
  2. 2.The ASA Statement on p-Values: Context, Process, and Purpose(The American Statistician (American Statistical Association)・2016)p値だけでは効果の大きさも推定の精度も分からないため、効果量と信頼区間を併せて報告すべきであること閲覧 2026-08-17
  3. 3.Statistics notes: Absence of evidence is not evidence of absence(BMJ・1995)有意でない結果を「差がない」と読むことの誤り、および信頼区間の幅で「差がないと言えるほど精密だったのか」を判別すること閲覧 2026-08-17