ケンドールのτb     Last modified: Apr 13, 2004

目的

分割表形式で与えられたデータに基づいて,ケンドールのτbケンドールの順位相関係数)を計算する。

使用法

tau.b(x)

引数

x	分割表(合計欄を含めない)

ソース

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

# 分割表形式で与えられたデータに基づいて,ケンドールのτb(ケンドールの順位相関係数)を計算する
tau.b <- function(f)                                                 # 分割表(合計欄を含めない)
{
        R <- nrow(f)                                                 # 行数
        C <- ncol(f)                                                 # 列数
        n <- sum(f)                                                  # 全数
        rt <- rowSums(f)                                             # 行和
        ct <- colSums(f)                                             # 列和
        dr <- n^2-sum(rt^2)
        dc <- n^2-sum(ct^2)
        g <- matrix(0, nr=R+2, nc=C+2)
        cada <- f
        g[2:(R+1), 2:(C+1)] <- f
        PQ <- 0
        for (i in 1:R) {
                for (j in 1:C) {
                        cada[i, j] <-        sum(g[1:i, 1:j], g[(i+2):(R+2), (j+2):(C+2)]) -
                                        sum(g[1:i, (j+2):(C+2)], g[(i+2):(R+2), 1:j])
                        PQ <- PQ+g[i+1, j+1]*cada[i, j]
                }
        }
        taub <- PQ/sqrt(dr*dc)                                               # τb
        ase0 <- 2*sqrt((sum(f*cada^2)-PQ^2/n)/(dr*dc))                       # 標準誤差
        Z <- taub/ase0                                                       # 検定統計量
        P <- pnorm(abs(Z), lower.tail=FALSE)*2                               # P 値
        for (i in 1:R) {
                for (j in 1:C) {
                        f[i, j] <- f[i, j]*(2*sqrt(dr*dc)*cada[i, j]+taub*(rt[i]*dc+ct[j]*dr))^2
                }
        }
        ase1 <- sqrt(sum(f)-n^3*taub^2*(dr+dc)^2)/(dr*dc)            # 別法(よく使われる方法)
        Z2 <- taub/sqrt((4*n+10)/(9*n*(n-1)))                                # ケンドールの順位相関係数の検定のときに出てくる式
        P2 <- pnorm(abs(Z2), lower.tail=FALSE)*2                     # P 値
        c("tau b"=taub, "ase1"=ase1, "ase0"=ase0, "Z value"=Z, "P value"=P, "Z value 2"=Z2, "P value 2"=P2)
}


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

# 分割表データから,元のデータを構成し,R にある cor.test を使う。
tau.b2 <- function(f)
{
        x <- rep(row(f), f)
        y <- rep(col(f), f)
        cor.test(x, y, method="kendall")
}


使用例

f  <- matrix(c(
	0, 3, 1, 1,
	1, 4, 4, 0,
	1, 3, 0, 1,
	1, 0, 1, 0), byrow=TRUE, nc=4)	# 4 行 4 列の分割表

tau.b(f)

出力結果例

> tau.b(f)
     tau b       ase1       ase0    Z value    P value  Z value 2  P value 2 
-0.1806515  0.2043195  0.2067817 -0.8736341  0.3823175 -1.1455752  0.2519710 

 tau b       # ケンドールのτb(ケンドールの順位相関係数)
 ase1        # 標準誤差(H0: τb = 0 の検定のときに使う)
 ase0        # 標準誤差
 Z value     # H0: τb = 0 の検定統計量
 P value     # P 値
 Z value 2   # H0: τb = 0 の検定統計量(よく使われる検定方式によるもの)
 value P 2   # P 値

別法

分割表データから,元のデータを構成し,R にある cor.test を使う tau.b2 を定義しておく。

出力結果例

> tau.b2(f)

	Kendall's rank correlation tau

data:  x and y 
z = -1.1456, p-value = 0.2520	# R は「よく使われる検定方式」を採用していることが分かる
alternative hypothesis: true tau is not equal to 0 
sample estimates:
       tau 
-0.1806515 

Warning message: 	# この警告は気にしなくてよい
Cannot compute exact p-value with ties in: cor.test.default(x, y, method = "kendall") 

・ 解説ページ1解説ページ2


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

Made with Macintosh