首页 文章

将位置置信椭圆转换为协方差矩阵

提问于
浏览
0

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

这是否可能或缺少必要的信息?

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

My approach so far: 轴长度对应于协方差矩阵的两个特征值并定义"spread" . 椭圆角为0表示x和y之间没有相关性 . Covariance matrix without correlation

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

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

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

有任何想法吗?

3 回答

  • 0

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

    Matlab Example:

    % 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)
    
  • 0

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

    我们知道,对于非核心随机值,协方差矩阵是对角线的,并且在其对角线元素中具有单独的方差,它们是平方标准偏差(西格玛) .

    [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来恢复不相关的情况;

  • 0

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

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

    解决方案

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

    直觉

    如果你认为 C 是由胆怯的因素组成的,这是有意义的,其中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 .

相关问题