【问题标题】:calculate area of 2-dimensional confidence ellipse in R在R中计算二维置信椭圆的面积
【发布时间】:2011-09-23 22:18:27
【问题描述】:

所以我将对数转换后的测量数据排列在一个简单的表格中:

      x         y
1.158362492 1.322219295
1.1430148   1.267171728
1.11058971  1.252853031
1.120573931 1.260071388
1.149219113 1.278753601
1.123851641 1.276461804
1.096910013 1.222716471

我知道有一些函数可以为这些数据绘制置信椭圆,但是如何计算生成形状的面积?

谢谢

【问题讨论】:

    标签: r area ellipse


    【解决方案1】:

    先计算椭圆,然后确定长短轴的长度,然后calculate the area

    这是一个无脑的近似。

    首先,您的数据。

    dat <- structure(list(x = c(1.158362492, 1.1430148, 1.11058971, 1.120573931, 
              1.149219113, 1.123851641, 1.096910013), y = c(1.322219295, 1.267171728, 
              1.252853031, 1.260071388, 1.278753601, 1.276461804, 1.222716471
              )), .Names = c("x", "y"), class = "data.frame", row.names = c(NA, 
              -7L))
    

    然后加载包cardataEllipse 可用于使用数据的二元正态逼近来计算椭圆。

    require(car)
    dataEllipse(dat$x, dat$y, levels=0.5)
    

    调用ellipse 可以沿dataEllipse 绘制的椭圆给出点。

    me <- apply(dat, 2, mean)
    v <- var(dat)
    rad <- sqrt(2*qf(0.5, 2, nrow(dat)-1))
    z <- ellipse(me, v, rad, segments=1001)
    

    然后我们可以计算椭圆上每个点到中心的距离。

    dist2center <- sqrt(rowSums((t(t(z)-me))^2))
    

    这些距离的最小值和最大值是短轴和长轴的半长。所以我们可以得到面积如下。

    pi*min(dist2center)*max(dist2center)
    

    【讨论】:

    • “计算椭圆”需要一些详细说明。
    • @Benjamin - 也许我太搞笑了,但似乎提问者知道如何计算椭圆,该区域并不难,除非难以理解事物,在这种情况下,他应该询问那部分。
    • 非常好。不幸的是,“计算面积”的链接已损坏。顺便说一句,感谢您在制作 R 包方面非常有用的博客。
    【解决方案2】:

    你可以使用包mclust,有一个隐藏函数叫mvn_plot,输入参数是meanstd。您可以尝试阅读其代码并对其进行修改以获取每个轴的长度。

    【讨论】:

      【解决方案3】:

      可以通过先计算特征值,直接从协方差矩阵计算面积。

      您需要通过您想要获得的置信度因子来缩放方差/特征值。

      This thread is very helpful

      cov_dat <- cov(dat) # covariance matrix
      
      eig_dat <- eigen(cov(dat))$values #eigenvalues of covariance matrix
      
      vec <- sqrt(5.991* eig_dat) # half the length of major and minor axis for the 95% confidence ellipse
      
      pi * vec[1] * vec[2]  
      #> [1] 0.005796157
      

      reprex package (v0.3.0) 于 2020 年 2 月 27 日创建

      datfrom user Karl's answer

      【讨论】:

        猜你喜欢
        • 2013-05-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-13
        • 2012-12-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多