2組のデータには,対応のないと対応のあるデータがあり,検定方法も異なります。例えば,男性と女性の歩行速度のデータは,対応のない2標本(2群)データです。また,同じ人がリハビリ前後の歩行速度のデータは,対応のある1標本(2変数)データです。
2標本の差の検定方法について,2群のデータが正規分布(シャピロ・ウイルク法で検定)に従う場合,平均値を用いるパラメトリック法が使われます。もし,2標本が正規分布に従い,かつ等分散(ロビーン法で検定)のとき,「2標本t検定」が使われ,等分散ではない場合,「ウェルチ法(Welch)」が適用されます。
さらに,2群データの中で,少なくとも1群のデータが正規分布ではない場合,中央値を用いるノンパラメトリック法の「マン・ホエットニー検定法(Mann-Whitney)」が適用されます。
対応のない2標本の差の検定方法と条件が図1に示されています1。
図1: 2標本データの差の検定
下記のプログラムは,データ性質により自動的に検定法を選び,2標本の差の検定を行います。例として,A群とB群の体重を測定したデータを変数AとBに代入したら,A群とB群の差があるかどうか,検定が行われます。
#2標本その検定
A <- c(60, 70, 72, 66, 64, 72, 76, 66, 68, 65)
B <- c(68, 72, 65, 66, 65, 64, 64, 65, 68, 65)
#正規性の検定(Shapiro-Wilk検定)
shapiroA <- shapiro.test(A)
shapiroB <- shapiro.test(B)
cat("\n【正規性検定(Shapiro-Wilk検定)】\n")
##
## 【正規性検定(Shapiro-Wilk検定)】
cat("A群: p-value =", round(shapiroA$p.value, 4),
ifelse(shapiroA$p.value < 0.05, "→ 正規分布ではない\n", "→ 正規分布とみなせる\n"))
## A群: p-value = 0.9588 → 正規分布とみなせる
cat("B群: p-value =", round(shapiroB$p.value, 4),
ifelse(shapiroB$p.value < 0.05, "→ 正規分布ではない\n", "→ 正規分布とみなせる\n"))
## B群: p-value = 0.0147 → 正規分布ではない
#正規分布していない場合 → Wilcoxon検定
if (shapiroA$p.value < 0.05 || shapiroB$p.value < 0.05) {
cat("\n少なくとも1群が正規分布でないため、Wilcoxon順位和検定を実行します。\n")
test_method <- "Wilcoxon順位和検定"
result <- wilcox.test(A, B, exact = FALSE)
} else {
#正規分布している場合 → 等分散性の検定(F検定)
var_test <- var.test(A, B)
cat("\n---- 等分散性検定(F検定) ----\n")
cat("p値:", var_test$p.value, "\n")
#等分散なら2標本t検定、そうでなければWelchのt検定
if (var_test$p.value > 0.05) {
cat("等分散とみなせるため、2標本t検定を実行します。\n")
test_method <- "Two sample t検定"
result <- t.test(A, B, var.equal = TRUE)
} else {
cat("等分散でないため、Welchのt検定を実行します。\n")
test_method <- "Welchのt検定"
result <- t.test(A, B, var.equal = FALSE)
}
}
##
## 少なくとも1群が正規分布でないため、Wilcoxon順位和検定を実行します。
#検定結果を表示
cat("\n---- 検定結果 ----\n")
##
## ---- 検定結果 ----
print(result)
##
## Wilcoxon rank sum test with continuity correction
##
## data: A and B
## W = 64, p-value = 0.3009
## alternative hypothesis: true location shift is not equal to 0
#値に応じたコメント
if (result$p.value < 0.05) {
message_text <- paste0(
"【検定結果の解釈】", test_method, "の結果、p-value = ",
round(result$p.value, 4), " < 0.05 なので,\n帰無仮説を棄却し、有意な差があると認められます。\nデータの箱ひげ図も確認してください。"
)
} else {
message_text <- paste0(
"【検定結果の解釈】", test_method, "の結果、p-value = ",
round(result$p.value, 4), " ≥ 0.05なので,\n差があると認められません。\nデータの箱ひげ図も確認してください。"
)
}
cat(message_text, "\n")
## 【検定結果の解釈】Wilcoxon順位和検定の結果、p-value = 0.3009 ≥ 0.05なので,
## 差があると認められません。
## データの箱ひげ図も確認してください。
#データの箱ひげ図表示
boxplot(list(data_A=A, data_B=B), main="箱ひげ図", col=c("lightblue", "green"))
2標本データの差の検定は,データの尺度,正規性および等分散性により,検定方法が異なるので,検定手順を正しく選択する必要があります。
R Markdownは,データ分析やレポート作成を行う際に非常に 便利なツールです。分析結果やRプログラムとその解説を 一つのドキュメント内でまとめることができ, HTML,PDF,Wordなどの形式で出力できます。
また,R Markdownでは,数式を簡単に作成できます。 例えば,2次方程式 \(ax^2+bx+c=0\)の解は,次の式 \[x_{1,2} = \frac{{-b \pm \sqrt{{b^2 - 4ac}}}}{2a}\] で求められます。
石川朗,対馬栄輝,「リハビリテーション統計学」第2版,中山書店。↩︎