web-dev-qa-db-ja.com

スピアマンの相関と関係

ペアのランキングの小さなセットでスピアマンのローを計算しています。スピアマンは、タイを適切に処理しないことでよく知られています。たとえば、8つのランキングの2つのセットを取得すると、2つのセットのうちの1つで6が同点の場合でも、相関は非常に高くなります。

> cor.test(c(1,2,3,4,5,6,7,8), c(0,0,0,0,0,0,7,8), method="spearman")

    Spearman's rank correlation rho

S = 19.8439, p-value = 0.0274

sample estimates:
      rho 
0.7637626 

Warning message:
 Cannot compute exact p-values with ties

P値<.05は、このデータにとってかなり高い統計的有意性のようです。 Rのスピアマンのタイ修正バージョンはありますか?多くの結びつきで計算するためのこれまでの最良の式は何ですか?

23
Mulone

まあ、ケンドールタウランク相関は、2つの序数(またはランク変換)間の統計的依存性のノンパラメトリック検定でもあります変数-スピアマンのようなものですが、スピアマンとは異なり、タイを処理できます

より具体的には、threeKendall tau統計情報--tau-a、tau-b、およびtau-cがあります。 tau-bは、タイを処理するように特に適合されています。

Tau-b統計は、ties(つまり、ペアの両方のメンバーが同じ序数値を持っています)を除数項で処理します。除数項は、間の幾何平均を表しますxとyで結び付けられていないペアの数。

ケンドールのタウはスピアマンのタウではありません-それらは同じではありませんが、非常に似ています。コンテキストに基づいて、2つが十分に類似しているかどうかを判断する必要があります。

たとえば、tau-b

Kendall_tau_b = (P - Q) / ( (P + Q + Y0)*(P + Q + X0) )^0.5

