有意差検定とは、2つ以上のグループの間に見られた差が「偶然のばらつきだけで生じたと考えにくいか」を、p値という確率で判定する手続きです。統計学では仮説検定と呼ばれ、t検定・カイ二乗検定・分散分析などはすべてその一種です。この記事では、有意差の意味とp値の読み方を押さえたうえで、データの型から検定を選ぶ早見表、同じデータをExcelとPythonで検定した計算結果、必要なn数、報告でよくある誤用までを順に扱います。
まとめ:有意差検定の意味・p値・種類・やり方
- 有意差の意味:偶然では説明しにくい差のこと。差の大きさや重要性は表しません。
- 判定ルール:事前に決めた有意水準(通常5%)よりp値が小さければ「有意差あり」。p値が大きいときは「差がない」ではなく「差があるとは言えない」です。
- 検定の選び方:比べたいのが平均か比率か、群が2つか3つ以上か、同じ人を2回測ったか(対応の有無)の3点で決まります。
- 2群の平均:対応がなければWelchのt検定を既定にします。F検定で等分散を確かめてからt検定を選ぶ二段階は勧められていません。
- やり方:Excelなら
=T.TEST(範囲1,範囲2,2,3)でp値が出ます。報告にはp値だけでなく差の大きさと95%信頼区間を添えます。 - n数:有意水準5%の両側検定で、中程度の差(効果量d=0.5)を検出力80%で捉えるには1群64人が必要です。
有意差の意味と「有意差あり・なし」の正しい読み方
有意差ありは「偶然では説明しにくい差」
「有意差がある」「有意差が認められる」とは、「本当は差がない」という仮定(帰無仮説)のもとでは、観測したほどの差が出る確率が十分に小さい、という意味です。ここでいう「有意」は統計用語で、日常語の「有意義」とは関係がありません。
有意差は差の大きさを保証しません。標準偏差15点の試験なら、1万人ずつ比べると平均点0.5点の差でも有意になり(p = 0.018)、10人ずつでは10点の差でも有意になりません(p = 0.15)。有意差は「差がゼロではないと言える程度に、データが揃っているか」を示す指標であり、実務で意味のある差かどうかは別に判断します。
有意差なしが「差がない」の証明にならない理由
t検定で有意差が出なかったとき、言えるのは「今回のデータでは差があると言い切れなかった」ことだけです。差がゼロであることは示せていません。標本が少ない、ばらつきが大きい、効果が小さいのいずれでも有意差は出にくくなります。「AとBは同等」と主張したい場合は、同等性検定や非劣性検定という別の設計が必要です。棄却できなかった場合の結論の書き方は帰無仮説が棄却されない・できないときの解釈で詳しく扱っています。
p値と有意水準による有意差の判定方法
p値は「帰無仮説が正しいと仮定したとき、観測値と同じかそれ以上に極端な結果が得られる確率」です。有意水準αはデータを取る前に決めておく判定の基準で、多くの分野で0.05が使われます。判定は次の表のとおりです。
| 結果 | 判定 | 報告での書き方 |
|---|---|---|
| p値 ≦ α | 帰無仮説を棄却 | 有意差あり(p = 0.012) |
| p値 > α | 帰無仮説を棄却しない | 有意差は認められなかった(p = 0.21) |
p値について最も多い誤解は「帰無仮説が正しい確率」「結果が偶然である確率」と読むことです。米国統計学会(ASA)が2016年に出した声明は、原則2で「p値は、調べている仮説が真である確率も、データが偶然だけで生じた確率も測らない」と明記しています。原則5では「p値や統計的有意性は、効果の大きさや結果の重要性を測らない」としています。p = 0.001 は p = 0.04 より「差が大きい」ことを意味しません。
有意水準を5%にする根拠や、1%・10%を選ぶ場面、片側検定と両側検定の臨界値は有意水準の決め方と5%の根拠にまとめています。
有意差検定のやり方:データ収集前から報告までの5手順
- 比べる量と仮説を決める:「新画面は旧画面より入力時間が短い」のように、比べる指標と方向を決めます。片側検定を使うなら、この時点で決めておきます。
- 有意水準と標本サイズを決める:α=0.05と、検出したい差の大きさから必要なn数を計算します(後述)。
- 検定を選ぶ:データの型(平均・比率・順位)、群の数、対応の有無から、次章の早見表で選びます。
- 検定統計量とp値を計算する:Excel・Python・Rなどで計算し、p値を有意水準と比べます。
- 差の大きさと信頼区間を添えて報告する:平均差・比率差などの効果の大きさ、95%信頼区間、使った検定名、自由度を書きます。
順番を入れ替えると結果が歪みます。データを見てから片側検定に切り替えたり、有意になるまでデータを足したりすると、第1種の過誤(差がないのに有意と判定する誤り)の確率は5%に収まりません。
有意差検定の種類と選び方の早見表
検定の名前を覚えるより、手元のデータを3つの質問に当てはめるほうが早く決まります。比べるのは平均(連続量)か比率(件数)か、群は2つか3つ以上か、同じ対象を繰り返し測ったか(対応あり)か、の3つです。
| 比べるもの | 2群・対応なし | 2群・対応あり | 3群以上 |
|---|---|---|---|
| 平均(正規分布に近い) | Welchのt検定 | 対応のあるt検定 | 一元配置分散分析+多重比較 |
| 順位・外れ値が多い量 | Mann-WhitneyのU検定 | Wilcoxonの符号付順位検定 | Kruskal-Wallis検定 |
| 比率・件数 | カイ二乗検定・2標本の比率の検定 | McNemar検定 | r×cのカイ二乗検定 |
| ばらつき(分散) | F検定・Levene検定 | ― | Levene検定・Bartlett検定 |
アンケートの「満足・不満」の件数や、ABテストのコンバージョン数は比率の行、売上金額や作業時間は平均の行に当たります。期待度数(行合計×列合計÷総数)が5未満のセルがある小さな表では、カイ二乗検定の近似が粗くなるため、Fisherの正確確率検定を使うのが一般的な目安です。
パラメトリック検定とノンパラメトリック検定の分かれ目
t検定や分散分析は、データが正規分布に従うことを前提にしたパラメトリック検定です。Mann-Whitney検定などのノンパラメトリック検定は分布の形を仮定せず、値を順位に置き換えて比べます。
実務での判断基準は分布の形と外れ値です。1群が30前後以上あれば、平均の比較は中心極限定理によって正規性の崩れに比較的強くなります。一方、年収や滞在時間のように右に長く裾を引き、極端な値が平均を引っ張るデータでは、nが大きくても順位ベースの検定や対数変換を検討します。正規性の検定(Shapiro-Wilk検定など)で機械的に分岐させる方法は、標本が小さいと検出力が足りず、大きいとわずかなずれでも有意になるため、ヒストグラムやQ-Qプロットで分布の形と外れ値を確かめて判断します。
F検定とt検定の関係:等分散の事前検定は不要
教科書によっては「まずF検定で2群の分散が等しいかを調べ、等しければStudentのt検定、等しくなければWelchのt検定」という二段階の手順が載っています。この手順は現在では勧められていません。Delacre、Lakens、Leys の論文(International Review of Social Psychology 30巻1号、2017年)は、等分散の検定結果でStudentとWelchを選び分ける方法は適切な答えを出さないことが多く、Welchのt検定は分散が等しくないときに第1種の過誤をより正しく制御し、等しいときにもほとんど損をしないとして、Welchを既定にするよう結論しています。
注意したいのはツールごとの既定値です。
| ツール | 既定の2群t検定 | Welchにする指定 |
|---|---|---|
R t.test() |
Welch | 既定のまま(var.equal = FALSE) |
Python SciPy ttest_ind() |
Student(等分散を仮定) | equal_var=False を渡す |
Excel T.TEST() |
既定なし(引数typeが必須) | type に 3 を指定 |
SciPyは equal_var=True が既定なので、引数を書き忘れるとStudentのt検定になります。F検定そのものは「2群のばらつきに差があるか」を知りたいとき(製造ロットごとの寸法のばらつき比較など)に単独で使う検定であり、t検定の前段に置くものではありません。
3群以上でt検定を繰り返してはいけない理由
A・B・Cの3群を比べるのに、AとB、BとC、AとCの3回t検定を行うと、「どれか1つでも誤って有意になる」確率が5%を超えます。各検定が独立なら、その確率は 1 − 0.95k で、3回で14.3%、6回(4群の総当たり)で26.5%、10回(5群)で40.1%に達します。
3群以上では、まず一元配置分散分析(ANOVA)で「どこかに差があるか」を見て、どの組に差があるかはTukey法(総当たり)やDunnett法(対照群とだけ比べる)などの多重比較で調べます。ANOVAを使う意味は、組み合わせごとに検定を繰り返さず、全体を1回の検定で判定して第1種の過誤を5%に保てる点にあります。2群だけならANOVAのF値はStudentのt値の2乗に等しく、結論は同じです。群ごとに分散が大きく違う場合は、t検定と同じ考え方でWelchの分散分析を使います。TukeyやDunnettの方法はそれ自体で多重性を調整する手法なので、ANOVAで有意になってからでないと使えないわけではありません。
t検定のやり方:同じデータをExcelとPythonで検定する計算例
以下は説明用に作った架空の数値です。社内システムの入力画面を改修し、旧画面の10人と新画面の12人で入力完了までの秒数を測ったとします。旧画面の平均は54.9秒(標準偏差6.08)、新画面は44.75秒(同6.45)でした。
対応のないt検定(Welch)の計算結果
from scipy import stats
old = [48, 52, 55, 61, 47, 58, 66, 50, 53, 59] # 旧画面(10人)
new = [41, 45, 39, 50, 44, 62, 38, 43, 47, 40, 46, 42] # 新画面(12人)
res = stats.ttest_ind(old, new, equal_var=False) # Welchのt検定
print(res.statistic, res.df, res.pvalue)
print(res.confidence_interval(0.95))
# t = 3.79, 自由度 = 19.66, p = 0.0012
# 平均差の95%信頼区間: 4.56〜15.74秒
SciPy 1.13.1 で実行すると(df と confidence_interval() は SciPy 1.11 以降で使えます)、t = 3.79、自由度19.66、p = 0.0012 でした。p値は0.05を大きく下回るので有意差ありと判定できます。平均差10.15秒の95%信頼区間は4.56〜15.74秒で、0を含みません。両側検定のp値が0.05未満であることと、同じ検定の95%信頼区間が0を含まないことは同じ判定を表します。
この例は2群の標準偏差が近いため、Studentのt検定でも p = 0.0012 とほぼ同じ値になります。差が開くのは、分散と人数の両方が群ごとに違う場合です。効果量(Cohenのd)は1.61で、慣例の目安(0.2小・0.5中・0.8大)では大きい差に当たります。
対応のあるt検定と、対応を無視したときのp値の違い
同じ8人に研修前後で同じテストを受けてもらった場合は、対応のあるt検定を使います。
from scipy import stats
pre = [62, 70, 55, 68, 74, 59, 65, 71] # 研修前の得点
post = [66, 74, 57, 75, 76, 63, 64, 78] # 研修後の得点
print(stats.ttest_rel(post, pre)) # 対応あり: t = 3.84, 自由度 = 7, p = 0.0064
print(stats.ttest_ind(post, pre)) # 対応を無視: p = 0.32
平均の伸びは3.6点で、対応のあるt検定では p = 0.0064 と有意でした。同じデータを別々の人のものとして扱うと p = 0.32 になり、有意差は消えます。対応のあるt検定は各人の「後−前」の差だけを見るため、人による得点水準の違い(55点の人も74点の人もいる)が誤差から取り除かれるからです。同じ対象を2回測ったデータを対応なしで検定するのは、検出力を捨てる典型的な誤りです。
ExcelのT.TEST関数の引数(tails・type)
Excelでは、旧画面のデータをA2:A11、新画面をB2:B13に入れて =T.TEST(A2:A11,B2:B13,2,3) と入力します。返ってくるのはt値ではなくp値です。T.TESTは自由度を丸めずに計算するので、PythonのWelch検定と同じ p ≒ 0.0012 になる計算です。
| 引数 | 値 | 意味 |
|---|---|---|
| tails | 1 | 片側検定 |
| tails | 2 | 両側検定 |
| type | 1 | 対応のあるt検定 |
| type | 2 | 等分散を仮定した2標本(Student) |
| type | 3 | 分散が等しくない2標本(Welch) |
Microsoftのヘルプによると、type=1で2つの範囲の個数が違うと #N/A エラー、tailsに1・2以外を入れると #NUM! エラーになります。t値や自由度も報告に載せたい場合は、アドインの「分析ツール」のt検定を使うと一覧で出力されます。ただしMicrosoftのヘルプによると、分析ツールの「分散が等しくないと仮定した2標本による検定」は自由度を整数に丸める(この例では19.66→20)一方、T.TESTは丸めずに計算するため、p値がわずかに食い違います。報告する自由度とp値はT.TESTかPythonの値に揃えます。
比率の有意差の検定方法:カイ二乗検定とABテスト
ABテストのコンバージョン率のように「件数÷母数」を比べるときは、t検定ではなくカイ二乗検定か2標本の比率の検定を使います。A案が2,400訪問中120件(5.0%)、B案が2,400訪問中156件(6.5%)だったとします。
from scipy import stats
table = [[120, 2280], # A案: CVあり, CVなし
[156, 2244]] # B案: CVあり, CVなし
print(stats.chi2_contingency(table)) # Yates補正あり: χ² = 4.71, p = 0.0300
print(stats.chi2_contingency(table, correction=False)) # 補正なし: χ² = 4.98, p = 0.0256
SciPyの chi2_contingency() は、2×2表(自由度1)では連続性補正(Yatesの補正)を既定でかけるため、p = 0.0300 になります。補正なしの χ² = 4.98、p = 0.0256 は、2標本の比率のz検定(z = −2.23)とp値が完全に一致します(z2 = χ2)。この例ではどちらでも結論は変わりませんが、p値が0.05付近のときは補正の有無で判定が入れ替わることがあるため、報告には補正の有無を書きます。
Excelの CHISQ.TEST(実測値の範囲,期待値の範囲) は期待値の表を自分で作る必要があります。この例の期待値は各案とも「CVあり138、CVなし2,262」で、関数は補正なしの p = 0.0256 を返します。ABテストで事前に必要な訪問数や、途中で結果を見て止めることの問題はABテストの必要サンプル数と判定を誤らせる条件で扱っています。アンケートの表側・表頭で作る大きな表はクロス集計とカイ二乗検定の手順が参考になります。
サンプルサイズ(n数)と有意差の関係
有意差が出るかどうかは、差の大きさとばらつきだけでなく、n数で大きく変わります。標準偏差10点の試験で2群の平均が2点違う場合、1群あたりの人数だけを変えて両側のt検定を計算すると次のようになります。
| 1群の人数 | t値 | p値 | 判定(α=0.05) |
|---|---|---|---|
| 20人 | 0.63 | 0.53 | 有意差なし |
| 100人 | 1.41 | 0.16 | 有意差なし |
| 500人 | 3.16 | 0.0016 | 有意差あり |
| 1,000人 | 4.47 | 0.000008 | 有意差あり |
差は4行とも同じ2点です。ここから言えるのは、nが大きいほど小さな差でも有意になり、nが小さいと実務上大きな差でも見逃すということです。平均値のばらつきが√nに反比例して縮む仕組みは標準誤差の求め方で説明しています。
そこで、必要なn数はデータを取る前に「検出したい差の大きさ(効果量d)」「有意水準」「検出力(差があるときに有意と判定できる確率)」から逆算します。α=0.05の両側検定、検出力80%で、2群の平均を比べる場合の1群あたりの人数は、statsmodels 0.14.6 の計算で次のとおりです。
from statsmodels.stats.power import TTestIndPower
for d in (0.2, 0.5, 0.8):
n = TTestIndPower().solve_power(effect_size=d, alpha=0.05, power=0.8)
print(d, n)
# d=0.2(小): 393.4 → 394人
# d=0.5(中): 63.8 → 64人
# d=0.8(大): 25.5 → 26人
「有意差検定のn数はいくつか」に一律の答えはありませんが、各群10人前後では大きな差(d=0.8)ですら検出力は半分に届きません。調査設計の段階での標本サイズの決め方は定量調査のサンプルサイズの決め方も参照してください。
有意差検定の誤用パターンと結果の書き方
有意差検定で問題になるのは計算ミスより解釈と手続きの誤りです。次の6つは、ASA声明が原則3で戒める「p値が特定の閾値を超えたかだけで結論を出すこと」と、原則4が求める「すべてを報告する透明性」に反する誤りです。
- p = 0.06 を「有意傾向」と書く:基準を事前に決めた意味がなくなります。境界付近の結果は、p値と信頼区間をそのまま示します。
- 有意差なしを「効果なし」「同等」と結論する:前述のとおり、証明されたのは「差があるとは言えない」ことだけです。
- 多数の指標を検定して有意なものだけ報告する:20指標を調べれば、差がなくても平均1つは5%水準で有意になります。事前に主要指標を1つ決めておきます。
- データを見てから片側検定に切り替える:両側でp = 0.08の結果を片側にするとp = 0.04になりますが、これは判定を後から変えただけです。
- 有意になるまでデータを追加する:途中で何度も結果を見て、有意になった時点で止めると、第1種の過誤は5%を大きく超えます。
- 大量ログの微差を成果と呼ぶ:CV率5.0%と5.1%の0.1ポイント差でも、1群40万件あれば有意になります(p = 0.041)。売上や工数に換算した差の大きさで判断します。
検定そのものを使わないほうがよい場面もあります。全社員の勤怠記録のように母集団をすべて集めたデータで、その集団の平均差を知りたいだけなら、差は実測値そのものであり、「偶然の標本誤差か」を問う検定の前提がありません。検定が意味を持つのは、手元のデータを標本として、より広い集団や将来の結果について判断するときです。
報告の書き方は、検定名・統計量・自由度・p値・差の大きさ・信頼区間を1文に収める形が標準です。先の計算例なら次のように書きます。
「新画面の入力完了時間は旧画面より平均10.2秒短かった(Welchのt検定、t(19.7) = 3.79、p = 0.001、平均差の95%信頼区間 4.6〜15.7秒、d = 1.61)。」
p値を「p < 0.05」とだけ書くと、0.049なのか0.0001なのかが読み手にわかりません。統計ソフトが出した値を小数第3位まで書き、0.001未満は「p < 0.001」と書くのがAPAスタイルの慣例です。
よくある質問
有意差があるとはどういう意味ですか?
「本当は差がない」と仮定すると、観測したほどの差が偶然出る確率(p値)が、事前に決めた有意水準(通常5%)を下回ったという意味です。「有意差が認められる」も同じ意味で使われます。差が大きいことや、実務的に重要であることは意味しないため、報告では平均差などの差の大きさと信頼区間を併記します。
t検定で有意差なしとはどういう意味ですか?
p値が有意水準より大きく、今回のデータでは2群の平均に差があると言い切れなかったという意味です。差がゼロだと証明されたわけではありません。1群10人程度の小さな標本では、大きな差があっても有意にならないことがよくあります。同等であると主張したい場合は、同等性検定や非劣性検定を事前に計画する必要があります。
エクセルで有意差の検定はどうやりますか?
2群の平均の比較なら =T.TEST(範囲1,範囲2,tails,type) を使います。両側検定はtails=2、対応なしで分散の等しさを仮定しないWelchの検定はtype=3、同じ人の前後比較はtype=1です。返り値はp値で、0.05以下なら有意差ありと判定します。比率の比較には CHISQ.TEST を使いますが、期待値の表を自分で作る必要があります。
有意差検定のn数はいくつ必要ですか?
検出したい差の大きさで決まります。有意水準5%の両側検定・検出力80%で2群の平均を比べる場合、1群あたり、小さい差(効果量d=0.2)なら394人、中程度(d=0.5)なら64人、大きい差(d=0.8)なら26人が目安です。データを集める前に計算し、集めてから人数を足したり減らしたりしないことが前提です。
片側検定と両側検定はどちらを使えばよいですか?
迷ったら両側検定を使います。片側検定は「逆方向の差が出ても意味を持たない」ことがデータ収集前から明らかな場合に限られ、その場合も事前に決めて記録しておく必要があります。両側でp=0.08の結果を後から片側に変えてp=0.04とするのは誤用です。臨界値の違いは有意水準の決め方と5%の根拠で扱っています。