我正在尝试根据此公式在大型数据集上计算 Pearson 相关系数:
大多数情况下,我的值介于 -1 和 1 之间,但有时我会得到奇怪的数字,例如:
1.0000000002
-3
等等。是否可能有奇怪的数据会导致这种情况,或者这是否意味着我在计算中有错误?
例如,我注意到有时我的 X 总和为 1,因此 X^2 的总和将为 1。这会产生一个类似于 1.00000002 的值。其他时候,我会将 XY 的总和设为 0,然后计算结果为 -3。这在统计上是可能的,还是我的计算有错误?
我正在尝试根据此公式在大型数据集上计算 Pearson 相关系数:
大多数情况下,我的值介于 -1 和 1 之间,但有时我会得到奇怪的数字,例如:
1.0000000002
-3
等等。是否可能有奇怪的数据会导致这种情况,或者这是否意味着我在计算中有错误?
例如,我注意到有时我的 X 总和为 1,因此 X^2 的总和将为 1。这会产生一个类似于 1.00000002 的值。其他时候,我会将 XY 的总和设为 0,然后计算结果为 -3。这在统计上是可能的,还是我的计算有错误?
众所周知,您使用的公式在数值上是不稳定的。如果平方均值与方差相比较大和/或均值乘积与协方差相比较大,则分子和分母中括号内的项的差异可能会导致灾难性抵消。
这有时会导致计算出的方差或协方差甚至不保留一位数的精度(即比无用还差)。
不要使用这些公式。当人们手工计算时,它们是有意义的,你可以看到,并在发生这种情况时处理这种精度损失——例如,使用这些公式之前通常会消除常见的数字,所以像这样的数字:
8901234.567...
8901234.575...
8901234.412...
首先会减去 8901234(至少)——这将节省大量工作时间并避免取消问题。然后,平均值(和类似的量)将在最后调整回来,而方差和协方差可以按原样使用。
类似的想法(和其他想法)可以用在计算机上,但实际上你需要一直使用它们,而不是试图猜测你什么时候可能需要它们。
半个多世纪以来,人们已经知道处理这个问题的有效方法——例如,参见 Welford 1962 年的论文 [1](他给出了一次通过方差和协方差算法——稳定的二次通过算法已经广为人知)。Chan 等人 [2] (1983) 比较了许多方差算法,并提供了一种决定何时使用哪种算法的方法(尽管在大多数实现中,人们通常只使用一种算法)。
请参阅 Wikipedia 关于方差的讨论及其对方差算法的讨论。
类似的评论适用于协方差。
[1] BP Welford (1962),
“关于计算校正平方和乘积的方法的注释”,
技术计量学卷。4、伊斯。3、419-420
(citeseer链接)
[2] TF Chan、GH Golub 和 RJ LeVeque (1983)
“计算样本方差的算法:分析和建议”,
美国统计学家,卷。37, No. 3 (Aug.1983), pp. 242-247
技术报告版本
皮尔逊相关系数确实介于和(包括的)。这源于柯西-施瓦茨不等式。
得到相关系数可能(但不太可能)是由于数字错误,而 -3 几乎可以肯定表示实现中的错误(或平台不适合数字!:)。