マン・ホイットニーの U 検定 Last modified: Aug 20, 2009
目的
マン・ホイットニーの U 検定を行う
(R には,等価な検定を行う関数 wilcox.test が用意されている)
使用法
二つのデータベクトルを与えるとき
U.test(x, y, correct=FALSE)
U.test(x, y)
2 行 k 列の分割表を与えるとき
U.test(x, correct = FALSE)
U.test(x)
引数
x 第一群の観測値ベクトルまたは,分割表データ(y=NULL)
y 第二群の観測値ベクトル
correct 連続性の修正を行うかどうかを示す
correct=FALSE のときには,連続性の修正を行わない
correct=TRUE のときには,連続性の修正を行う
この引数が省略されたときは,連続性の修正を行う
ソース
インストールは,以下の 1 行をコピーし,R コンソールにペーストする
source("http://aoki2.si.gunma-u.ac.jp/R/src/U_test.R", encoding="euc-jp")
# マン・ホイットニーの U 検定
U.test <- function( x, # 第一群の観測値ベクトルまたは,分割表データ(y=NULL)
y = NULL, # 第二群の観測値ベクトル
correct = TRUE) # 連続性の補正を行うかどうか
{
method <- "マン・ホイットニーの U 検定"
if (is.null(y)) { # 2 × C 行列の分割表として与えられたとき
if (nrow(x) != 2) stop("2 x C matrix is expected.")
data.name <- paste(deparse(substitute(x)), "as 2 by C matrix")
nc <- ncol(x) # カテゴリー数
y <- x[2,] # 第二群の度数分布
x <- x[1,] # 第一群の度数分布
tie <- x+y # 合計した度数分布(同順位)
n1 <- sum(x) # 第一群のサンプルサイズ
n2 <- sum(y) # 第二群のサンプルサイズ
n <- n1+n2 # 合計したサンプルサイズ
rj <- c(0, cumsum(tie)[-nc])+(tie+1)/2 # カテゴリーに属するものの順位
U1 <- n1*n2+n1*(n1+1)/2-sum(x*rj) # 検定統計量
}
else { # 2 つのデータベクトルとして与えられたとき
data.name <- paste(deparse(substitute(x)), "and", deparse(substitute(y)))
x <- x[!is.na(x)] # 欠損値を持つケースを除く
y <- y[!is.na(y)] # 欠損値を持つケースを除く
n1 <- length(x) # 第一群のサンプルサイズ
n2 <- length(y) # 第二群のサンプルサイズ
n <- n1+n2 # 合計したサンプルサイズ
xy <- c(x, y) # 両群のデータを結合したもの
r <- rank(xy) # 順位のベクトル
U1 <- n1*n2+n1*(n1+1)/2-sum(r[1:n1]) # 検定統計量
tie <- table(r) # 同順位の集計
}
U <- min(U1, n1*n2-U1) # U 統計量
V <- n1*n2*(n^3-n-sum(tie^3-tie))/12/(n^2-n) # 同順位を考慮した分散
E <- n1*n2/2 # 期待値
Z <- (abs(U-E)-ifelse(correct, 0.5, 0))/sqrt(V) # Z 値
P <- pnorm(Z, lower.tail=FALSE)*2 # 両側 P 値
return(structure(list(statistic=c(U=U, "E(U)"=E, "V(U)"=V, "Z-value"=Z), p.value=P,
method=method, data.name=data.name), class="htest"))
}
使用例
二つのデータベクトルを与えるとき
> A <- rep(1:4, c(9, 12, 6, 3)) # 右と同じ c(rep(1, 9), rep(2, 12), rep(3, 6), rep(4, 3))
> B <- rep(1:4, c(4, 9, 11, 5)) # 右と同じ c(rep(1, 4), rep(2, 9), rep(3, 11), rep(4, 5))
> U.test(A, B, correct=FALSE)
マン・ホイットニーの U 検定
data: A and B
U = 310.5000, E(U) = 435.0000, V(U) = 3993.5593, Z-value = 1.9701, p-value = 0.04883
以下と比較のこと
> wilcox.test(A, B, correct=FALSE)
Wilcoxon rank sum test
data: A and B
W = 310.5, p-value = 0.04883
alternative hypothesis: true mu is not equal to 0
Warning message:
Cannot compute exact p-value with ties in: wilcox.test.default(A, B, correct = FALSE)
分割表を与えるとき
C1 C2 C3 合計
第一群 10 5 1 16
第二群 4 7 3 14
> x <- matrix(c(10, 5, 1, 4, 7, 3), byrow=TRUE, nrow=2)
> U.test(x, correct=FALSE)
マン・ホイットニーの U 検定
data: x as 2 by C matrix
U = 70.0000, E(U) = 112.0000, V(U) = 481.9862, Z-value = 1.9131, p-value = 0.05574
解説ページ
直前のページへ戻る
E-mail to Shigenobu AOKI