2

有没有办法从置信度/不确定性/误差椭圆中计算协方差矩阵?我知道它是如何以相反的方式完成的,使用 a2x2 covariance matrix来计算置信椭圆(例如,此处描述:http: //www.visiondummy.com/2014/04/draw-error-ellipse-representing-covariance-matrix/)。

这甚至可能还是缺少必要的信息?

我的置信椭圆由轴的长度和椭圆旋转的角度来描述。

到目前为止我的方法: 轴长度对应于协方差矩阵的两个特征值并定义“扩展”。椭圆角为 0 表示 x 和 y 之间没有相关性。 没有相关性的协方差矩阵

我创建了一个新的空白 2x2 矩阵并假设角度为zero,例如,我使用了第一个特征值并将其设置为var_xx。与第二个特征值和 相同var_yy。现在我有一个对角矩阵,它描述了方差,但没有旋转(相关性)。

现在我使用 2D 旋转矩阵和椭圆角来旋转之前创建的矩阵。

这种方法似乎是错误的,因为矩阵不再是对称的。不幸的是,协方差矩阵必须是对称的。

有任何想法吗?

4

4 回答 4

1

Daku 的回答似乎给出了几乎正确的结果,但在协方差项上,正弦和余弦不应该是平方。

它应该是:

varX1 = semiMajorAxis² * cos(phi)² + semiMinorAxis² * sin(phi)²
varX2 = semiMajorAxis² * sin(phi)² + semiMinorAxis² * cos(phi)²
cov12 = (semiMajorAxis² - semiMinorAxis²) * sin(phi) * cos(phi) 
于 2019-01-30T13:54:30.053 回答
1

感谢您公开提出这个问题,因为我需要进行类似的转换 - 从 2d 标准差椭圆体转换为 2x2 协方差矩阵。反过来有很多参考资料,但我发现的唯一参考资料在下面,这使我得出结论,您犯了一个小错误,但您的推导带来了更多的清晰度。在这里比较 http://simbad.u-strasbg.fr/Pages/guide/errell.htx

我们知道,对于不相关的随机值,协方差矩阵是对角的,并且在其对角元素中具有个体方差,即平方标准差 (sigma)。

 [varX1,   0]    (so your eigen values should be)   eVal1 = longAxis*longAxis;
 [0,   varX2]                                       eVal2 = shortAxis*shortAxis;

由于从特征基的转换u*u^T / u^T*u创建了一个新的归一化基,因此您的特征向量集也可以设置为eVec1 = R * [1; 0]; eVec2 = R * [0; 1];(长度在特征值中)。

如果我做对了,则将您的代码乘以varX1 = longAxis * cos(phi)² + shortAxis * sin(phi)²缺少正方形的代码

正确设置特征值 (Var[X] = sigma²) 可以得到正确的结果

varX1 = majorAxis² * cos(phi)² + minorAxis² * sin(phi)²
varX2 = majorAxis² * sin(phi)² + minorAxis² * cos(phi)²
cov12 = (majorAxis² - minorAxis²) * sin(phi) * cos(phi)

根据我提供的参考资料,您可以很容易地看到通过设置 phi = 0; 恢复了不相关的情况;

于 2017-07-29T09:08:24.047 回答
0

看来我有一个正确且有效的解决方案。该解决方案来自另一个论坛的答案:https ://math.stackexchange.com/a/1119677

Matlab 示例:

% ellipse param
longAxis = 20;
shortAxis = 10;
phi = 0;

% eigenvalues (this may vary from usecase to usecase)
eVal1 = longAxis;
eVal2 = shortAxis;

% compute eigenvectors
R = [cosd(phi), -sind(phi);
     sind(phi), cosd(phi)]; 
eVec1 = R * [eVal1; 0];
eVec2 = R * [0; eVal2];

% compute covariance matrix
% derived from: https://math.stackexchange.com/a/1119677
coVar = eVal1*(eVec1*eVec1')/(eVec1'*eVec1) + eVal2*(eVec2*eVec2')/(eVec2'*eVec2)
于 2017-01-24T16:33:49.717 回答
0

对于应用于协方差的一般变换,有一种简单的方法可以解决这个问题。

如果我有一些线性映射A和一些协方差C,我可以通过 计算变换后的协方差C_new = A * C * A^T

解决方案

因此,对于您的问题,您可以通过计算来计算旋转协方差C = R C R^T

直觉

如果您将C其视为由 cholesky 因子组成的存在,这是有道理的C = L * L^T,其中 cholesky 因子(或任何您喜欢的平方根)告诉我们如何使单位圆变形以获得 1-sigma 不确定性椭圆。

当我们变换分布时(您在上面通过变换协方差来尝试做的事情),我们想要改变单位圆变形。我们可以通过变换 L 来做到这一点。

所以:L_new = A * L。然后C_new = (A * L) * (A * L)^T = (A * L) * (L^T * A^T)

既然我们知道C = L * L^T C_new = A * C * A^T

于 2017-07-30T22:11:03.643 回答