正規性の検定(Shapiro-Wilk)とは ― 「まず正規性検定」が誤りである理由とR実装・Q-Qプロットの正しい使い方 ―

本記事にはプロモーション(広告・アフィリエイトリンク)が含まれます。
記事の目次
Toggleこの記事でわかること
- 「まず正規性を検定してからt検定」が誤りである理由:二段階検定の第一種過誤は名義5%に対し実測5.26%、事前検定の通過群に限ると6.43%まで膨らみます
- 正規性検定は標本サイズで結論が変わること:同じ軽い非正規データでも n=10 なら棄却率10.7%、n=1000 なら100%
ks.test(y, "pnorm", mean(y), sd(y))が誤用であること:同一データでShapiro-Wilkが p=4.207e-07 なのに ks.test は p=0.1021。正しくはLilliefors検定で p=0.0009377 です- t検定が必要としているのは「データの正規性」ではないこと:必要なのは標本平均の分布の正規性で、中心極限定理により n とともに自動的に満たされます
- 検定は頑健でも信頼区間は頑健でないこと:対数正規データの母平均に対する名義95%信頼区間の実測被覆は n=100 でも91.80%です
はじめに
「t検定を行う前に、まずShapiro-Wilk検定で正規性を確認しましょう」。この一文は、入門書にも大学の講義資料にも社内の解析マニュアルにも、驚くほど広く書かれています。正規性検定が通ればt検定、通らなければWilcoxon順位和検定という切り替えには、解析者にとって迷わずに済む安心感があります。
ところが、この手順は統計学の文献では長く批判されてきました。事前に正規性を検定して手法を切り替える二段階検定は推奨されない、というのが方法論研究の側の一貫した結論です。実務でも、規制当局に提出する臨床試験の解析計画でこの運用はまず採られません。解析手法はデータを見る前に確定するのが原則だからです。ただし本記事は、正規性の検定そのものを否定するわけではありません。誤っているのは「検定結果によって解析手法を自動的に切り替える」という使い方であり、Shapiro-Wilk検定はデータの素性を探索的に確かめる道具として今も十分に有用です。
なぜ誤りなのかを、本記事では言葉ではなくRの実測値で示します。掲載しているコードと出力はすべて R 4.5.1 で実際に実行したもので、ご自身の環境でそのまま再現できます。前半では正規性検定の中身と、正規性がそもそもどこに要求されているのかを整理し、後半でシミュレーションによる検証と、Q-Qプロットを中心とした正しい確認手順へ進みます。
正規性の検定とは ― Shapiro-Wilk・Lilliefors・Anderson-Darlingの違い
正規性の検定とは、手元のデータが正規分布に従う母集団から得られたものかどうかを、仮説検定の枠組みで判断する手続きです。仮説は次のように置かれます。
- 帰無仮説 H0:母集団は正規分布に従う
- 対立仮説 H1:母集団は正規分布に従わない
ここで極めて重要なのは、通常の仮説検定とは帰無仮説の立ち位置が逆転している点です。t検定は「差がない」という帰無仮説を棄却して差を主張しますが、正規性の検定は「棄却できなかったので正規と見なす」と使われます。つまり、証明したい主張の側を帰無仮説に置いているわけです。
「p値が大きい=正規性が証明された」ではありません。仮説検定において帰無仮説は採択できないからです。p値が0.05を超えたという事実が意味するのは「今回のデータでは正規性からの逸脱を検出できなかった」ということだけで、その理由が「本当に正規に近いから」なのか「標本サイズが小さくて検出力が足りないから」なのかを、p値は区別してくれません。p値の意味を根本から整理したい方は p値とは何か?― 統計検定でも実務でも誤解されがちな概念をやさしく解説 もあわせてご覧ください。
Shapiro-Wilk検定のW統計量
正規性の検定として最も広く使われているのが、1965年に提案されたShapiro-Wilk検定です。検定統計量 W は次の形で定義されます。
\[ W=\frac{\left(\sum_{i=1}^{n}a_i x_{(i)}\right)^2}{\sum_{i=1}^{n}(x_i-\bar{x})^2} \]
ここで \(x_{(i)}\) は観測値を小さい順に並べ替えたもの(順序統計量)、\(a_i\) は正規分布の順序統計量の期待値と共分散行列から決まる定数、\(\bar{x}\) は標本平均を意味します。W は0から1の間の値をとり、1に近いほど正規分布に近いことを示します。もう一つ、W は位置・尺度変換に対して不変です。この不変性は記事の後半でもう一度、印象的な形で顔を出します。
共通セットアップ ― 以降の x と y
以下、本記事全体を通して2つのデータを使います。片方は正規分布に従う x、もう片方は右に裾を引く対数正規分布の y です。ここで一度作っておき、以降の節では set.seed を書き直しません。
# 正規分布に従うデータ(平均50・標準偏差10)
set.seed(1234)
x <- rnorm(30, mean = 50, sd = 10)
# 右に裾を引くデータ(対数正規分布)― x と同じ乱数列から作ります
set.seed(1234)
y <- rlnorm(30, meanlog = 3, sdlog = 0.6)
同じ種(seed)から作っているため、x と y は同一の乱数列に由来します。この関係は記事の後半で効いてきますので、ここで「同じ乱数列から作ります」と明記しておきます。
正規データにShapiro-Wilk検定をかける
まず、正規分布から生成した x に対して shapiro.test() を実行します。
shapiro.test(x)
Shapiro-Wilk normality test
data: x
W = 0.94844, p-value = 0.1535
W = 0.94844 と1にやや近い値で、p値は0.1535。有意水準5%では帰無仮説を棄却しません。注意したいのは、真に正規なデータでも W は1.000にならない点です。n=30 程度ではこの程度のばらつきが生じるため、「W が0.95しかないから怪しい」という読み方は的外れです。
右に裾を引くデータにかける
次に、対数正規分布から生成した y に同じ検定をかけます。
shapiro.test(y)
Shapiro-Wilk normality test
data: y
W = 0.65935, p-value = 4.207e-07
W = 0.65935 と大きく1から離れ、p値は 4.207e-07。正規性は明確に棄却されました。同じ n=30 でも W が 0.94844 と 0.65935 でこれだけ違うことから、W が分布の形の違いをよく捉えていると分かります。なお対数正規分布は、AUC・Cmaxや検査値・入院日数など、実務で頻繁に出会う「右に裾を引く」データの典型的モデルです(分布を選べるようになる:正規分布以外の世界を覗く)。
同じデータに4つの検定をかけてみる
正規性の検定はShapiro-Wilkだけではありません。同じ y に対して代表的な4つの手続きを並べてみます。Lilliefors検定とAnderson-Darling検定は nortest パッケージで実行できます。
library(nortest)
shapiro.test(y)
lillie.test(y)
ad.test(y)
ks.test(y, "pnorm", mean(y), sd(y))
Shapiro-Wilk normality test
data: y
W = 0.65935, p-value = 4.207e-07
Lilliefors (Kolmogorov-Smirnov) normality test
data: y
D = 0.21678, p-value = 0.0009377
Anderson-Darling normality test
data: y
A = 2.7365, p-value = 4.511e-07
Exact one-sample Kolmogorov-Smirnov test
data: y
D = 0.21678, p-value = 0.1021
alternative hypothesis: two-sided
| 検定手法 | Rの関数 | 同じデータでのp値 | 特徴・使いどころ |
|---|---|---|---|
| Shapiro-Wilk | shapiro.test() | 4.207e-07 | 正規性検定の標準。小〜中標本でも検出力が高い |
| Lilliefors | lillie.test() | 0.0009377 | 母数の推定を織り込んだKS型。KS検定を正規性に使う正しい版 |
| Anderson-Darling | ad.test() | 4.511e-07 | 裾に重みを置くため裾の逸脱に敏感。補助的に使う |
| ks.test(誤用) | ks.test(y, "pnorm", mean(y), sd(y)) | 0.1021 | 保守的になりすぎる。正規性の検定に素の形で使ってはいけない |
上の3つはいずれも0.001未満のp値で正規性を棄却し、結論は一致しています。問題は4つ目です。
出力をよく見ると、Lilliefors検定と
ks.test の検定統計量 D は 0.21678 でまったく同じです。同じ統計量を計算しているのに、p値は 0.0009377 と 0.1021 で、「正規性を棄却する」「棄却できない」という正反対の結論になっています。理由は、ks.test が返すp値が「平均と分散が既知」を前提に導かれたものだからです。ところが mean(y) と sd(y) を渡す操作は、母数をデータから推定していることに他なりません。推定した分だけ当てはまりが良くなりすぎてp値が過大になり、保守的になりすぎて正規でないデータを見逃してしまうのです。この影響を補正した版がLilliefors検定であり、統計量が同じでp値だけ違うのは、まさにその補正のためです。
ただしKS検定そのものが悪いわけではありません。2標本KS検定は、平均の差だけでは見えない分布形の違いを捉える有用な手法です。使ってはいけないのは、母数を推定して理論分布に当てはめる1標本正規性検定としての用法に限られます(Kolmogorov–Smirnov検定:平均の差だけでは見えない「分布の違い」をとらえる方法)。なお、Rの shapiro.test が受け付ける標本サイズは n=3 から 5000 までで、n が3未満では実行できず、5000を超えるとエラーになります。
そもそも正規性はどこに必要なのか ― t検定・分散分析・回帰の前提を整理する
ここからが本記事の理論的な柱です。「t検定には正規性の仮定がある」という言い方は広く共有されていますが、その「正規性」がどの量について要求されているのかを正確に述べられる人は、実は多くありません。手法ごとに整理してみます。
| 手法 | 正規性が仮定されている対象 | 実際にどの程度重要か |
|---|---|---|
| 2標本(Welch)t検定 | 形式上は母集団の分布/実質は t 統計量の分布 | 第一種過誤に関しては非常に頑健。両群の n が同程度なら歪みの影響が打ち消し合い、n が数十を超えると中心極限定理で自動的に緩む |
| 1標本t検定・母平均の区間推定 | 標本平均と t 統計量の分布 | 2標本ほど頑健ではない。強く歪んだ分布では n=100 でも名義5%を守れず、後述する信頼区間の被覆低下(91.80%)と同じ現象 |
| 対応のあるt検定 | 差の分布(各時点の値ではない) | 元の測定値が歪んでいても差は対称になりやすい。元データを検定するのは誤り |
| 一元配置分散分析 | 各群内の誤差項(=残差) | 正規性より分散の等質性と群サイズの偏りの影響が大きい |
| 線形回帰・ANCOVA | 残差(目的変数そのものではない) | 係数の推定と標準誤差の一致性には不要。小標本での t/F 検定の厳密性にのみ効く |
| Wilcoxon順位和検定 | 分布形を仮定しない(ただし「無仮定」ではない) | 2標本では「分布形が同じで位置だけずれる」位置ずれモデルが背後にある |
第一に、t検定について。 教科書が「母集団は正規分布に従う」と書くのは事実ですが、t検定が実際に必要としているのは、標本平均(正確には t 統計量)の分布が理論どおりの形をしていることです。標本平均の分布は、元の分布が正規でなくても n が大きくなるほど正規分布へ近づきます。これが中心極限定理であり、n が大きければデータの分布が歪んでいてもt検定は成立するという本記事の主張の土台になります。導出の詳細は t検定の数理的導出とRによる実装例、中心極限定理そのものは 中心極限定理とは ― なぜ標本平均は正規分布に近づくのか? をご覧ください。
第二に、線形回帰とANCOVAについて。 ここで正規性が問われるのは残差であり、目的変数そのものではありません。「アウトカムが歪んでいるから回帰は使えない」という判断は前提を取り違えています。さらに、回帰係数の一致性にも標準誤差の妥当性にも正規性は要らず、必要になるのは小標本で t 検定や F 検定を厳密に行いたい場面に限られます。
第三に、Wilcoxon検定について。 ノンパラメトリック手法は「何も仮定しない」と誤解されがちですが、2標本のWilcoxon順位和検定を「中央値の差の検定」と解釈するなら、その背後には分布形が同じで位置だけずれているという仮定が要ります。正規性を捨てれば仮定が消えるのではなく、別の仮定に置き換わるだけなのです。

