nagoya.r #15 順位相関係数の信頼区間の算出
TRANSCRIPT
順位相関係数の
信頼区間の算出
はじめに
• 私が普段扱うデータ
–質問紙などの順序尺度データ
–正規性のないデータ
• そのデータでやること
–相関関係をみる
cor.test 関数
• 以下の分析を行う
–無相関検定
–信頼区間の算出
–相関係数の算出
cor.test 関数
• methodオプションにて相関係数の種類を指定
– “pearson”:ピアソンの積率相関係数
– “spearman”:スピアマンの順位相関係数
– “kendall":ケンドールの順位相関係数
–指定がない場合は “pearson”
> cor.test(dat[,1], dat[,2], method="spearman")
> cor.test(dat[,1], dat[,2], method="pearson")
Pearson's product-moment correlation
data: dat[, 1] and dat[, 2]
t = 4.2334, df = 17, p-value = 0.0005598
alternative hypothesis: true correlation is not
equal to 0
95 percent confidence interval:
0.3886164 0.8832042
sample estimates:
cor
0.7163759
ピアソンの場合
> cor.test(dat[,1], dat[,2], method="spearman")
Spearman's rank correlation rho
data: dat[, 1] and dat[, 2]
S = 393.5528, p-value = 0.002348
alternative hypothesis: true rho is not equal to 0
sample estimates:
rho
0.6547782
スピアマンの場合
> cor.test(dat[,1], dat[,2], method="spearman")
Spearman's rank correlation rho
data: dat[, 1] and dat[, 2]
S = 393.5528, p-value = 0.002348
alternative hypothesis: true rho is not equal to 0
sample estimates:
rho
0.6547782
信頼区間がどこかにいってしまった
スピアマンの場合
cor.test 関数
• 95%信頼区間が算出されるのは、ピアソンの積率相関係数の場合のみ
–順位相関係数を指定した場合は、95%信頼区間を算出してくれない
• 順位相関を使う場合、信頼区間はどうやって出せばよいのか
langtest
• http://langtest.jp/shiny/cor/
• すごく簡単
• Fisherの z変換を使用して、95%信頼区間を算出
DescTools パッケージ
• SpearmanRho関数を使用する
–使用方法は、以下のとおり
–引数
•データ2つ
•信頼水準(今回は95%)
> SpearmanRho(dat[,1],dat[,2],conf.level=0.95)
やってみた
• こんな感じ
–先述の方法の結果とも一致しました
> library(DescTools)
警告メッセージ: パッケージ ‘DescTools’ はバージョン 3.1.3 の R の下で造られました
> SpearmanRho(dat[,1],dat[,2],conf.level=0.95)
rho lwr.ci ups.ci
0.6544704 0.2983596 0.8506335
RVAideMemoireパッケージ
• 長い名前のパッケージ
• spearman.ci関数を使用する
–ブートストラップ法を用いて信頼区間の計算を行う
RVAideMemoireパッケージ
• spearman.ci関数を使用する
–使用方法は、以下のとおり
–引数
•データ2つ
•抽出回数
•信頼水準(今回は95%)
> spearman.ci(dat[,1], dat[,2], nrep=1000,
conf.level=0.95)
> library(RVAideMemoire)
*** Package RVAideMemoire v 0.9-51 ***
> spearman.ci(dat[,1], dat[,2], nrep=1000, conf.level=0.9
5)
Spearman's rank correlation
data: dat[, 1] and dat[, 2]
1000 replicates
95 percent confidence interval:
0.1940142 0.9193015
sample estimates:
rho
0.6547782
やってみた
NSM3 パッケージ
• これはケンドールの場合のみ
• kendall.ci関数を使用する
–2種類の計算方法が用意されている
•漸近解析
•ブートストラップ法
–計算方法が違うため、langtestの結果とは一致しない
NSM3 パッケージ
• kendall.ci関数を使用する
–漸近解析を用いる場合
–bootstrapオプションをFalseにする
> library(NSM3)
> kendall.ci(dat[,1], dat[,2], alpha=0.05,
bootstrap=F)
1 – alpha = 0.95 two-sided CI for tau:
0.187, 0.867
NSM3 パッケージ
• kendall.ci関数を使用する–ブートストラップを用いる場合
–bootstrapオプションをTrueにして、Bオプションで抽出回数を設定
> library(NSM3)
> kendall.ci(dat[,1], dat[,2], alpha=0.05,
bootstrap=T, B=1000)
1 – alpha = 0.95 two-sided CI for tau:
0.109, 0.838
ちなみに
cor.test 関数
• cor.test関数を使いつつ、順位相関係数の信頼区間を算出する方法
• rank関数を用いてデータを順位データに変換し、ピアソンの積率相関を算出する
> cor.test(rank(dat[,1]), rank(dat[,2]))
> cor.test(rank(dat[,1]), rank(dat[,2]), method="pea
rson")
Pearson's product-moment correlation
data: rank(dat[, 1]) and rank(dat[, 2])
t = 3.6724, df = 18, p-value = 0.001742
alternative hypothesis: true correlation is not
equal to 0
95 percent confidence interval:
0.2983596 0.8506335
sample estimates:
cor
0.6544704
やってみた
表示はピアソンになっているが、相関係数はスピアマンで算出した場合と一致
信頼区間が出てきた
比較
下限 上限
cor.test + rank 0.298 0.851
langtest 0.298 0.851
DescTools 0.298 0.851
RVAideMemoire 0.194 0.919
ブートストラップを用いるRVAideMemoire以外は、結果が一致
• スピアマンの順位相関の場合– cor.test関数とrank関数の組み合わせが一番簡単(ただしlangtestを除く)
–ブートストラップ法を使うなら、RVAideMemoireパッケージ(少し範囲が大きめに出る?)
• ケンドールの順位相関の場合– langtest、もしくはNSM3パッケージを使う
まとめ
おしまい