是否存在对异常值不太敏感的相关系数版本?

机器算法验证 回归 相关性 异常值 中位数 疯狂的
2022-03-15 23:03:56

相关系数为:

$$ r = \frac{\sum_k \frac{(x_k - \bar{x}) (y_k - \bar{y_k})}{s_x s_y}}{n-1} $$

样本均值和样本标准差对异常值很敏感。

以及,其中的机制,

$$ r = \frac{\sum_k \text{stuff}_k}{n -1} $$

有点像一个平均值,也许对变化不太敏感的那个可能会有变化。

样本均值是:

$$ \bar{x} = \frac{\sum_k x_k}{n} $$

样本标准差为:

$$ s_x = \sqrt{\frac{\sum_k (x_k - \bar{x})^2}{n -1}} $$

我想我想要

中位数:

$$ \text{中位数}[x]$$

中值绝对偏差:

$$ \text{中位数}[\lvert x - \text{中位数}[x]\rvert] $$

对于相关性:

$$ \text{Median}\left[\frac{(x -\text{Median}[x])(y-\text{Median}[y]) }{\text{Median}[\lvert x - \文本{中位数}[x]\rvert]\text{中位数}[\lvert y - \text{中位数}[y]\rvert]}\right] $$

我用一些随机数尝试了这个,但得到的结果大于 1,这似乎是错误的。请参阅以下 R 代码。

 x<- c(237, 241, 251, 254, 263)
 y<- c(216, 218, 227, 234, 235)

 median.x <- median(x)
 median.y <- median(y)

 mad.x <- median(abs(x - median.x))
 mad.y <- median(abs(y - median.y))

 r <- median((((x - median.x) * (y - median.y)) / (mad.x * mad.y)))

 print(r)
 ## Prints 1.125

 plot(x,y)
4个回答

我想你想要一个排名相关性这些通常对异常值更稳健,尽管值得认识到它们测量的是单调关联,而不是直线关联。最常见的秩相关是Spearman 相关这只是数据等级的 Pearson 乘积矩相关性。

我不会走你所走的路,从中位数中获取每个数据的差异。例如,X 分布的中位数可以是与 Y 分布的中位数完全不同的点。我觉得这可能会导致计算不稳定。

与连续变量(例如整数与实数)相对的离散变量的另一个答案是Kendall 等级相关性Spearman 等级相关性相反,Kendall 相关性不受其他等级之间的距离的影响,而仅受观察值之间的等级是否相等的影响。

Kendall τ 系数定义为:

$\tau = \frac{(\text{一致对数}) - (\text{不一致对数})}{n (n-1) /2}$

Kendall 秩系数通常用作统计假设检验中的检验统计量,以确定两个变量是否可以被视为统计相关的。此测试是非参数的,因为它不依赖于对 $X$ 或 $Y$ 的分布或 $(X,Y)$ 的分布的任何假设。

然而,处理 Kendall 相关的关系是有问题的,因为存在不少于 3 种处理关系的方法。一对 {( x iy i ), ( x jy j )} 的平局是当 x i = x jy i = y j时;并列的一对既不协调也不不一致。

这是一个适用于 IrishStat 提出的数据和问题的解决方案。

$$Y=ax+b+e$$

想法是将$Y$的样本方差替换为预测方差$$\sigma_Y^2=a^2\sigma_x^2+\sigma_e^2$$。这样相关的公式就变成了 $$ r=\sqrt{\frac{a^2\sigma^2_x}{a^2\sigma_x^2+\sigma_e^2}}$$ 现在相关的原因是被低估的是异常值导致 $\sigma_e^2$ 的估计值被夸大。为了解决这个问题,将回归中的正态分布误差假设替换为正态混合 $$\frac{0.95}{\sqrt{2\pi} \sigma} \exp(-\frac{e^2}{2\ sigma^2}) +\frac{0.05}{\sqrt{2\pi} 3\sigma} \exp(-\frac{e^2}{18\sigma^2}) $$ 我第一次看到这个分布使用Hubers 书中的稳健性,稳健统计。这是“适度”稳健的,适用于本示例。它还具有一个特性,即如果没有异常值,它会产生与通常的最小二乘法几乎相同的参数估计值。因此,此过程隐含地消除了异常值的影响,而无需修改数据。拟合数据会产生 0.944812 的相关估计值。