歪度・尖度で判断してはいけない理由
正規性を数値で確かめる方法として、歪度と尖度もよく紹介されます。正規分布ではどちらも0になるので、0からの離れ具合を見るという発想です。冒頭の x と y で計算してみます。
sk <- function(v) c(mean = mean(v), sd = sd(v),
skewness = mean((v-mean(v))^3)/sd(v)^3,
kurtosis = mean((v-mean(v))^4)/sd(v)^4 - 3)
round(rbind(x = sk(x), y = sk(y)), 3)
mean sd skewness kurtosis
x 47.036 9.030 0.641 1.173
y 19.800 14.745 2.974 10.426
対数正規データ
y の歪度2.974・尖度10.426はいかにも非正規らしい値です。問題は 正規データ x の方で、rnorm() で生成した正真正銘の正規データなのに、歪度0.641・尖度1.173と0からかなり離れた値が出ています。歪度は3乗、尖度は4乗を含む統計量なので少数の観測値の影響を強く受け、n=30 では推定が極めて不安定になるためです。したがって「歪度が0.6もあるから非正規だ」と判断してはいけません。実際、同じ x に対してShapiro-Wilk検定は p=0.1535 を返し、正規性を棄却していません。正規性の逸脱と外れ値を混同しない
実務で「Shapiro-Wilk検定が有意になった」という報告を受けたとき、まず確認すべきは分布全体の形ではなく、外れ値が1点混ざっていないかです。W 統計量は順序統計量に基づくため、極端な観測値が1つあるだけで容易に有意になります。
この場合に必要な対応は、解析手法をノンパラメトリックに切り替えることではなく、その1点がなぜ生じたのかを調べることです。入力ミスか単位の取り違えか機器の不具合か、それとも真の極端値か。原因を調べずに手法だけ変えると、本来なら発見できたデータの問題を見逃したまま解析を進めてしまいます。正規性が棄却された原因が1個の外れ値であることは非常に多く、その場合の対処は手法の変更ではなく外れ値の調査です(外れ値検出とSmirnov-Grubbs棄却検定)。
押さえておきたいのは次の3点です。①「正規性」が問われる対象は手法によって違う(t検定なら標本平均の分布、回帰なら残差、対応のあるt検定なら差の分布)。② p値が大きいことは正規性の証明ではない。③ 小標本では歪度・尖度も正規性検定も情報量が乏しい。これを踏まえて、「まず正規性検定、通ればt検定」という手順がなぜ統計的に誤りなのかを、Rのシミュレーションで正面から検証していきます。
「まず正規性検定」がなぜ誤りなのか ― Rシミュレーションで検証する
さて、いよいよ本題です。冒頭で触れた「通ればt検定、落ちればWilcoxon順位和検定」という切り替えを、ここからはRのシミュレーションで正面から検証します。
しかしこの手順は統計的に支持できません。理由は三つあります。第一に、正規性の検定は標本サイズが大きいほど棄却されやすくなるため、同じ母集団でもnによって結論が変わること。第二に、検定結果で手法を切り替える手続き自体が第一種過誤を歪めること。第三に、そもそもt検定が必要としているのは「データの正規性」ではないこと。以下、この三つをRのシミュレーションで確かめていきます(反復回数が多いため、実行には数十秒から数分かかります)。
理由その一:標本サイズが結論を決めてしまう
まず、正規性の検定が「何を検出しているのか」を確かめます。ごく軽く右に歪んだ対数正規分布(sdlog=0.25)、裾の重い自由度3のt分布、真に正規の分布の三つから標本を取り、標本サイズnを10から1000まで変えて、Shapiro-Wilk検定が有意水準5%で棄却する割合を2,000回の反復で調べます。
set.seed(2026)
ns <- c(10, 20, 50, 100, 300, 1000)
B <- 2000
rate_ln <- sapply(ns, function(n)
mean(replicate(B, shapiro.test(rlnorm(n, 0, 0.25))$p.value) < 0.05))
rate_t3 <- sapply(ns, function(n)
mean(replicate(B, shapiro.test(rt(n, df = 3))$p.value) < 0.05))
rate_nm <- sapply(ns, function(n)
mean(replicate(B, shapiro.test(rnorm(n))$p.value) < 0.05))
data.frame(n = ns, lognormal = rate_ln, t3 = rate_t3, normal = rate_nm)
n lognormal t3 normal
1 10 0.1070 0.1855 0.0575
2 20 0.1820 0.3380 0.0560
3 50 0.4305 0.6310 0.0545
4 100 0.7500 0.8850 0.0395
5 300 0.9955 1.0000 0.0485
6 1000 1.0000 1.0000 0.0540
同じ数値を表にすると、変化がより鮮明になります。
| 標本サイズ n | 対数正規(sdlog=0.25)=ごく軽い歪み | t(3)=裾の重い分布 | 真に正規 |
|---|---|---|---|
| 10 | 0.1070 | 0.1855 | 0.0575 |
| 20 | 0.1820 | 0.3380 | 0.0560 |
| 50 | 0.4305 | 0.6310 | 0.0545 |
| 100 | 0.7500 | 0.8850 | 0.0395 |
| 300 | 0.9955 | 1.0000 | 0.0485 |
| 1000 | 1.0000 | 1.0000 | 0.0540 |
いちばん左の対数正規(sdlog=0.25)は、実務上は平均の比較にほとんど影響しない程度の軽い歪みです。このまったく同じ母集団から標本を取っているのに、棄却される割合は標本サイズだけで 0.1070(10.7%)から 1.0000(100%)まで動いてしまいます。
一方いちばん右の「真に正規」の列は n によらず 0.0395〜0.0575 に収まっており、名義の5%どおりです。つまりここで見えているのは検定の欠陥ではなく、「検定とはそういうものである」という性質です。帰無仮説が厳密に真であることは現実のデータではまずありませんから、標本を増やせばどんなに小さな逸脱でも必ず検出されます。正規性の検定が測っているのは「非正規かどうか」ではなく、「非正規を検出できるだけのデータ量があるかどうか」なのです。

