计算两个布尔向量之间的Pearson或Spearman相关性有意义吗?


42

有两个布尔向量,仅包含0和1。如果我计算皮尔森或斯皮尔曼相关性,它们是有意义的还是合理的?


2
如果两个变量都是二分法,则Pearson = Spearman = Kendall的tau。是的,它可能有感觉。对于真正的二进制(布尔)数据,还可以在不居中的情况下对数据计算“皮尔逊”,这将是余弦。
ttnphns 2014年

1
... and = Phi(标准卡方),这使我们从规模到列联表。
ttnphns 2014年

Answers:


34

只要两个二进制变量yx分别为0 s和1 s,就可以定义Pearson和Spearman相关性。通过考虑两个变量的散点图,很容易就它们的含义获得很好的定性认识。显然,只有四种可能性0 0 0 1 1 0 1 1 yx(0,0),(0,1),(1,0),(1,1)(因此,抖动以将相同的点分开以进行可视化是一个好主意)。例如,在两个向量相同的任何情况下,每个向量都具有一些0和1,则根据定义y=x且相关性必然为1。类似地,可能的是,y=1x,然后将相关性1

对于此设置,非线性的单调关系没有范围。当按照通常的中间等级约定采用0 s和1 s的等级时,等级只是原始0 s和1 s 的线性变换,并且Spearman相关性必然与Pearson相关性相同。因此,没有理由在这里或根本没有考虑Spearman相关性。

对于涉及0 s和1 s的某些问题,例如在时间或空间二元过程的研究中,相关性自然会出现。总体而言,将有更好的方法来考虑此类数据,这在很大程度上取决于此类研究的主要动机。例如,相关性很有意义的事实并不意味着线性回归是模拟二进制响应的好方法。如果二进制变量之一是响应,那么大多数统计人员将从考虑logit模型开始。


1
这是否意味着在这种情况下,对于这两个二元向量,Pearson或Spearman相关系数不是很好的相似性度量?
龙贾

是的,因为它无法衡量相似性,并且对于任何一个向量的全0或全1都未定义。
Nick Cox 2014年

我不清楚这2个相同或“相反”的向量情况。如果x = c(1,1,1,1,1)且y =(0,0,0,0,0)则y = 1-x,听起来您在说这一定是定义,表示相关系数为-1。y = x-1等于+1。散点图上只有1个点(5个重复),因此可以画出任何直线。感觉在这种情况下相关性未定义。对不起,如果我误解了您的意思。@NickCox
下午。

2
没有; 我并不是说,正如我在第一句话中指出的那样,要定义相关性,您必须混合使用0和1。否则,如果两个变量的SD为0,则相关性不确定。但是我已经编辑了我的答案以提及两次。
尼克·考克斯

15

二进制向量有专门的相似性度量,例如:

  • 杰卡德·内汉姆
  • 骰子
  • 尤尔
  • 罗素·拉奥
  • 索卡尔·米切纳
  • 罗杰斯-谷本
  • 库津斯基

等等

有关详细信息,请参见此处


5
当然,有许多更可靠和更全面的参考。即使在正确确定作者姓名的水平上,也请注意Kulczyński和Tanimoto。参见例如Hubálek,Z.1982。基于二进制(存在-不存在)数据的关联系数和相似系数:一种评估。生物评论 57:669–689。
尼克·考克斯

5
他们显然拼错了“ Tanimoto”,但“ Kulzinsky”已被有意简化。毫无疑问,您的参考文献更为可信,但并非所有人都能获得。
Digio

0

我不建议将Pearson相关系数用于二进制数据,请参见以下反示例:

set.seed(10) 
a = rbinom(n=100, size=1, prob=0.9) 
b = rbinom(n=100, size=1, prob=0.9)

在大多数情况下,两者都给出1

table(a,b)

> table(a,b)
   b
a    0  1
  0  0  3
  1  9 88

但是相关性没有显示

cor(a, b, method="pearson")

> cor(a, b, method="pearson")
[1] -0.05530639

但是,二进制相似性度量(例如Jaccard索引)显示出更高的关联性:

install.packages("clusteval")
library('clusteval')
cluster_similarity(a,b, similarity="jaccard", method="independence")

> cluster_similarity(a,b, similarity="jaccard", method="independence")
[1] 0.7854966

为什么是这样?看到这里简单的二元回归

plot(jitter(a, factor = .25), jitter(b, factor = .25), xlab="a", ylab="b", pch=15, col="blue", ylim=c(-0.05,1.05), xlim=c(-0.05,1.05))
abline(lm(a~b), lwd=2, col="blue")
text(.5,.9,expression(paste(rho, " = -0.055")))

下图(添加了少量杂点以使点数更清晰) 二元回归线

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.