一般化 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

Made with Macintosh