この性質が実務上なぜまずいのかを考えてみましょう。t検定が正規性の逸脱から受ける悪影響は、nが大きいほど小さくなります。標本平均の分布は、元の分布が多少歪んでいてもnが増えれば正規分布に近づくからです(中心極限定理とは ― なぜ標本平均は正規分布に近づくのか?)。
ここに、この手順の決定的な矛盾があります。
・正規性の逸脱が t 検定に与える悪影響は、n が大きいほど小さくなる(中心極限定理)
・正規性の検定が正規性を棄却する確率は、n が大きいほど大きくなる(検出力の増大)
両者は完全に逆向きです。その結果、正規性検定は「気にしなくてよいときほど警告を出し、気にすべきときほど沈黙する」という、判断の助けとしては最悪の振る舞いをします。n=10 で「p>0.05 だったから正規性は問題ない」と安心するのは、単に検出力が足りていないだけかもしれないのです。
理由その二:二段階検定は第一種過誤を歪める
次に、二段階の手続きそのものが持つ問題を調べます。1群20例の2群比較を5,000回繰り返し、(A)常にt検定、(B)常にWilcoxon順位和検定、(C)両群のShapiro-Wilk検定が両方ともp>0.05ならt検定・そうでなければWilcoxonという二段階方式、を比較します。データはやや歪んだ対数正規(sdlog=0.4)で、差がない場合と対数尺度で0.5ずらした場合の両方を見ます。
set.seed(555)
B <- 5000; n <- 20
run <- function(shift) {
p_t <- p_w <- p_2s <- numeric(B); pass <- logical(B)
for (i in 1:B) {
a <- rlnorm(n, 0, 0.4)
b <- rlnorm(n, 0, 0.4) * exp(shift)
p_t[i] <- t.test(a, b)$p.value
p_w[i] <- wilcox.test(a, b, exact = FALSE)$p.value
pass[i] <- shapiro.test(a)$p.value > 0.05 && shapiro.test(b)$p.value > 0.05
p_2s[i] <- if (pass[i]) p_t[i] else p_w[i]
}
c(t = mean(p_t < 0.05), wilcoxon = mean(p_w < 0.05),
two_stage = mean(p_2s < 0.05), pass_rate = mean(pass),
t_given_pass = mean(p_t[pass] < 0.05))
}
round(rbind(`Type I error` = run(0), `Power (shift=0.5)` = run(0.5)), 4)
t wilcoxon two_stage pass_rate t_given_pass
Type I error 0.0442 0.0462 0.0526 0.3730 0.0643
Power (shift=0.5) 0.9574 0.9620 0.9644 0.3944 0.9706
方針ごとに整理すると次のようになります。
| 方針 | 第一種過誤(名義5%) | 検出力(shift=0.5) |
|---|---|---|
| 常にt検定 | 0.0442 | 0.9574 |
| 常にWilcoxon | 0.0462 | 0.9620 |
| 二段階(Shapiro-Wilkで切替) | 0.0526 | 0.9644 |
| (参考)事前検定を通過した割合 pass_rate | 0.3730 | 0.3944 |
| (参考)通過した標本だけでのt検定 t_given_pass | 0.0643 | 0.9706 |
常にt検定を使えば第一種過誤は 0.0442(4.42%)、常にWilcoxonを使えば 0.0462(4.62%)で、どちらも名義の5%を守っています。ところが、事前に正規性を検定して手法を切り替える二段階方式だけが 0.0526(5.26%)と名義水準を超えています。三つの方針のうち、名義5%を守れていないのは二段階方式だけです。
しかも検出力は二段階 0.9644 に対して常にWilcoxon 0.9620 と、実質的に差がありません。手間を増やし、有意水準を歪め、その見返りが何もないというのがこの表の読み方です(有意水準そのものの意味はp値とは何か?― 統計検定でも実務でも誤解されがちな概念をやさしく解説で解説しています)。
では、なぜ二段階にすると水準が歪むのでしょうか。鍵になるのが pass_rate と t_given_pass の2つの数値です。この設定では、5,000回の反復のうち事前検定を通過したのは 0.3730、つまり37.30%だけでした。そして、その通過した標本に限ってt検定の第一種過誤を数えると 0.0643、すなわち6.43%にまで膨らみます。常にt検定を使ったときの4.42%と比べると1.5倍近い水準です。
事前検定を通過したデータは、もはやランダムな標本ではありません。「Shapiro-Wilk検定でp>0.05だった」という条件で選別された部分集団であり、統計学の言葉で言えば条件付き分布が元の分布とは別物になっています。t検定が名義5%を保証しているのは「母集団からランダムに抽出された標本」に対してであって、「見た目が正規らしいものだけを選り抜いた標本」に対してではありません。前提が壊れているのですから、水準が保証されないのは当然です。
直感的には、無作為に割り付けたあとで「検査値がきれいに揃っている患者さんだけを解析対象にする」という運用を思い浮かべてください。誰もが「それでは無作為化の意味がなくなる」と感じるはずです。事前の正規性検定でデータを選別することは、これとまったく同じ構造をしています。実際、極端な値を含まない標本ほど事前検定を通過しやすいため、通過群には分散が小さめに推定された標本が集まります。t統計量の分母が小さくなれば有意になりやすく、6.43%という数値はこの選択バイアスが生じている証拠です。
では、歪みがもっと強い場合はどうでしょうか。sdlog=1のより強く歪んだ対数正規で同じ実験を行います。
set.seed(777)
B <- 5000; n <- 20
sim <- function(shift) {
p_t <- p_w <- p_2s <- numeric(B)
for (i in 1:B) {
a <- rlnorm(n, 0, 1)
b <- rlnorm(n, 0, 1) * exp(shift)
p_t[i] <- t.test(a, b)$p.value
p_w[i] <- wilcox.test(a, b, exact = FALSE)$p.value
ok <- shapiro.test(a)$p.value > 0.05 && shapiro.test(b)$p.value > 0.05
p_2s[i] <- if (ok) p_t[i] else p_w[i]
}
c(t = mean(p_t < 0.05), wilcoxon = mean(p_w < 0.05), two_stage = mean(p_2s < 0.05))
}
round(rbind(`Type I error (no diff)` = sim(0),
`Power (shift=0.8)` = sim(0.8)), 4)
t wilcoxon two_stage
Type I error (no diff) 0.0326 0.0450 0.0450
Power (shift=0.8) 0.4860 0.6702 0.6708
| 方針(強い非正規・sdlog=1) | 第一種過誤(差なし) | 検出力(shift=0.8) |
|---|---|---|
| 常にt検定 | 0.0326 | 0.4860 |
| 常にWilcoxon | 0.0450 | 0.6702 |
| 二段階(Shapiro-Wilkで切替) | 0.0450 | 0.6708 |
歪みが強い場合、事前検定はほぼ確実に正規性を棄却するため、二段階方式は実質的にWilcoxonそのものになります。第一種過誤 0.0450 対 0.0450、検出力 0.6708 対 0.6702 と、一致していると言ってよい結果です。つまりこの状況では、事前検定は何の情報も加えていません。最初からWilcoxonと決めておけば済んだ話を、余分な検定を挟んで再現しているだけです。
確かにWilcoxonの 0.6702 はt検定の 0.4860 を大きく上回っており、強い歪みがあるときノンパラメトリック法が有利なのは事実です。しかしそれは事前検定の結果から知るべきことではなく、指標の性質から設計段階で判断すべきことです。血中濃度も入院日数も医療費も、右に裾を引くことは測定前からわかっています(ノンパラメトリック検定の代表格:ウィルコクソン検定の数理と実装)。
なお、この設定でのt検定の第一種過誤は 0.0326、つまり名義5%より低い値です。「非正規だとt検定は第一種過誤が膨らんで危険だ」という通説をよく耳にしますが、少なくともこの設定では成り立たず、むしろ保守的になる方向に働いています。危険なのはt検定そのものではなく、検定結果に応じて手法を切り替えるという手続きの方なのです。
理由その三:t検定が必要としているのはデータの正規性ではない
t検定が正規性を仮定しているのは、正確には「個々の観測値が正規分布に従うこと」ではなく「t統計量の分布が理論どおりであること」です。そして中心極限定理により、標本平均の分布は元の分布が歪んでいてもnが増えれば正規に近づきます。これを直接確かめましょう。sdlog=1という強く歪んだ対数正規分布から2群を生成し(真の差はなし)、Welchのt検定の第一種過誤を10,000回の反復で測ります。
set.seed(99)
B <- 10000
for (nn in c(10, 30, 100)) {
a1 <- replicate(B, {
g1 <- rlnorm(nn, 0, 1); g2 <- rlnorm(nn, 0, 1)
t.test(g1, g2)$p.value })
cat(sprintf("n=%4d Welch t type I error = %.4f\n", nn, mean(a1 < 0.05)))
}
n= 10 Welch t type I error = 0.0270
n= 30 Welch t type I error = 0.0392
n= 100 Welch t type I error = 0.0430
| 1群あたりの n | Welch t 検定の第一種過誤(名義5%) |
|---|---|
| 10 | 0.0270 |
| 30 | 0.0392 |
| 100 | 0.0430 |
sdlog=1 の対数正規分布は、ヒストグラムを描けば誰の目にも「これは正規ではない」とわかるほど強く右に歪んだ分布です。それでも、Welch t検定の第一種過誤は いずれも名義の5%を上回っていません。そして n が増えるにつれて 0.0430 へと5%に近づいていきます。これがまさに中心極限定理の効き方です。
つまり「データが正規分布に従っていないからt検定は使えない」という主張は、少なくとも第一種過誤の観点では正しくありません。前段の正規性検定で t 検定を排除する運用は、守るべきものを守らないまま手続きだけを増やしていることになります。
ただし「では正規性は完全に無視してよい」と早合点してはいけません。第一種過誤が守られていることと、推定が正しく行われていることは別問題だからです。
では正規性を無視してよいのか ― 信頼区間は頑健ではない
t検定は頑健でした。では、同じデータから計算される母平均の95%信頼区間はどうでしょうか。sdlog=1の対数正規分布から標本を取り、t.test() が返す95%信頼区間が真の母平均を含む割合(被覆確率)を10,000回の反復で測ります。
対数正規分布 \(\mathrm{LN}(\mu,\sigma^2)\) の母平均は次の式で与えられます。
\[ E[X]=\exp\left(\mu+\frac{\sigma^{2}}{2}\right)=\exp\left(0+\frac{1}{2}\right)\approx1.6487 \]
ここで \(\mu\) と \(\sigma\) は対数をとった後の正規分布の平均と標準偏差を意味します。今回は \(\mu=0\)、\(\sigma=1\) ですから母平均は \(e^{0.5}\approx1.6487\) で、中央値の \(e^{0}=1\) より大きくなるのは右に長い裾が平均を引き上げるためです。
set.seed(321)
B <- 10000
for (nn in c(10, 30, 100)) {
cov <- replicate(B, {
v <- rlnorm(nn, 0, 1); ci <- t.test(v)$conf.int
(ci[1] <= exp(0.5)) && (exp(0.5) <= ci[2]) })
cat(sprintf("n=%4d coverage of 95%% CI for the mean = %.4f\n", nn, mean(cov)))
}
n= 10 coverage of 95% CI for the mean = 0.8361
n= 30 coverage of 95% CI for the mean = 0.8770
n= 100 coverage of 95% CI for the mean = 0.9180
| 標本サイズ n | 名義95%信頼区間の実測被覆確率 |
|---|---|
| 10 | 0.8361 |
| 30 | 0.8770 |
| 100 | 0.9180 |
名義では95%のはずの信頼区間が、n=10 では 0.8361(83.61%)、n=30 で 0.8770(87.70%)、n=100 でも 0.9180(91.80%)しか真値を含んでいません。20回に1回しか外さないはずの区間が、n=100 でも12回に1回以上外している計算になります。検定は頑健でも、区間推定は頑健とは限らないのです。
なお、この被覆不足はそのまま1標本t検定の第一種過誤にあたります。名義95%の区間が91.80%しか真値を含まないということは、真の母平均を帰無仮説に置いたt検定が8.20%の確率で誤って棄却するということだからです。厳密に言えば、先ほど「t検定は頑健」と述べたのは2群を同程度のnで比べる場合の話であり、両群の歪みが打ち消し合うおかげで成り立っていました。1標本の平均に関する推測は、検定・区間推定のどちらも頑健ではありません。
原因は、右に大きく偏った分布では標本平均と標本標準偏差が強く相関することにあります。大きな値がたまたま含まれなかった標本では平均も標準偏差も同時に小さくなり、区間の中心が下にずれたうえ幅まで狭くなるため、真値を下側から外しやすくなるのです。
この事実は実務的にたいへん重要です。現代の臨床試験や疫学研究は「有意か否か」ではなく「点推定値とその95%信頼区間」で結果を語るのが標準ですから、壊れているのが検定ではなく区間の方だというのは深刻な話です。信頼区間とp値の関係を図解で理解する ― なぜ95%CIがp値より重要なのかもあわせてご覧ください。
対処の方向性は明確です。分布の歪みが想定される指標では、平均そのものを対数変換した尺度で扱う(幾何平均比として報告する)か、分布の形に依存しないブートストラップ法とは ― 信頼区間・バイアス補正・臨床試験での活用をRで実装するのBCa信頼区間を使う、といった選択肢を最初から解析計画に書いておくことです。
この章の結論は一つです。「正規性を検定で判定してから手法を切り替える」のをやめ、「どのような分布が想定されるかをデータを見る前に考え、解析計画で手法を固定する」ことです。
・標本サイズだけで結論が 10.7%→100% と変わる検定を、判断の自動スイッチにしてはいけません
・二段階検定は第一種過誤を 5.26%(通過群に限れば 6.43%)に歪め、検出力の見返りはありません
・強く歪んだ分布でも Welch t の第一種過誤は 0.0430 で、t検定は検定としては頑健です
・一方で95%信頼区間の被覆は n=100 でも 0.9180 にとどまり、区間推定は頑健ではありません
実務的には、AUC・Cmaxなどの薬物動態パラメータ、肝機能値をはじめとする検査値、入院日数、医療費といった右に裾を引くことが最初からわかっている指標については、あらかじめ自然対数変換した値を解析対象とする、順位に基づく手法を用いる、あるいはブートストラップ信頼区間を採用する、といった方針を解析計画書に明記しておきます。検定を通すためではなく、推定量を正しく解釈するために分布を考える ―― これが正規性との正しい付き合い方です。
正規性を確認する正しい手順 ― Q-Qプロットと可視化を中心に
検定結果で手法を切り替える運用が第一種過誤を歪めることは確認しましたが、分布の形を無視してよいわけではありません。問題は「正規性を気にすること」ではなく、「正規性の判断をp値という一次元の数値に丸めてしまうこと」にあります。実務でやるべき確認は次の4段階です。
1. まずQ-Qプロットとヒストグラムを見る。 図は「正規かどうか」だけでなく「どのようにずれているか」を教えてくれます。
2. 逸脱の種類を読み取る。 右裾が長いのか、裾が重いのか、外れ値なのか、離散化しているのか。
3. 逸脱の原因を調べる。 単位の取り違え、入力ミス、測定限界、部分集団の混在など、手法の変更では解決しない原因が隠れていることが非常に多くあります。
4. 解析計画に立ち返る。 事前に決めた手法がいまの分布でも妥当かを確認し、判断と理由を記録に残します。
先にp値を見ると図の読み方がそれに引きずられ、結局は二段階検定と同じ思考に戻ってしまいます。
Q-Qプロットとヒストグラムを描く
記事の冒頭で作った x(正規分布に従うデータ)と y(右に裾を引く対数正規データ)をそのまま使います。
par(mfrow = c(2, 2))
hist(x, breaks = 10, main = "正規データのヒストグラム", xlab = "値", col = "#EBF5FB")
qqnorm(x, main = "正規データのQ-Qプロット"); qqline(x, col = "#2E86C1", lwd = 2)
hist(y, breaks = 10, main = "右に裾を引くデータのヒストグラム", xlab = "値", col = "#FEF9E7")
qqnorm(y, main = "右に裾を引くデータのQ-Qプロット"); qqline(y, col = "#F39C12", lwd = 2)
実行すると2×2の4枚組の図が得られます。Q-Qプロットは観測値を小さい順に並べ、正規分布ならどこに来るはずかという理論分位点と対にした散布図で、従っていれば点は qqline() の基準線上に並びます。ヒストグラムは階級幅で印象が変わるため、小標本ではQ-Qプロットの方が信頼できます。
Q-Qプロットの直線性を数値で確かめる
「直線にどれだけ乗っているか」は相関係数で数値化できます。qqnorm() に plot.it = FALSE を渡すと、作図せず理論分位点($x)と観測値($y)の組が得られます。
qq_x <- qqnorm(x, plot.it = FALSE)
qq_y <- qqnorm(y, plot.it = FALSE)
round(cor(qq_x$x, qq_x$y), 4)
round(cor(qq_y$x, qq_y$y), 4)
[1] 0.9682
[1] 0.8013
正規データ x は相関 0.9682 でほぼ直線に乗り、右に裾を引く y は 0.8013 とはっきり外れています。Shapiro-Wilk の W は「順序統計量と、正規分布の順序統計量の期待値との相関」を基礎に組み立てられ、本質的にこの相関の2乗に相当する量です。実際 x の W = 0.94844、y の W = 0.65935 は上の相関の大小とよく対応します。ただし厳密には、相関の2乗をそのまま統計量とするのはShapiro-Francia検定のほうで、Shapiro-Wilkは順序統計量の共分散まで加味した重みを使います。そのため x では相関の2乗 0.937 に対し W = 0.94844 とわずかにずれますが、大小関係は変わりません。
つまりShapiro-Wilk検定とは、Q-Qプロットの直線性を数値化して検定の形に仕立てたものです。違うのは、図が「どの部分がどうずれているか」まで見せるのに対し検定は1つのp値に潰す点だけで、情報量が多いのは図の方です。
Q-Qプロットの形から何を読むか
代表的な形と、そこから疑うべきことを整理しておきます。
| プロットの形 | 分布の特徴 | 実務での典型例 | まず疑うこと |
|---|---|---|---|
| 右上が上に反り上がる | 右裾が長い(正の歪み) | AUC・Cmax、検査値、入院日数、医療費 | 対数変換で直線化しないか |
| 両端がS字に反る | 裾が重い(尖度が大きい) | 測定誤差の大きいアッセイ | 測定条件・施設の混在 |
| 両端が内側に寄る | 裾が軽い・打ち切りがある | 上限下限に張り付く評価尺度 | 天井効果・床効果 |
| 1〜2点だけ大きく外れる | 外れ値(分布自体は正規に近い) | 単位の取り違え、入力ミス | 手法変更より原資料の確認 |
| 階段状の段が並ぶ | 離散データ・同値の集中 | 検出限界以下の一律代入、整数スコア | 順序・計数データ用の手法 |
「まず疑うこと」の列に「ノンパラメトリック検定に切り替える」と書かれた行は1つもありません。逸脱の種類が違えば対処も違うのであって、すべてをWilcoxon検定という同じ受け皿に流し込むのは粗すぎます。作図は箱ひげ図をSASとRで実装する方法やデータ可視化の中級もご覧ください。

