相関係数の有意性検定     Last modified: Aug 21, 2009

目的

二次データに基づき,ピアソンの積率相関係数スピアマンの順位相関係数ケンドールの順位相関係数の無相関検定を行う
(生データからの検定には,R に用意されている cor.test 例1例2例3, を用いる)

使用法

cor2.test(n, r, conf.level=0.95, method=c("pearson", "kendall", "spearman"))

引数

n          サンプルサイズ
r          ピアソンの積率相関係数,スピアマンの順位相関係数,ケンドールの順位相関係数
method     "pearson", "kendall", "spearman" のいずれか
           省略されたときには pearson が指定されたことになる
conf.level 信頼区間を求めるときの信頼率(デフォルトは 0.95 つまり,95% 信頼区間を求める)

ソース

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

# 二次データに基づき,ピアソンの積率相関係数,スピアマンの順位相関係数,ケンドールの順位相関係数の無相関検定を行う
cor2.test <- function(       n,                                                      # サンプルサイズ
                        r,                                                      # 相関係数
                        conf.level=0.95,
                        method = c("pearson", "kendall", "spearman"))           # 相関係数の種類
{
        data.name <- sprintf("n = %s, r = %s", n, r)
        method <- match.arg(method)                                          # 引数の補完
        if (method != "kendall") {                                              # ケンドールの順位相関係数以外の場合
                method <- paste(if (method == "pearson") "ピアソンの積率相関係数"
                                else "スピアマンの順位相関係数", "の検定と推定", sep="")
                t <- abs(r)*sqrt((n-2)/(1-r^2))                                      # 検定統計量
                df <- n-2                                                    # 自由度
                p <- pt(t, df, lower.tail=FALSE)*2                           # P 値
                q <- qnorm(0.5-conf.level/2)
                conf.int <- tanh(atanh(r)+c(q, -q)/sqrt(n-3))
                attr(conf.int, "conf.level") <- conf.level
                return(structure(list(statistic=c(t=t), parameter=c(df=df), p.value=p,
                        conf.int=conf.int, method=method, data.name=data.name),
                        class="htest"))                                         # 結果をまとめて返す
        }
        else {                                                                  # ケンドールの順位相関係数の場合
                method <- "ケンドールの順位相関係数の検定"
                z <- abs(r)/sqrt((4*n+10)/(9*n*(n-1)))                               # 検定統計量
                p <- pnorm(z, lower.tail=FALSE)*2                            # P 値
                return(structure(list(statistic=c("Z-value"=z), p.value=p,
                        method=method, data.name=data.name), class="htest"))    # 結果をまとめて返す
        }
}


使用例

> cor2.test(24, 0.476)                       # ピアソンの積率相関係数の場合

	ピアソンの積率相関係数の検定と推定

data:  n = 24, r = 0.476 
t = 2.5387, df = 22, p-value = 0.01871
95 percent confidence interval:
 0.08985743 0.73773850 

> cor2.test(24, 0.282, method="spearman")    # スピアマンの順位相関係数の場合

	スピアマンの順位相関係数の検定と推定

data:  n = 24, r = 0.282 
t = 1.3787, df = 22, p-value = 0.1819        # 漸近検定のため cor.test(..., method="spearman") の結果とは異なる
95 percent confidence interval:              # cor.test(..., method="spearman") では定義されていない
 -0.1369792  0.6153911 

> cor2.test(24, 0.493, method="kendall")     # ケンドールの順位相関係数の場合

	ケンドールの順位相関係数の検定

data:  n = 24, r = 0.493 
Z-value = 3.3751, p-value = 0.000738

・ 解説ページ(1)解説ページ(2)解説ページ(3)


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

Made with Macintosh