一般化 Wilcoxon 検定 Last modified: Aug 24, 2009
目的
一般化 Wilcoxon 検定を行う
使用法
Gen.Wil(group, event, time)
引数
group 群を識別するベクトル(1, 2 のいずれか)
event 死亡なら 1,生存なら 0 の値をとるベクトル
time 生存期間ベクトル
ソース
インストールは,以下の 1 行をコピーし,R コンソールにペーストする
source("http://aoki2.si.gunma-u.ac.jp/R/src/Gen_Wil.R", encoding="euc-jp")
# 一般化 Wilcoxon 検定を行う
Gen.Wil <- function( group, # 群を識別するベクトル
event, # 死亡なら 1,生存なら 0
time) # 生存期間ベクトル
{
getU <- function(tx, sx, ty, sy) # U の計算
{
if ((tx < ty && sx == 1 && sy == 1) | (tx <= ty && sx == 1 && sy == 0)) {
return(-1)
}
else if ((tx > ty && sx == 1 && sy == 1) | (tx >= ty && sx == 0 && sy == 1)) {
return(1)
}
else {
return(0)
}
}
method <- "一般化 Wilcoxon 検定"
data.name <- sprintf("time: %s, event: %s, group: %s",
deparse(substitute(time)), deparse(substitute(event)), deparse(substitute(group)))
OK <- complete.cases(group, event, time) # 欠損値を持つケースを除く
group <- group[OK]
event <- event[OK]
time <- time[OK]
n <- length(group)
o <- order(group) # グループによって並べ替え
time <- time[o]
group <- group[o]
event <- event[o]
na <- table(group)[1] # 各群のデータ個数
nb <- n-na # 各群のデータ個数
W <- 0 # 検定統計量
for (i in 1:na) {
for (j in (na+1):n) {
W <- W+getU(time[i], event[i], time[j], event[j])
}
}
Var.W <- 0 # 分散
for (i in 1:n) {
temp <- 0
for (j in 1:n) {
temp <- temp+getU(time[i], event[i], time[j], event[j])
}
Var.W <- Var.W+temp^2
}
Var.W <- na*nb*Var.W/n/(n-1)
Z <- W/sqrt(Var.W) # Z 値
P <- pnorm(abs(Z), lower.tail=FALSE)*2 # P 値
return(structure(list(statistic=c(W=W, "Var(W)"=Var.W, Z=Z), p.value=P,
method=method, data.name=data.name), class="htest"))
}
使用例
# 富永祐民「治療効果判定のための実用統計学 − 生命表法の解説 −」蟹書房(第3回改訂版)74 ページ,表 4.1 のデータ
# 解析結果は 107-109 ページ
# 1 は A 群,2 は B 群を表す
> group <- c(1, 1, 2, 2, 1, 1, 2, 2, 1, 2, 2, 1, 1, 1, 2, 2, 2, 1, 1, 2, 1, 2, 1, 2, 1, 2, 2, 1, 1, 1)
# 1 は死亡,0 は 生存(打ち切り)を表す
> event <- c(1, 0, 1, 1, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0)
# 生存期間
> time <- c(2, 20, 5, 1, 3, 17, 2, 3, 15, 14, 12, 13, 11, 11, 10, 8, 8, 3, 7, 3, 6, 2, 5, 4, 2, 3, 1, 3, 2, 1)
> Gen.Wil(group, event, time)
一般化 Wilcoxon 検定
data: time: time, event: event, group: group
W = 63.0000, Var(W) = 1320.3126, Z = 1.7338, p-value = 0.08295
解説ページ
直前のページへ戻る
E-mail to Shigenobu AOKI