8

对于“在 MATLAB 中围绕数据的椭圆”这个问题,在Amro 给出的答案中,他说如下:

“如果您希望椭圆表示特定水平的标准偏差,正确的做法是缩放协方差矩阵”

并且缩放它的代码被给出为

STD = 2;                     %# 2 standard deviations
conf = 2*normcdf(STD)-1;     %# covers around 95% of population
scale = chi2inv(conf,2);     %# inverse chi-squared with dof=#dimensions

Cov = cov(X0) * scale;
[V D] = eig(Cov);

我不明白上述代码片段的前 3 行。尺度是如何计算的chi2inv(conf,2),将它与协方差矩阵相乘的基本原理是什么?

附加问题:

我还发现,如果我用 1.5 STD 缩放它,即 86% 的瓷砖,椭圆可以覆盖所有的点,我的点集几乎在所有情况下都聚集在一起。另一方面,如果我用 3 STD 缩放它,即 99% 的平铺,椭圆太大了。那么我该如何选择一个 STD 来紧紧地覆盖聚集点呢?

这是一个例子:

内椭圆对应 1.5 STD,外椭圆对应 2.5 STD。为什么 1.5 STD 会紧紧地覆盖成团的白点?是否有任何方法或理由来定义它?

在此处输入图像描述

4

1 回答 1

12

在数据点周围显示椭圆的目的是显示置信区间,或者换句话说,“有多少数据在平均值的某个标准偏差范围内”

在上面的代码中,他选择显示一个覆盖 95% 数据点的椭圆。对于正态分布,约 67% 的数据与平均值相差 1 sd,约 95% 在 2 sd 之内,约 99% 在 3 sd 之内(这些数字超出了我的想象,但您可以通过以下方式轻松验证这一点计算曲线下面积)。因此,STD=2;您会发现该conf值约为0.95

数据点与数据质心的距离类似于(xi^2+yi^2)^0.5,忽略系数。随机变量的平方和遵循卡方分布,因此为了获得相应的 95 个百分位数,他使用自由度为 2 的逆卡方函数,因为有两个变量。

最后,乘以缩放常数背后的基本原理是,对于具有特征值 的方阵,矩阵Aa1,...,an特征值kA,其中k是标量是简单的ka1,...,kan。特征值给出了椭圆长轴/短轴的相应长度,因此将椭圆或特征值缩放到 95% 平铺相当于将协方差矩阵乘以缩放因子。

编辑

Cheng,虽然您可能已经知道这一点,但我建议您也阅读这个关于随机性问题的答案。考虑一个具有零均值、单位方差的高斯随机变量。此类随机变量集合的 PDF 如下所示

在此处输入图像描述

现在,如果我要取两个这样的随机变量集合,将它们分别平方并将它们相加以形成一个新随机变量的单个集合,它的分布如下所示

在此处输入图像描述

这是具有 2 个自由度的卡方分布(因为我们添加了两个集合)。

上面代码中的椭圆方程可以写成x^2/a^2 +y^2/b^2=k, 其中x,y是两个随机变量,ab长轴/短轴,k是我们需要计算的一些缩放常数。如您所见,上面可以解释为对两个高斯随机变量集合进行平方和相加,我们刚刚在上面看到了它的分布。所以,我们可以说它k是一个随机变量,它是一个自由度为 2 的卡方分布。

现在需要做的就是找到一个值,k使 95% 的数据都在其中。就像 1s.d、2s.d、3s.d 一样。我们熟悉的高斯百分位数,具有 2 个自由度的卡方的 95%tile 约为 6.18。这就是 Amro 从chi2inv函数中得到的。他本可以写得一样好scale=chi2inv(0.95,2),结果也一样。n只是用sd 远离均值的说法是直观的。

只是为了说明,这是上面卡方分布的 PDF,其中 95% 的区域 < 一些x用红色阴影表示。这x是〜6.18。

在此处输入图像描述

希望这有帮助。

于 2011-04-06T19:15:29.887 回答