Rを用いて統計的仮説検定を学ぶ (5)
- アウトライン
-
- 作成日: 2026/1/26
- 更新日: –
はじめに
機能性表示食品のヒト臨床試験 (ヒト試験) では、「この2群のデータに本当に差があるのか?」を確認したい場面が多くあります。
そのとき、真っ先に思い浮かぶ代表的な方法がt検定です。本コラムでは、仮想データ (TG: 中性脂肪) を使って、Rで2群の平均値差を検定する流れを、クイズ形式で確認します。
「p値が小さい=何が言えるのか」「どのt検定を使うべきか」といった実務上の読み取りポイントにも触れます。
問題
ある試験で「中性脂肪 (TG)」を測定した (表1)。摂取した食品がアクティブかプラセボかによって2群に分けたとき、TGの平均値に有意な差はあるでしょうか?有意水準5%、両側検定で確認しなさい。
表1. 試験データ
| ID | 性別 | 群 | 体重 | TG |
|---|---|---|---|---|
| 1 | 男 | アクティブ | 69.5 | 88 |
| 2 | 男 | アクティブ | 70.1 | 100 |
| 3 | 男 | アクティブ | 66.1 | 65 |
| 4 | 男 | アクティブ | 69.0 | 90 |
| 5 | 女 | アクティブ | 47.2 | 70 |
| 6 | 女 | アクティブ | 45.5 | 105 |
| 7 | 女 | アクティブ | 47.8 | 95 |
| 8 | 女 | アクティブ | 44.9 | 85 |
| 9 | 男 | プラセボ | 67.8 | 135 |
| 10 | 男 | プラセボ | 65.5 | 115 |
| 11 | 男 | プラセボ | 66.6 | 170 |
| 12 | 男 | プラセボ | 70.7 | 120 |
| 13 | 男 | プラセボ | 64.3 | 180 |
| 14 | 男 | プラセボ | 70.1 | 155 |
| 15 | 女 | プラセボ | 49.0 | 200 |
| 16 | 女 | プラセボ | 49.0 | 140 |
| 17 | 女 | プラセボ | 46.6 | 110 |
| 18 | 女 | プラセボ | 46.6 | 160 |
| 19 | 女 | プラセボ | 49.0 | 150 |
| 20 | 女 | プラセボ | 50.7 | 130 |
解答
【スクリプト】
群アクティブ <- c(88, 100, 65, 90, 70, 105, 95, 85)
群プラセボ <- c(135, 115, 170, 120, 180, 155, 200, 140, 110, 160, 150, 130)
var.test(群アクティブ, 群プラセボ)
t.test(群アクティブ, 群プラセボ, var.equal=TRUE)
【出力】
> 群アクティブ <- c(88, 100, 65, 90, 70, 105, 95, 85)
> 群プラセボ <- c(135, 115, 170, 120, 180, 155, 200, 140, 110, 160, 150, 130)
> var.test(群アクティブ, 群プラセボ)
F test to compare two variances
data: 群アクティブ and 群プラセボ
F = 0.2552, num df = 7, denom df = 11, p-value = 0.08095
alternative hypothesis: true ratio of variances is not equal to 1
95 percent confidence interval:
0.06789584 1.20183733
sample estimates:
ratio of variances
0.2551959
>
> t.test(群アクティブ, 群プラセボ, var.equal=TRUE)
Two Sample t-test
data: 群アクティブ and 群プラセボ
t = -5.6714, df = 18, p-value = 2.224e-05
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
-81.99792 -37.66874
sample estimates:
mean of x mean of y
87.2500 147.0833
【結果】
有意水準5%(両側)で、2群の平均TGには有意差がある。このデータでは、アクティブ群のTGがプラセボ群より低い。
解説
4.1 何を検定しているか?
t検定は、「2群の平均差」が 偶然のばらつきで説明できる範囲かを評価します。
- 帰無仮説: 平均差 = 0 (2群に差はない)
- 対立仮説: 平均差 ≠ 0 (2群に差がある)
4.2 p値と信頼区間の読み方
t検定のp値は 2.224e-05 と非常に小さく、帰無仮説(差がない)を支持しにくい結果です。
さらに、平均差の95%信頼区間が 0を含まない(-81.998 ~ -37.669)ことからも、差が統計的に示されたと解釈できます。
4.3 「等分散」についての注意 (実務的ポイント)
原稿では分散の比較 (var.test()) を行い、その後に var.equal=TRUEのt検定を実施しています。
ただし、実務では次の点に注意が必要です。
- var.test()(F検定)は正規性の影響を受けやすく、小標本だと判断が不安定になりやすい
- Rの t.test() は、指定しなければWelchのt検定 (等分散を仮定しない) が実行される
- 迷ったら、まずWelchで進める方が安全なケースが多い (感度分析などについては今後コラムでも解説していきます。)
※ただし、今回のデータでは差がかなり大きいため、どちらを使っても結論 (有意差あり) は大きく変わりにくいと考えられます。
まとめ
いかがでしたでしょうか。
t検定は臨床試験に限らず、さまざまな研究や業務の場面で「2群に差があるか」を確認するための基本的な手法です。
t検定はRだけでなく、ExcelやPythonでも実行できます。ただし、ExcelやPythonでは、等分散を仮定するか、片側・両側の設定をどうするかなど、解析者が前提や設定を明示的に管理する必要があります。
一方Rでは、標準関数を用いることで、一般的な利用に適した手順が比較的スムーズに実行でき、p値に加えて信頼区間など解釈に必要な情報もまとめて得られます。そのため、検定の実行から結果の読み取りまでを一連の流れとして整理しやすい点が利点です。
t検定を業務や研究で繰り返し使う場面では、スクリプトとして手順を残せるRを活用することで、再現性を保ちつつ、結果の解釈や報告を安定して進めることができます。





