有两个布尔向量,它们只包含 0 和 1。如果我计算 Pearson 或 Spearman 相关性,它们是否有意义或合理?
计算两个布尔向量之间的 Pearson 或 Spearman 相关是否有意义?
机器算法验证
相关性
二进制数据
皮尔逊-r
斯皮尔曼罗
2022-02-03 02:47:14
4个回答
只要两个二元变量(例如和和一些 ,就定义了 Pearson 和 Spearman 相关性。通过考虑两个变量的散点图,很容易对它们的含义有一个很好的定性概念。显然,只有四种可能性(因此为了可视化而抖动相同的点是个好主意)。例如,在两个向量相同的任何情况下,每个向量都有一些 0 和一些 1,那么根据定义并且相关性必然是。类似地,然后相关性为。
对于这种设置,没有非线性的单调关系的范围。在和的等级时,等级只是原始和的线性变换,并且 Spearman 相关必然与 Pearson 相关相同。因此,这里没有理由单独考虑 Spearman 相关性,或者根本就没有理由。
对于一些涉及 s 和 s 的问题,例如在时间或空间中的二元过程研究中,相关性自然会出现。然而,总体而言,将有更好的方式来思考这些数据,这在很大程度上取决于此类研究的主要动机。例如,相关性很有意义这一事实并不意味着线性回归是对二元响应建模的好方法。如果其中一个二元变量是响应,那么大多数统计人员会从考虑 logit 模型开始。
我不建议对二进制数据使用 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")))
Arne 上面的回答并不完全正确。相关性是变量之间相关性的度量。样本 A 和 B 都是独立的抽取,尽管它们来自相同的分布,所以我们应该期望 ~0 相关性。
运行类似的模拟并创建一个取决于 a 值的新变量 c:
from scipy import stats
a = stats.bernoulli(p=.9).rvs(10000)
b = stats.bernoulli(p=.9).rvs(10000)
dep = .9
c = []
for i in a:
if i ==0:
# note this would be quicker with an np.random.choice()
c.append(stats.bernoulli(p=1-dep).rvs(1)[0])
else:
c.append(stats.bernoulli(p=dep).rvs(1)[0])
我们可以看到
stas.pearsonr(a,b) ~= 0
stas.pearsonr(a,c) ~= 0.6
stats.spearmanr(a,c) ~=0.6
stats.kendalltau(a,c) ~=0.6
其它你可能感兴趣的问题