如何计算R中椭圆交集的体积 [英] How to calculate the volume of the intersection of ellipses in r

查看:134
本文介绍了如何计算R中椭圆交集的体积的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想知道如何计算两个椭圆之间的交点,例如如图所示,杂色和维吉卡之间的交点的体积: 使用以下mwe根据教程绘制的图片a>:

I was wondering how to calculate the intersection between two ellipses e.g. the volume of the intersection between versicolor and virginca as illustrated in this graph: which is plotted using the following mwe based on this tutorial:

data(iris)
log.ir <- log(iris[, 1:4])
ir.species <- iris[, 5]
ir.pca <- prcomp(log.ir, center = TRUE, scale. = TRUE)

library(ggbiplot)
g <- ggbiplot(ir.pca, obs.scale = 1, var.scale = 1, 
          groups = ir.species, ellipse = TRUE,
          circle = TRUE)
g <- g + scale_color_discrete(name = '')
g <- g + theme(legend.direction = 'horizontal', 
           legend.position = 'top')
print(g)

我得到椭圆的协方差和中心如下:

I get the covariances and centres for the ellipses as follows:

setosa.cov <- cov(ir.pca$x[ir.species=="setosa",])
versicolor.cov <- cov(ir.pca$x[ir.species=="versicolor",])
virginica.cov <- cov(ir.pca$x[ir.species=="virginica",])
setosa.centre <- colMeans(ir.pca$x[ir.species=="setosa",])
versicolor.centre <- colMeans(ir.pca$x[ir.species=="versicolor",])
virginica.centre <- colMeans(ir.pca$x[ir.species=="virginica",])

但后来我机智了:-|

But then I am at my wit's end :-|

修改: 遵循以下@ carl-witthoft的指示,这里是使用siar :: overlap:

Following the indications of @carl-witthoft below, here an example using siar::overlap:

library(siar)
setosa <- ir.pca$x[ir.species=="setosa",]
versicolor <- ir.pca$x[ir.species=="versicolor",]
virginica <- ir.pca$x[ir.species=="virginica",]

overlap.fun <- function(data.1, data.2){
   dimensions <- ncol(data.1)
   for(i in 1:(dimensions-1)){
      overlap.out <- overlap(data.1[,i], data.1[,i+1], data.2[,i], data.2[,i+1], steps = 5)
      out$overlap[i] <- overlap.out$overlap
      out$area1[i] <- overlap.out$area1
      out$area2[i] <- overlap.out$area2
   }
   return(out)
}

overlap.fun(versicolor, virginica)

返回:

$overlap
[1] 0.01587977 0.48477088 0.08375927
$area1
[1]1.020596 1.04614461 0.08758691                 
$area2
[1] 1.028594 1.1535106 0.1208483

当我执行百分比计算时,这些值与ggbiplot PCA中的椭球并不完全对应:

strangely enough when I do a percentage calculation the values do not really correspond to the ellipsoids in the ggbiplot PCA:

tmp <- overlap(versicolor[,1], versicolor[,2], virginica[,1], virginica[,2], steps = 5)
virginica.percentage <- round(x=(tmp$overlap/tmp$area2*100), digits = 2)
versicolor.percentage <- round(x=(tmp$overlap/tmp$area1*100), digits = 2)
> virginica.percentage [1] 1.54
> versicolor.percentage[1] 1.56

比上面图 1 中指示的要少得多. 但最好在此中打开另一个线程这里.

which is much less than indicated in the Figure 1 above. But might better open another thread on this here.

推荐答案

可能的工具:

 spatstat::overlap.owin , geo::geointersect, siar::overlap .

您可能会问-而您应该问-他是怎么这么快得到这些答案的?

You may ask -- and you should ask -- "How did he get those answers so fast?

获取软件包sos并输入???overlap

这篇关于如何计算R中椭圆交集的体积的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