为什么皮尔逊相关 p 值与 R 中的 CI 不完全对应?

机器算法验证 r 相关性 皮尔逊-r
2022-04-16 05:23:30

使用R中的函数计算皮尔逊相关性cor.test(),我发现p值不一定对应CI:

# reproducible example
# generate the data
set.seed(123)
N <- 200
X <- rnorm(N)
a <- 0.2
b <- 0.8
sigma <- 4
eps <- rnorm(N, 0, sigma)
Y <- a + b * X + eps
Y[1] <- 23.70932 # change a bit

cor.test(X, Y)

结果 CI 表示相关性是显着的,而 p 值则相反:

t = 1.9717, df = 198, p-value = 0.05004
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
 0.00002440203 0.27226422569
sample estimates:
      cor 
0.1387649 

差异很小,但仍然很大,可以解释为数值误差此检验确实会产生 CI 水平为 0.95 的双尾检验(对于 CI 和 p 值)。对应的单尾测试是这样的:

Y[1] <- 37.692
cor.test(X, Y, alternative = "greater")

有类似的问题。我尝试使用参数exact = TRUE,但这与皮尔逊相关系数的默认计算无关。

那么,这只是一个很大的不精确(可能是一个错误,因为 cor.test 函数不提供任何容差/epsilon 参数,它可能应该用这个相当大的不精确来指定?)。不精确是否是由于不使用皮尔逊系数的精确分布而导致的,而只是一些近似值,在计算 CI 和 p 值时会产生略微不同的结果?还是有其他一些主要问题?

1个回答

几乎所有此类问题都在相关功能的帮助中得到解答。

从帮助cor.test

如果method"pearson",则检验统计量基于 Pearson 乘积矩相关系数cor(x, y),并且length(x)-2如果样本遵循独立正态分布,则遵循具有自由度的分布。如果至少有 4 对完整的观测值,则基于 Fisher 的 Z 变换给出渐近置信区间。

基于 Fisher's z 的 CI 不会完全对应 t 检验的结果。

通常的假设检验依赖于零下检验统计量的分布。在这种情况下,检验的零分布基于总体相关性为零。在这种情况下,您会得到一个 t 检验(在假设下),但是当总体相关性不为零时,您不再有统计的 t 分布,因此置信区间不是基于此。如果 CI 使用精确分布(涉及超几何函数的计算2F1,或相关的级数展开式),那么它应该是对应的。