我的回答前提是 OP 还不知道哪些观察结果是异常值,因为如果 OP 知道,那么数据调整将是显而易见的。因此,我的部分答案涉及识别异常值

当您构建 OLS 模型($y$ 与 $x$)时,您会得到一个回归系数,然后是相关系数,我认为不挑战“给定”可能本质上是危险的。通过这种方式,您了解回归系数及其同级以没有异常值/异常值为前提。现在,如果您识别异常值并向回归模型添加适当的 0/1 预测器,则 $x$ 的所得回归系数现在对异常值/异常值进行了稳健化。然后,$x$ 的这个回归系数比原始回归系数“更真实”,因为它没有被识别的异常值污染。请注意,没有观察结果会被永久“丢弃”;只是对异常点的 $y$ 值的调整是隐含的。

另一种观点是采用调整后的 $y$ 值并将原始 $y$ 值替换为此“平滑值”,然后运行简单的相关性。

这个过程必须重复进行,直到没有发现异常值。

我希望这一澄清有助于反对者理解建议的程序。感谢 whuber 推动我进行澄清。如果有人仍然需要这方面的帮助,可以随时模拟 $y, x$ 数据集并在任何特定 x 处注入异常值,并按照建议的步骤获得 $r$ 的更好估计。

我欢迎对此发表任何评论,就好像它是“不正确的”一样,我真诚地想知道为什么希望得到数字反例的支持。

编辑呈现一个简单的例子:

一个小例子就足以说明“获得对异常值不太敏感的 r 版本”的提议/透明方法,这是 OP 的直接问题。这是一个使用标准 ols 和一些简单算术的易于遵循的脚本。回想一下,B ols 回归系数等于 r*[sigmay/sigmax)。

考虑以下 10 对观察结果。

在此处输入图像描述

并以图形方式

在此处输入图像描述

简单相关系数为 0.75,sigmay = 18.41 和 sigmax=.38

现在我们计算 y 和 x 之间的回归并获得以下结果

在此处输入图像描述

其中 36.538 = .75*[18.41/.38] = r*[sigmay/sigmax]

实际/拟合表建议对观察值 5 处的异常值进行初始估计,值为 32.799。在此处输入图像描述

如果我们排除第 5 个点,我们得到以下回归结果

在此处输入图像描述

使用 x 值 13.61 产生 173.31 的预测。然后,该预测建议对异常值的精确估计如下;209-173.31 = 35.69。

如果我们现在恢复原始的 10 个值,但用估计/清理后的值 173.31 替换周期 5 (209) 的 y 值,我们将获得在此处输入图像描述

在此处输入图像描述

重新计算 r,我们从回归方程中得到 0.98

r= B*[sigmax/sigmay] .98 = [37.4792]*[ .38/14.71]

因此,我们现在有一个版本或 r (r =.98),它对观察 5 处识别的异常值不太敏感。请注意,上面使用的 sigmay (14.71) 是基于第 5 期调整后的 y 而不是原始受污染的 sigmay (18.41)。由于它的估计大小和样本大小,异常值的影响很大。我们得到的是 9 对高度相关的读数 (1-4;6-10),但标准 r 在观察 5 处被异常值混淆/扭曲。

有一种不太透明但没有强大的方法来解决这个问题,那就是使用 TSAY 程序http://docplayer.net/12080848-Outliers-level-shifts-and-variance-changes-in-time-series.html 到一次搜索并解决所有异常值。例如在此处输入图像描述,建议异常值是 36.4481 ,因此调整后的值(单边)是 172.5419 。类似的输出会生成一个实际的/清理过的图形或表格。在此处输入图像描述. Tsay 的程序实际上迭代地检查每个点的“统计重要性”,然后选择需要调整的最佳点。如果数据中没有明显或可能假设的时间结构,则时间序列解决方案将立即适用。我所做的是抑制任何时间序列过滤器的合并,因为我有领域知识/“知道”它是以横截面非纵向方式捕获的。