欢迎回到我的有关离群值的博客系列。 在第一集,我们着眼于定义和视觉识别异常值。 在第二集,我们使用分位数(通过Box&Whisker图)来帮助识别一维离群值。
在本集中,我们着眼于使用马氏距离在多个维度上识别异常值。 我们也快速浏览一下T 2 ,这是马氏距离的简单扩展。
多维离群值
图1是其中一幅图的复制品第1集并显示一个包含1,000个数据点的二维图,其中有一个明显的异常值(标有红色正方形):
图1:二维的1,000个数据点,离群值用红色标记
图1中的散点图使我们能够轻松地从视觉上确定二维离群值,即使从单变量直方图分布中看不到离群值也是如此。 因此,“盒与晶须”(分位数)技术在第2集在分析多维数据时并不总是可靠的。 并视觉识别异常值(如第1集)随着尺寸数量的增加而变得困难。 那么,如何才能更可靠地检测这些多维离群值呢?
马氏距离
马氏距离(D中号)为我们提供了一种用于识别多维离群值的数值方法。 它以创建者印度统计学家Prasanta Chandra Mahalanobis(1893-1972)的名字命名。 有关马哈拉诺比斯医生的更多信息,我将您引向这篇维基百科文章。
广告中号图1中所示的数据集的曲线如下所示:
图2:图1中1,000个数据点的马氏距离图
图2以行顺序显示了所有数据点与D的关系中号在Y轴上 D的值中号每个点代表每个点到所有数据点质心的标准化“距离”。 红色数据点显然在其余点上很突出,因此有必要作为一个离群点进行进一步研究。
那么,该计算如何工作?
通用方法
假设我们有1,000个点的二维分布。 在每个维度中,从均值为零且标准偏差为1.0的正态分布总体中得出999个点。 然后,我添加了一个离群点作为样本中的最后一个点。 如果我们做一个XY散点图,我们可能会有这样的东西:
图3:1000个不相关数据点的散点图,其中一个标记为离群值(红色)
注意图3中的红色兴趣点。 我们可以轻松地计算每个维度上1,000个点的样本的均值和标准差,并且可以使用勾股定理计算从红色点到点的质心的欧几里得距离。 对于多维:

实际上,我们可以绘制以质心为中心的圆,表示距质心的距离相等,如图4所示:
图4:1,000个不相关数据点的散点图,与质心的等距圆被覆盖
在图4中,圆圈表示到点质心的距离为1、2、3和4个单位(从最小到最大)。 在这里可以清楚地看到红色的点离这些点的质心最远。 其距离用“ d”表示。
如果我们具有类似缩放比例的分布(即,标准偏差相同),则此方法效果很好。但是,如果我们有不同的比例,如图5所示,该怎么办?
图5:1000个不相关数据点的散点图,每个点具有不同的均值和标准偏差。
在这里,我们有两个问题。 首先,X3维度中的点均值不为零。 只需从所有数据点中减去平均值即可解决这一问题。
第二个问题是X3尺寸的标准偏差比X1尺寸大。 除非我们可以补偿差异,否则这将引起距离计算的争议。 这也很容易做到。 在校正了从零开始的平均偏移之后,我们只需将每个维度除以其标准偏差即可。 标准化了标准偏差中的任何不匹配。 用于评估此距离的多维方程变为:

其中m和s代表每个维度的平均值和标准偏差。 如果执行这些计算并重新绘制标准化数据,则会得到下图:
图6:图5中的数据经过转换以校正每个维度的均值和标准偏差
因此,现在我们有一种方法可以调整数据的非零均值和不相等的标准差。 只要每个维度上的数据彼此独立(即不相关),此方法就很好。但是,如果存在如图1所示的相关性,我们该怎么办?
一种方法是采用主要组件建立与数据趋势对齐的新轴,然后执行上述操作。 但这需要大量的点击。 (如果对它的工作方式感兴趣,请参阅附录A。)
幸运的是,马哈拉诺比斯医生为我们提供了一种简单而优雅的方法来计算该距离!
马氏距离方程
Mahalanobis博士计算D的优雅公式中号是:
哪里:

是i的N个维度的值的向量日个别观察到的数据点。
N =感兴趣的维数(或列数)。
T表示移调操作。