回帰モデルで正規性が問われるのは残差
回帰分析における正規性も混同されやすい点です。線形回帰で仮定されているのは目的変数そのものではなく残差の正規性であり、目的変数のヒストグラムが左右非対称でも、それだけでは何の問題も示していません。
fit <- lm(mpg ~ wt + hp, data = mtcars)
shapiro.test(residuals(fit))
Shapiro-Wilk normality test
data: residuals(fit)
W = 0.92792, p-value = 0.03427
燃費(mpg)を車重(wt)と馬力(hp)で説明するモデルの残差に p = 0.03427 が得られ、5%水準では「正規分布に従わない」と判断されます。しかしここでモデルを捨てるのは過剰反応です。n = 32 でこの程度の逸脱が出たにすぎず、係数と標準誤差の一致性は正規性を必要としません。
それより plot(fit) で系統的な曲がり・不等分散・影響の大きい点を見る方が情報量があります。「p = 0.03427 だったので対数変換した」という判断は、二段階検定を回帰に持ち込んだものです。
回帰診断は線形回帰の本質をつかむ、ベースライン調整モデルは共変量調整(ANCOVA)徹底解説で扱っています。
逸脱が確認されたときの選択肢
明確な逸脱が見え、データ側の問題でも説明できなかったとします。取りうる対処はノンパラメトリック検定だけではありません。
| 対処 | 向いている場面 | 注意点 |
|---|---|---|
| 対数変換 | AUC・Cmaxなど正の値で右裾が長い指標 | 解釈が幾何平均に変わる。ゼロを含むと使えない |
| ノンパラメトリック検定 | 順位や中央値で臨床的に解釈できる場合 | 「無仮定」ではない。効果量と共変量調整が難しい |
| ブートストラップCI | 平均を保ったまま区間の精度を確保したい場合 | 乱数種を計画に記載。極小標本では効果が限定的 |
| 一般化線形モデル(GLM) | 件数や比率など正規を仮定すべきでないデータ | リンク関数で解釈が変わる。過分散の確認が必須 |
| 頑健な標準誤差 | 係数の解釈を保ちつつ不等分散に備える場合 | 小標本では不安定。小標本補正の要否を確認 |
| 何もしない | nが十分大きく逸脱が軽度で関心が平均にある場合 | CIの被覆は劣化しうる。区間の解釈に注意を添える |
このうち対数変換は、右に裾を引くデータにもっとも効果が明快です。冒頭の y に対数を取り、もう一度Shapiro-Wilk検定にかけてみます。
shapiro.test(log(y))
Shapiro-Wilk normality test
data: log(y)
W = 0.94844, p-value = 0.1535
p値は 4.207e-07 から 0.1535 へ変わり、逸脱は完全に解消しました。さらに注目していただきたいのは W の値です。対数変換すると、元の正規データ x とまったく同じ W = 0.94844 に戻ります。 冒頭で x と y を同じ乱数列から作っているため
log(y) は x の線形変換になっており、W が位置・尺度変換に不変であることから値が完全に一致するのです。製薬実務でAUCやCmaxを対数変換して解析するのは、この性質の利用です。対数変換は小手先の技ではなく、解釈する量そのものが変わります。 対数スケールの平均を指数変換して元に戻すと、それは算術平均ではなく幾何平均です。したがって対数変換は「非正規だったから」という後付けではなく、「この指標は比で語るのが自然だから」という事前の医学的・薬理学的な理由で計画に書き込むべきものです。平均を保ったまま区間推定の精度を上げたい場合は、ブートストラップ法のBCa信頼区間などが選択肢になります。
実務でのポイント ― 解析計画書への記載とSASでの実装
正規性への対処は「解析時の判断」ではなく「計画時の設計」の問題です。
臨床試験では、解析手法は解析計画書(SAP: Statistical Analysis Plan)でデータを見る前に確定するのが原則です。ICH E9 が求めているのも一般に「事前に規定された解析」という考え方であり、データを見てから手法を切り替える運用はこの原則と整合しません。
仮に「Shapiro-Wilk検定で p < 0.05 ならWilcoxon検定」と書いてあれば形式的には事前規定ですが、この規則自体が第一種過誤を名義5%から5.26%へ、事前検定通過群では6.43%へ押し上げます。書いた規則の統計的性質を検討したうえで採用する必要がある、という点が勘所です。
解析計画書への書き方の例
以下はあくまで例文であり、当局提出資料の文面そのものではありませんが、考え方の型としては参考になるはずです。
- 平均で語る指標:「主要評価項目の変化量は、ベースライン値と施設を共変量とする共分散分析により解析する。分布の形状に応じて解析手法を変更することはしない。」
- 右に裾を引くことが既知の指標:「AUCは自然対数変換した値を解析対象とし、投与群を固定効果とする線形モデルにより解析する。結果は幾何平均比とその両側95%信頼区間として示す。」
- 感度分析として位置づける場合:「主要解析の頑健性を確認するため、感度分析として順位に基づく解析を実施する。ただし主要な結論は主要解析に基づく。」
最後の一項は特に有効です。手法を検定で選ぶのではなく、片方を主要解析、もう片方を感度分析として事前に計画する設計なら、αを歪めずに結論の頑健性も示せます。
SASでの実装 ― PROC UNIVARIATE
製薬企業やCROの実務ではSASが主要な解析環境になります。正規性の確認は PROC UNIVARIATE に normal オプションを付けるのが標準です。
proc univariate data = work.sample normal plot;
var response;
qqplot response / normal(mu = est sigma = est);
histogram response / normal;
run;
normal を指定すると “Tests for Normality” として、Shapiro-Wilk、Kolmogorov-Smirnov、Cramér-von Mises、Anderson-Darling の4つが出力されます。ただしShapiro-Wilkが計算されるのは n≤2000 のときだけで、n がそれを超えると経験分布関数(EDF)に基づく残り3つのみになります。qqplot と histogram で図も得られるため、「まず図を見る」手順はSASでも1つのプロシジャで完結します。
SASは n が2000を超えるとShapiro-Wilk統計量を計算しません(Kolmogorov-Smirnovなど残り3つは n によらず出力されます)。一方 Rの
shapiro.test は n = 3〜5000 が適用範囲です。RとSASの両方で処理する検証作業では、この境界の違いで「片方にだけW統計量が出ない」状況が起こりえます。それでも正規性の検定を使う場面はあるか
正規性の検定そのものが無用というわけではありません。多数の変数から「どれを先に図で見るか」の優先順位を付ける探索的チェック、単位の取り違えや入力ミスを炙り出すデータ品質の警報器、報告書に分布の非対称性を示す補助情報。いずれも理にかなった用途です。ただし「p < 0.05 だったのでノンパラメトリック検定を用いた」と続けてはいけません。
① 解析手法はSAPで事前に固定します。対数変換・ノンパラ・ブートストラップCIのいずれを採るかを、データを見る前に医学的な理由から決めておきます。
② 正規性はQ-Qプロットで目視確認します。p値ではなく「どうずれているか」を読みます。
③ 逸脱を見つけたら、まず原因を調べます。入力ミス・単位違い・測定限界・部分集団の混在など、手法の変更では解決しない原因を先に潰します。
要するに、正規性の検定は「情報」としては役に立ちますが、「判断の自動スイッチ」としては使えないということです。なお統計検定準1級の受験者は、順位統計量が何を推定しどのような仮定の下で妥当なのかを押さえておきたいところで、この点は統計検定準1級「ノンパラメトリック法」攻略で整理しています。
参考書籍
正規性の仮定をめぐる議論は、数理的な背景と実務的な判断の両方を知って初めて腑に落ちるものです。本記事の内容をさらに深めたい方に向けて、理論・モデリング・医療実務という3つの角度から、いずれも版を重ねた定番書をご紹介します。



