协方差矩阵的缩放

时间:2011-04-06 18:10:42

标签: math matlab ellipse

对于问题"Ellipse around the data in MATLAB",在answer given by 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紧紧覆盖了丛生的白点?是否有任何方法或理由来定义它?

enter image description here

1 个答案:

答案 0 :(得分:12)

在数据点周围显示椭圆的目的是显示置信区间,换句话说,"有多少数据在与标准差的某一标准偏差范围内#34;

在上面的代码中,他选择显示一个覆盖95%数据点的椭圆。对于正态分布,约67%的数据是1 s.d.远离平均值,在2 s内可达~95%。和3 s内的~99% (数字不在我的头顶,但你可以通过计算曲线下的面积轻松验证这一点)。因此,值STD=2;您会发现conf约为0.95

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

最后,乘以缩放常数背后的基本原理是,对于具有特征值A的方阵a1,...,an,矩阵kA的特征值,其中{{1}标量只是k。特征值给出椭圆的长轴/短轴的相应长度,因此将椭圆或特征值缩放到95%图块相当于将协方差矩阵与比例因子相乘。

修改

程,虽然您可能已经知道这一点,但我建议您也阅读this answer关于随机性的问题。考虑具有零均值,单位方差的高斯随机变量。这些随机变量的集合的PDF看起来像这样

enter image description here

现在,如果我要采用两个这样的随机变量集合,将它们分开并将它们相加以形成一个新的随机变量的单个集合,它的分布看起来像这样

enter image description here

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

上述代码中椭圆的等式可写为ka1,...,kan,其中x^2/a^2 +y^2/b^2=kx是两个随机变量,y和{{1}是主轴/副轴,a是我们需要弄清楚的一些比例常数。正如您所看到的,上面可以解释为平方并添加两个高斯随机变量集合,我们只是在上面看到它的分布是什么样的。因此,我们可以说b是一个随机变量,是2个自由度的卡方分布。

现在需要做的就是找到k的值,使得95%的数据都在其中。就像1s.d,2s.d,3s.d。我们熟悉高斯人的百分位数,对于具有2个自由度的卡方的95%瓦片大约是6.18。这就是Amro从k函数中获得的。他本可以写得k,但它本来就是一样的。它只是用chi2inv s.d。进行讨论。远离平均值是直观的。

只是为了说明,这里是上面卡方分布的PDF,95%的面积<1。一些scale=chi2inv(0.95,2)以红色阴影显示。这n是~6.18。

enter image description here

希望这会有所帮助。