什么可能导致给定数据集的 Pearson 和 Spearman 相关之间的相关系数存在很大差异?

机器算法验证 相关性 斯皮尔曼罗
2022-01-16 16:04:47

两个变量之间的 Pearson 系数相当高 (r=.65)。但是当我对变量值进行排序并运行 Spearman 相关时,系数值要低得多(r=.30)。

  • 对此有何解释?
1个回答

为什么差别很大

  • 如果您的数据是正态分布或均匀分布的,我认为 Spearman 和 Pearson 的相关性应该非常相似。

  • 如果他们给出的结果与您的情况截然不同(0.65 与 0.30),我的猜测是您的数据或异常值存在偏差,并且异常值导致 Pearson 的相关性大于 Spearman 的相关性。即,非常高的 X 值可能与非常高的 Y 值同时出现。

  • @chl 是正确的。您的第一步应该是查看散点图。
  • 一般来说,皮尔逊和斯皮尔曼之间如此大的差异是一个危险信号,表明
    • Pearson 相关性可能不是您的两个变量之间关联的有用总结,或者
    • 您应该在使用 Pearson 相关性之前转换一个或两个变量,或者
    • 在使用 Pearson 相关性之前,您应该删除或调整异常值。

相关问题

另请参阅有关 Spearman 和 Pearson 相关性之间差异的这些先前问题:

简单的 R 示例

以下是如何发生这种情况的简单模拟。请注意,以下情况涉及单个异常值,但您可以使用多个异常值或倾斜数据产生类似的效果。

# Set Seed of random number generator
set.seed(4444)

# Generate random data
# First, create some normally distributed correlated data
x1 <- rnorm(200)
y1 <- rnorm(200) + .6 * x1

# Second, add a major outlier
x2 <- c(x1, 14)
y2 <- c(y1, 14)

# Plot both data sets
par(mfrow=c(2,2))
plot(x1, y1, main="Raw no outlier")
plot(x2, y2, main="Raw with outlier")

plot(rank(x1), rank(y1), main="Rank no outlier")
plot(rank(x2), rank(y2), main="Rank with outlier")

# Calculate correlations on both datasets
round(cor(x1, y1, method="pearson"), 2)
round(cor(x1, y1, method="spearman"), 2)
round(cor(x2, y2, method="pearson"), 2)
round(cor(x2, y2, method="spearman"), 2)

这给出了这个输出

[1] 0.44
[1] 0.44
[1] 0.7
[1] 0.44

相关性分析表明,没有离群值的 Spearman 和 Pearson 非常相似,而有相当极端的离群值时,相关性是完全不同的。

下图显示了将数据视为等级如何消除异常值的极端影响,从而导致 Spearman 在有异常值和没有异常值的情况下都相似,而 Pearson 在添加异常值时完全不同。这突出了为什么斯皮尔曼经常被称为健壮。

在此处输入图像描述