是感兴趣的N个维度(或列)中每个维度的均值的向量。
小号-1是所有数据点的NxN协方差矩阵的逆矩阵(可从JMP中的Multivariate平台获得)。
将适当的值代入上述方程式可得出D中号从我日指向数据集中所有点的质心。 如果您对这种计算的工作方式感兴趣,请附录B解决一个小样本问题。
JMP中的Mahalanobis情节
d中号本身对我们没有多大用处。 与其他数据点相比,它才有意义。 JMP中的Mahalanobis图显示了这些结果。
我们可以通过以下方法生成Mahalanobis图:转到“分析” /“多变量方法” /“多变量”,选择列,然后从红色下拉列表中选择“离群值分析/ Mahalanobis距离”。 对于图1的示例数据集,得出:
图7:1,000个数据点样本的马氏距离(图2的重复)
在这里我们看到数据表第1行中的数据点具有最大距离(D中号),表示它距离所有10个数据点的质心最远。 蓝线代表我们是否相信D为95%的置信上限(UCL)中号与零明显不同。 红点明显在UCL上方,因此有必要进一步调查作为异常值。
但是,离群值并不总是那么容易被察觉,尤其是对于小型数据集。 在附录B的示例中,我显示了一个小型数据集(三个维度中的10个数据点)的示例计算。 该数据集生成一个D中号情节如下图:
图8:附录B中10个数据点样本的马氏距离
D中号图已将点1确定为异常值。 但是我们也看到D中号第1行与D并没有什么不同中号为第7行! 为什么是这样? 您必须等待下一个情节才能找到该问题的答案!
关于T的快速说明2
JMP还提供了T选项2分析/多元方法/多元,然后进行离群分析。 Ť 2只是D的平方中号。 有些人喜欢用它来迫使离群值和大量数据之间更直观地分离,但是T 2确实包含与D相同的信息中号。
下一集
在下一个情节中,我们将介绍Jackknife距离,这是查看离群值的另一种方法,它将使上述示例数据集中的离群值突出。
查看有关该系列的所有文章了解离群值。
附录A:使用主要成分识别异常值
如果我们有一种方法可以旋转图1中的轴,使它们与数据趋势对齐,那将是很好的,如下所示:
图9:二维数据集的轴的概念旋转
然后,我们可以使用前面描述的技术对数据进行标准化以检测异常值。
一种方法是主成分分析(PCA)。 PCA会找到最适合数据的一组正交(相互垂直)轴。 您可以在数据集中拥有与原始尺寸(列)一样多的主要成分。 在JMP中,PCA可以在两个位置找到:在“分析/多元方法/主成分”下,或在“分析/多元方法/多元”下,然后从“多元”旁边的红色下拉列表中,选择“主成分/相关性”。 红色下拉菜单还提供了将主要组件保存回数据表的选项。 完成此操作后,您可以使用这些方法校正上面概述的均值和标准偏差,以确定与质心的距离。
附录B:D中号计算示例数据集
假设我们有一个包含三列和十行的样本数据集:
图10:用于DM示例计算的小样本数据集
在JMP中,我们可以在这三列上运行Analysis / Multivariate Methods / Multivariate以生成以下散点图矩阵:
图11:示例数据的散点图矩阵
在图11中,我们可以看到,在X1-X2尺寸中进行比较时,第1行数据(以红色突出显示)似乎是一个异常值,尽管在X1-X3或X2-X3图中并没有那么清楚。
我们要计算第一点的马氏距离。 因此,填写上述D中的向量和矩阵中号等式,我们从兴趣点开始:

每列的平均值可以通过几种不同的方式找到。 让我们使用Cols / Column Viewer,然后使用Show Summary:
图12:摘要统计数据,例如三维10点数据集
因此,均值的向量变为:

接下来,我们需要在分析/多元方法下找到的协方差矩阵。 从红色下拉三角形中选择“协方差矩阵”:
图13:协方差矩阵,例如三维10点数据集
我们还需要协方差矩阵S的逆-1 。 JMP不会从菜单系统中提供该信息,但是我们可以通过以下自定义脚本轻松获得该信息:
图14:查找矩阵逆的JMP JSL脚本
结果是:
小号-1 =

然后,我们只需插入并求解矩阵方程式:





马氏距离(D中号对于示例数据集第1行中显示的数据,)为2.814。
图15:示例数据集的马氏图表(图8的重复)
感谢您的清晰明确的解释。 我会向我的同事介绍这个系列,因为它已经很好地说明了。 我期待关于刀切距离的讨论,因为与马哈拉诺比斯相比,我对刀切距离的了解不多。
我不得不写一张Excel表格来计算一些同事的马氏距离(确实是T2),但确实行得通,但是在JMP中它是如此的快捷和简便!