関連記事・次のステップ
実際の解析では「では代わりに何を使うのか」という問いが続きます。前後比較や交差試験のような対応のある設計では対応のあるt検定とウィルコクソン符号順位検定の選択が、3群以上では等分散性も絡む一元配置分散分析(One-way ANOVA)が次の論点になります。Bartlett検定やLevene検定で等分散性を事前検定する運用にも二段階検定と同じ問題がありますので、判断基準は事前検定のp値ではなく、分布に何が想定されるかという設計上の考え方です。
「検定は頑健でも区間推定は頑健とは限らない」という論点を掘り下げるなら、信頼区間の意味を扱った区間推定入門と、分布の仮定を置かずに区間を構成するブートストラップ法の組み合わせが有効です。被覆確率を一度自分の手で確かめておくと、論文の95%信頼区間の読み方が変わります。本記事のRコードを動かす環境づくりからという方は、R入門から始めていただくのが早道です。
まとめ
本記事では、「まずShapiro-Wilk検定で正規性を確認し、通ればt検定、落ちればWilcoxon検定」という広く教えられている手順が統計的に誤りであることを、R 4.5.1 の実測で確認してきました。第一に、正規性の検定は標本サイズに強く依存し、同じ「ごく軽い非正規」でも n=10 では棄却率10.7%、n=1000 では100%棄却されます。ところがt検定が逸脱から受ける影響は中心極限定理で n が大きいほど小さくなるため、検定は気にしなくてよいときほど警告を出し、気にすべきときほど沈黙します。第二に、二段階検定はαを歪め、常にt検定なら4.42%、常にWilcoxonなら4.62%なのに、切り替えると5.26%、事前検定通過群では6.43%に達しました。
一方で、正規性を無視してよいわけではありません。t検定が必要としているのは標本平均の分布の正規性であり、強く歪んだ対数正規データでも n=100 のWelch t検定の第一種過誤は0.0430にとどまる一方、母平均の95%信頼区間の被覆は n=100 でも91.80%しかありません。手法の選択そのものも結論を変えます。同一データにShapiro-Wilkが p=4.207e-07 を返す一方、ks.test(y,"pnorm",mean(y),sd(y)) は p=0.1021 で「棄却できない」と告げ、Lilliefors検定は p=0.0009377 でした。D統計量は同じ0.21678なのに、です。
実務ですべきことは3点です。解析計画で事前に手法を固定すること、正規性はQ-Qプロットで目視すること、逸脱を見つけたら種類と原因を読むこと。直線性を数値化すると正規データは0.9682、右裾を引くデータは0.8013となり、W はまさにこれを数値化した量でした。検定と可視化は対立せず、図の方が多くを語るというだけです。さらに深めるなら区間推定入門やノンパラメトリック法の攻略記事が次の一歩になります。本記事のコードはそのまま再現できますので、ぜひご自身の手で数値を確かめ、明日の解析計画に活かしていただければと思います。











