この記事でわかること
- 検定・統計量とscipy.statsの関数の対応一覧
- 返り値の受け取り方と、p値の取り出し方
- 等分散を仮定するかどうかで何が変わるか(実測で確認)
- ddof・alternativeなど間違えやすい引数
📌 前提知識:Python統計解析入門|Excelとの使い分けと学び方でライブラリの役割分担を押さえておくと読みやすくなります
2つのラインの検査データに差があるかを、これまではExcelのT.TESTで確かめていた。その集計をPythonに移すことになって、最初に詰まるのが関数名です。t検定を書きたいのに、ttest_indなのかttest_relなのか、対応のあるデータはどちらだったかで手が止まります。
この記事は、その都度調べ直さずに済むように検定と関数の対応を1枚にまとめた早見表です。あわせて、返り値の読み方と、実務で取り違えやすい引数を整理します。Excel側の対応表は統計・実験計画法の用語と公式まとめ|Excel関数対応一覧にありますので、移行中の方は並べて使ってください。
この早見表を使う場面
次のような場面で開くことを想定しています。
- 手法は決まっていて関数名だけ知りたいとき:対応のあるt検定と決めた後、書き方を確認する
- ExcelからPythonへ移すとき:使っていたExcel関数に対応するものを探す
- 生成AIが書いたコードを確認するとき:関数の選択と引数が意図どおりか照合する
NG例(△): 手法が決まっていない段階で関数から探し始める使い方です。「対応あり・なし」「正規分布を仮定できるか」が決まらないと関数は選べません。先に統計的検定の選び方(フロー図付き)で手法を確定させてから、この表に戻ってきてください。
もうひとつのNG例が、関数が動いた時点で正しいと判断することです。対応なしのデータにttest_relを使っても、配列の長さが同じならエラーは出ません。数値が返ってくることと、その数値が意味を持つことは別です。
検定と関数の対応表
まず読み込みは共通です。
from scipy import stats
平均・中央値の比較
| やりたいこと | 関数 |
|---|---|
| 1標本のt検定(基準値と比較) | stats.ttest_1samp(x, popmean=基準値) |
| 対応なし2群のt検定 | stats.ttest_ind(a, b) |
| 対応なし2群・等分散を仮定しない | stats.ttest_ind(a, b, equal_var=False) |
| 対応あり2群のt検定 | stats.ttest_rel(a, b) |
| 対応なし3群以上(一元配置分散分析) | stats.f_oneway(a, b, c) |
t検定の使い分けそのものはPythonでt検定(対応ありなし)、分散分析はPythonで分散分析で扱っています。分散分析で差が出た後の多重比較はPythonで多重比較法です。
正規分布を仮定しない検定
| やりたいこと | 関数 |
|---|---|
| 対応なし2群 | stats.mannwhitneyu(a, b) |
| 対応あり2群 | stats.wilcoxon(a, b) |
| 対応なし3群以上 | stats.kruskal(a, b, c) |
| 対応あり3群以上 | stats.friedmanchisquare(a, b, c) |
4つの使い分けと効果量の出し方はPythonでノンパラメトリック検定まとめ|scipy.statsの使い方にまとめました。
前提の確認・相関・分布
| やりたいこと | 関数 |
|---|---|
| 正規性の確認 | stats.shapiro(x) |
| 等分散性の確認 | stats.levene(a, b) |
| ピアソンの相関係数 | stats.pearsonr(x, y) |
| スピアマンの順位相関 | stats.spearmanr(x, y) |
| 正規分布の累積確率 | stats.norm.cdf(x, loc=平均, scale=標準偏差) |
| 正規分布のパーセント点 | stats.norm.ppf(確率, loc=平均, scale=標準偏差) |
正規性の判断はシャピロウイルク検定で正規性を確認する、等分散はルビーン検定で等分散性を確認するで扱っています。相関係数の求め方と散布図はPythonで相関分析|相関係数と散布図の求め方です。
計数値・区間推定
不良品数や不適合件数のように、個数を数えたデータを扱う場合です。
| やりたいこと | 関数 |
|---|---|
| 独立性の検定(分割表) | stats.chi2_contingency(表) |
| 適合度の検定(期待度数と比較) | stats.chisquare(観測, f_exp=期待) |
| 平均の信頼区間 | stats.t.interval(0.95, df, loc=平均, scale=標準誤差) |
chi2_contingencyは、返り値が4つ(統計量・p値・自由度・期待度数)と多い点に注意してください。期待度数が返るので、各セルが5以上あるかをその場で確認できます。考え方はカイ二乗検定(χ²検定)とは|独立性の検定と適合度の検定で扱っています。区間推定については信頼区間の求め方|Excelで95%信頼区間を計算する手順をご覧ください。
返り値の読み方
scipy.statsの検定関数は、統計量とp値を組にして返します。受け取り方は2つあります。
t, p = stats.ttest_ind(a, b) # 展開して受け取る
res = stats.ttest_ind(a, b) # まとめて受け取る
res.statistic # 統計量
res.pvalue # p値
どちらでも同じです。後者は名前で取り出せるため、コードを読み返したときに何を指しているか分かりやすくなります。
注意したいのは返るp値が原則として両側だという点です。片側で判断したい場合は、後で扱うalternativeを使います。
実例|2つのラインの引張強度を比べる
実際に値を出して確認します。同じ製品を作っている2つのラインから6個ずつ抜き取り、引張強度(MPa)を測ったとします。
from scipy import stats
A = [512, 508, 515, 510, 506, 513]
B = [498, 502, 495, 501, 499, 497]
t, p = stats.ttest_ind(A, B)
print(f"t={t:.4f} p={p:.7f}")
まず基本統計量を押さえておきます。
| ライン | 平均 | 標準偏差 |
|---|---|---|
| A | 510.667 | 3.327 |
| B | 498.667 | 2.582 |
t値は次の式で求まります。等分散を仮定する場合の形です。
\[ t = \frac{\bar{x}_A – \bar{x}_B}{\sqrt{s_p^2\left(\frac{1}{n_A} + \frac{1}{n_B}\right)}} \]
ここで \( s_p^2 \) は2群をまとめた分散です。Excelで同じ計算をするなら、関数1つで済みます。
=T.TEST(A2:A7, B2:B7, 2, 2) ← 両側・等分散を仮定する2標本
=T.TEST(A2:A7, B2:B7, 2, 3) ← 両側・等分散を仮定しない(ウェルチ)
第3引数が尾の数(2=両側)、第4引数が検定の種類です。Pythonでequal_var=Falseを指定することと、Excelで第4引数に3を指定することが対応します。
計算すると t = 6.980、p = 0.0000381 です。有意水準5%を大きく下回るので、2つのラインの平均には差があると判断できます。
等分散を仮定するかどうかで何が変わるか
ttest_indのequal_varは、実務で最も迷う引数です。同じデータで両方を計算してみます。
| 指定 | t値 | 自由度 | p値 |
|---|---|---|---|
equal_var=True(既定) |
6.980 | 10 | 0.0000381 |
equal_var=False |
6.980 | 9.42 | 0.0000515 |
t値が完全に同じところに気づいたでしょうか。偶然ではありません。2群のデータ数が等しいとき、等分散を仮定してもしなくてもt値は一致します。式を展開すると、どちらも分母が \( \sqrt{(s_A^2 + s_B^2)/n} \) に一致するためです。
変わるのは自由度です。等分散を仮定すると \( n_A + n_B – 2 = 10 \) ですが、仮定しない場合は10より小さい9.42です。自由度が小さいほど分布の裾が厚くなるので、同じt値でもp値はわずかに大きく出ます。
今回は差が明確なので結論は変わりません。ただしp値が0.05の前後にあるときは、この差で判定が入れ替わります。データ数が違う場合はt値そのものも変わるので、影響はさらに大きくなります。
迷ったときはequal_var=Falseを選んでおくほうが安全です。等分散が成り立つ場合でも結果はほとんど変わらず、成り立たない場合の誤りを避けられます。ウェルチの検定の考え方はウェルチのt検定を例題で解説で扱っています。
間違えやすい引数
ddof|標準偏差の分母
scipy.statsの検定関数は内部で標本標準偏差を使うため、通常は意識しません。問題になるのは自分で標準偏差を計算するときです。
| 書き方 | 分母 |
|---|---|
np.std(x) |
n(母標準偏差) |
np.std(x, ddof=1) |
n−1(標本標準偏差) |
stats.tstd(x) |
n−1(既定で標本) |
ExcelのSTDEV.Sに対応するのはddof=1のほうです。工程能力指数を計算するときにここを取り違えると、実力より良い値が出ます。詳しくはPythonで工程能力指数|Cp・Cpkの計算手順で扱いました。
alternative|片側か両側か
既定は両側です。片側で判断したい場合に指定します。
stats.ttest_ind(A, B, alternative="greater") # Aのほうが大きいか
stats.ttest_ind(A, B, alternative="less") # Aのほうが小さいか
向きは第1引数を基準に決まります。引数の順序を入れ替えると意味が逆になるので、指定を書き換えるより引数の順序を確認するほうが確実です。
nan_policy|欠測の扱い
既定では、欠測が1つでも混ざると結果がnanです。除いて計算したい場合は明示します。
stats.ttest_ind(A, B, nan_policy="omit")
ただし、欠測を除いてよいかは統計の問題ではなく現場の問題です。測定できなかったのか、規格外で記録から外したのかで扱いが変わります。自動で除く前に理由を確認してください。
Excel関数との対応
Excelから移行する場合の対応です。同じデータで両方を計算し、値が一致することを確認してから移行すると安全です。
| Excel | scipy.stats |
|---|---|
T.TEST(範囲1, 範囲2, 2, 2) |
ttest_ind(a, b) |
T.TEST(範囲1, 範囲2, 2, 3) |
ttest_ind(a, b, equal_var=False) |
T.TEST(範囲1, 範囲2, 2, 1) |
ttest_rel(a, b) |
CORREL(範囲1, 範囲2) |
pearsonr(x, y) の第1要素 |
CHISQ.TEST(観測範囲, 期待範囲) |
chisquare(観測, f_exp=期待) |
NORM.DIST(x, 平均, 標準偏差, TRUE) |
norm.cdf(x, loc, scale) |
NORM.INV(確率, 平均, 標準偏差) |
norm.ppf(確率, loc, scale) |
ExcelのT.TESTがp値だけを返すのに対し、scipy.statsは統計量とp値の両方を返します。この違いのため、Excelでは見えていなかったt値がPythonでは手に入ります。どこまでExcelで足りるかの判断はExcel統計の限界はどこか|統計ソフト4種の比較と選び方で整理しました。
よくある質問(FAQ)
Q. ttest_indとttest_relはどちらを使えばよいですか?
同じ対象を2回測ったならttest_rel、別々の対象を測ったならttest_indです。改善前後を同じ設備で測った、同じ製品を2回測定した、という場合は対応ありです。2つのラインから別々に抜き取った場合は対応なしです。判断がつかないときは、データを並べたときに行同士がペアになっているかで考えると分かりやすくなります。
Q. p値が返ってきたら、それだけで判断してよいですか?
差の有無は分かりますが、差の大きさは分かりません。p値はデータ数が多いほど小さくなるため、実務上は意味のない小さな差でも有意になります。効果量を併せて見てください。考え方は効果量(Cohen’s d・η²)の求め方にまとめています。
Q. 生成AIに書かせたコードの関数選択は信用してよいですか?
関数名そのものは正しく書かれることが多いのですが、対応あり・なしの取り違えと、equal_varの指定漏れは起こります。こちらが伝えていない条件は考慮されないためです。この表と照らして確認してください。生成コードの検証手順はAIにPythonコードを書かせる|統計解析での検証手順で扱っています。
Q. 検定の前に正規性を必ず確認すべきですか?
データ数が少ない場合ほど確認の意味があります。ただし正規性の検定もデータ数が多いと小さなずれで有意になるため、機械的に判断するのは適切ではありません。ヒストグラムで形を見たうえで判断し、明らかに歪んでいればノンパラメトリック検定へ切り替えます。
まとめ
- 検定関数は統計量とp値を組で返す。
res.statisticとres.pvalueで取り出せる - 返るp値は原則として両側。片側にするには
alternativeを指定する - データ数が等しいとき、equal_varを変えてもt値は同じ。変わるのは自由度とp値(例では10→9.42、0.0000381→0.0000515)
- 迷ったら
equal_var=False。等分散が成り立つ場合でも結果はほとんど変わらない - 自分で標準偏差を出すときは
ddof=1。ExcelのSTDEV.Sに対応する
関数名を調べるために開き、選択が正しいかを照らすために戻ってくる、という使い方を想定しています。手法そのものから確認したい場合は統計的検定の選び方(フロー図付き)、Excel側の対応を見たい場合は統計・実験計画法の用語と公式まとめ|Excel関数対応一覧へ進んでください。腰を据えて学び直すなら、レベル別のおすすめ書籍を統計学・実験計画法のおすすめ本まとめで紹介しています。
※ 掲載した関数名と引数は2026年8月時点の一般的な使い方にもとづく整理です。ライブラリの仕様は更新されるため、実際の挙動は使用しているバージョンの公式ドキュメントでご確認ください。数値例は解説のための計算例です。

