Cox-Mantel 検定     Last modified: Aug 24, 2009

目的

Cox-Mantel 検定を行う

使用法

Cox.Mantel(group, event, time)

引数

group     群を識別するベクトル(1, 2 のいずれか)
event     死亡なら 1,生存なら 0 の値をとるベクトル
time      生存期間ベクトル

ソース

インストールは,以下の 1 行をコピーし,R コンソールにペーストする
source("http://aoki2.si.gunma-u.ac.jp/R/src/Cox_Mantel.R", encoding="euc-jp")

# Cox-Mantel 検定
Cox.Mantel <- function(      group,                                  # 群を識別するベクトル(1, 2 のいずれか)
                        event,                                  # 死亡なら 1,生存なら 0 の値をとるベクトル
                        time)                                   # 生存期間ベクトル
{
        method <- "Cox-Mantel 検定"
        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]
        stopifnot(length(group) == length(event),               # 要素数が同じであること
                  length(group) == length(time))
        len <- length(group)                                 # 要素数
        tg <- table(time, group*10+event)                    # 群とエンドポイントごとに生存時間をまとめる
        k <- nrow(tg)                                                # 行数
        nia <- table(group)[1]                                       # 第 1 群のケース数
        nib <- len-nia                                               # 第 2 群のケース数
        na <- c(nia, (rep(nia, k)-cumsum(tg[,1]+tg[,2]))[-k])        # 第 1 群の総症例数
        nb <- c(nib, (rep(nib, k)-cumsum(tg[,3]+tg[,4]))[-k])        # 第 2 群の総症例数
        m <- tg[,2]+tg[,4]                                   # 両群の死亡数の合計
        s <- m > 0                                           # 死亡があった死亡期間のベクトル
        m <- m[s]                                            # 取り出す
        r <- (na+nb)[s]                                              # 各死亡期間における死亡リスク保有者数
        A <- nb[s]/r
        U <- sum(tg[,4])-sum(m*A)                            # 検定統計量
        I <- sum(m*(r-m)/(r-1)*A*(1-A))                              # 誤差分散
        Z <- U/sqrt(I)                                               # 検定統計量を標準得点に換算
        P <- pnorm(abs(Z), lower.tail=FALSE)*2                       # P 値
        return(structure(list(statistic=c(U=U, "V(U)"=I, Z=Z), p.value=P,
                method=method, data.name=data.name), class="htest"))
}


使用例

# 富永祐民「治療効果判定のための実用統計学 − 生命表法の解説 −」蟹書房(第3回改訂版)74 ページ,表 4.1 のデータ
# 解析結果は 111 ページ

# 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)

> Cox.Mantel(group, event, time)

	Cox-Mantel 検定

data:  time: time, event: event, group: group 
U = 3.0298, V(U) = 2.7155, Z = 1.8386, p-value = 0.06597

・ 解説ページ


・ 直前のページへ戻る  ・ E-mail to Shigenobu AOKI

Made with Macintosh