[〜#〜] p [〜#〜]一致ペアの数(「一致」はそれぞれのランクを意味するデータポイントのペアのメンバーが同意します)

[〜#〜] q [〜#〜]不一致ペアの数

X:xで結ばれていないペアの数

Y:yで結ばれていないペアの数

実際には、スピアマンのローのバリエーションがあり、明示的に関係を説明します。ノンパラメトリックランク相関統計が必要な状況では、常にローよりもタウを選択しました。その理由は、rhoがsquared errorsを合計するのに対し、tauは絶対不一致を合計するためです。 。 tauとrhoの両方が有能な統計であり、選択する余地があることを考えると、矛盾(tau)に対する線形ペナルティは常にランク相関を表現するより自然な方法であるように思われました。これは推奨事項ではありません。コンテキストはまったく異なる可能性があり、それ以外の場合は指示されます。

32
doug

おもう exact=FALSEトリックを行います。

cor.test(c(1,2,3,4,5,6,7,8), c(0,0,0,0,0,0,7,8), method="spearman", exact=FALSE)

    Spearman's rank correlation rho

data:  c(1, 2, 3, 4, 5, 6, 7, 8) and c(0, 0, 0, 0, 0, 0, 7, 8)
S = 19.8439, p-value = 0.0274
alternative hypothesis: true rho is not equal to 0
sample estimates:
      rho 
0.7637626 
15
Eduardo Maçan

method = "spearman"を指定したcor.testは、実際にタイの補正されたスピアマン係数を計算します。 Zar 1984、Biostatistical Analysisの方程式から、タイ補正およびタイ補正されていないスピアマン係数を「手動で」計算して確認しました。コードは次のとおりです-自分で確認するために、独自の変数名に置き換えてください:

ym <- data.frame(lousy, dors) ## my data

## ranking variables
ym$l <- rank(ym$lousy)
ym$d <- rank(ym$dors)


## calculating squared differences between ranks
ym$d2d <- (ym$l-ym$d)^2



## calculating variables for equations 19.35 and 19.37 in Zar 1984

lice <- as.data.frame(table(ym$lousy))

lice$t <- lice$Freq^3-lice$Freq

dorsal <- as.data.frame(table(ym$dors))

dorsal$t <- dorsal$Freq^3-dorsal$Freq

n <- nrow(ym)
sum.d2 <- sum(ym$d2d)
Tx <- sum(lice$t)/12
Ty <-sum(dorsal$t)/12


## calculating the coefficients

rs1 <- 1 - (6*sum.d2/(n^3-n))  ## "standard" Spearman cor. coeff. (uncorrected for ties) - eq. 19.35

rs2 <- ((n^3-n)/6 - sum.d2 - Tx - Ty)/sqrt(((n^3-n)/6 - 2*Tx)*((n^3-n)/6 - 2*Ty)) ## Spearman cor.coeff. corrected for ties - eq.19.37


##comparing with cor.test function
cor.test(ym$lousy,ym$dors, method="spearman") ## cor.test gives tie-corrected coefficient!
6
tenar
  • タイ修正スピアマン

    _method="spearman"_を使用すると、関係が修正されたスピアマンが得られます。定義によれば、スピアマンのローは、単純にピアソンのサンプル相関係数サンプルデータのランクに対して計算されます。それで、それは存在と非存在の両方で機能します。元のデータをランク(同順位のミッドランク)に置き換えて_method="pearson"_を使用すると、同じ結果が得られることがわかります。

    _> cor.test(rank(c(1,2,3,4,5,6,7,8)), rank(c(0,0,0,0,0,0,7,8)), method="pearson")
    
    Pearson's product-moment correlation
    
    data:  rank(c(1, 2, 3, 4, 5, 6, 7, 8)) and rank(c(0, 0, 0, 0, 0, 0, 7, 8))
    t = 2.8983, df = 6, p-value = 0.0274
    alternative hypothesis: true correlation is not equal to 0
    95 percent confidence interval:
     0.1279559 0.9546436
    sample estimates:
      cor 
    0.7637626 
    _

    簡略化されたno-ties Spearmanバージョンが存在することに注意してください。これは、実際にはcor.test()実装で結び付けがない場合に使用されますが、上記の定義と同等です。

  • P値

    データが同点の場合、スピアマンおよびケンドール測定(cor.test()実装内)のいずれについても正確なp値は計算されないため、警告が表示されます。 Eduardoの投稿で述べたように、警告が出ないようにするには、_exact=FALSE_を設定する必要があります。

5
hanna.lacka

論文 「コンセンサスランキング問題への適用を伴う新しいランク相関係数」 は、同順位問題を伴うランキングを解決することを目的としています。また、Tau-bは、弱い順序の間の一致を測定するためのランキング相関測定として使用しないでください。

Emond、E. J.およびMason、D. W.(2002)、コンセンサスランキング問題への適用を伴う新しいランク相関係数。 J。マルチクリティカル。決定。 Anal。、11:17-28。 doi:10.1002/mcda.313

2
Moniba

私は同様の問題を抱えていたので、ここの回答とRのヘルプファイルを読むと、関係がある場合は、cor.test()関数にパラメータexact = FALSE)を追加する必要があることがわかりました。これを追加することにより、正確なP値を計算しようとせず、代わりに「検定統計量はゼロ平均と単位分散にスケーリングされた推定値であり、ほぼ正規分布します」。私の場合、結果はまったく同じでしたが、関係についての警告はありませんでした。

cor.test(x, y, method = "spearm", exact = FALSE)
1
liana_oliveira

Rパッケージ ConsRank には、EdmonとMasonのTau_Xの実装が含まれています。これは、関係を処理するための(数学的に)現在知られている最も良い方法のようです。

ドキュメント を参照してください。

Tau_X(X, Y=NULL)

ここで、Xは行列にすることができます。

@wibeasleyが指摘したように、Emond and Mason(2002)は、ケンダルのTau-bよりも優れていると思われる新しいランク相関係数であるTau_Xを提案しました。ネルソンゴンは、この論文が2002年のものであることに懸念を抱いており、数年前にこの問題に先行していましたが、スピアマンの相関関係は1904年から、ケンドールのタウは1938年から見落としていたようです。

0
glenn