斯皮尔曼相关与关系

时间:2012-05-22 23:12:27

标签: r correlation

我正在计算Spearman的rho上的小型配对排名。 斯皮尔曼以不妥善处理领带而闻名。例如,取2组8个排名,即使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中是否有一个关系纠正版的Spearman? 到目前为止,用很多关系计算它的最佳公式是什么?

7 个答案:

答案 0 :(得分:30)

嗯, Kendall tau等级相关性 也是两个序数(或等级转换)变量之间统计依赖性的非参数检验 - 如Spearman's,但不同Spearman's,可以处理关系

更具体地说,有三个 Kendall tau统计数据 - tau-a,tau-b和tau-c。 tau-b专门用于处理关系。

tau-b统计通过除数项处理 tie (即,该对的两个成员具有相同的序数值),该除数项表示未绑定在x上的对的数量之间的几何平均值和数字没有关系。

Kendall的tau不是Spearman的 - 他们不一样,但他们也非常相似。你必须根据背景来决定两者是否足够相似,而另一个可以替代另一个。

例如, tau-b

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

P 一致对的数量('一致'表示该对数据点中每个成员的排名一致)

不一致对的数量

X0 :未绑定x的对数

Y0 :与y绑定的对数

事实上,Spearman的rho的一个变体明确地说明了关系。在我需要非参数秩相关统计量的情况下,我总是选择tau而不是rho。原因是 rho求和平方错误,而 tau求和绝对值 差异。鉴于tau和rho都是有能力的统计数据而且我们还有待选择,对我来说,差异性(tau)的线性惩罚似乎一直是表达等级相关性的更自然的方式。这不是推荐,你的背景可能会有很大不同,并且另有规定。

答案 1 :(得分:15)

我认为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 

答案 2 :(得分:6)

cor.test with method =" spearman"实际上计算了关系纠正的斯皮尔曼系数。 我已经通过"手动"检查了它。根据Zar 1984,Biostatistical Analysis中的方程计算平衡校正和未校正的Spearman系数。这是代码 - 只需替换自己的变量名来检查自己:

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!

答案 3 :(得分:5)

  • 领带纠正的斯皮尔曼

    使用method="spearman"为您提供绑定纠正的Spearman。根据定义,Spearman的rho只是样本数据排名 Pearson样本相关系数。因此,无论是在场还是没有关系,它都有效。 您可以看到,在用他们的排名替换原始数据(用于关系的中间人)并使用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 
    

    请注意,存在一个简化的无关系Spearman版本,实际上在没有关联的cor.test()实现中使用,但它等同于上面的定义。

  • P值

    如果数据中存在关联,则不会为Spearman和Kendall度量(在cor.test()实现中)计算精确的p值,因此会出现警告。正如Eduardo的帖子中提到的,为了不发出警告,你应该设置exact=FALSE

答案 4 :(得分:2)

论文"A new rank correlation coefficient with application to the consensus ranking problem"旨在解决具有并列问题的排名。它还提到,不应将Tau-b用作衡量弱序之间一致性的排名相关性度量。

Emond,E. J.和Mason,D. W.(2002),一种新的等级相关系数,适用于共识等级问题。 J。多暴击。迪克斯肛门,11 :17-28。 doi:10.1002 / mcda.313

答案 5 :(得分:1)

我遇到了类似的问题,通过阅读这里的答案和R上的帮助文件,我看到,当你有联系时,你必须将参数exact = FALSE添加到cor.test()函数。通过添加它,它不会尝试计算精确的P值,而是&#34;测试统计量是缩放到零均值和单位方差的估计值,并且近似正态分布&#34;。 在我的情况下,结果完全相同,但没有关于关系的警告。

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

答案 6 :(得分:0)

R软件包ConsRank包含Edmon和Mason的Tau_X的实现。这似乎是目前(数学上)最好的处理领带的方法。

请参见the docs,其用法为

Tau_X(X, Y=NULL)

其中X可以是矩阵。

如@wibeasley所指出的那样,Emond和Mason(2002)提出了Tau_X,这是一个新的秩相关系数,似乎优于Kendal的Tau-b。尼尔森·贡(NelsonGon)担心这篇论文是2002年提出的,比该问题早了几年,但似乎忽略了Spearman的相关性可以追溯到1904年,而肯德尔的Tau则可以追溯到1938年。