我必须计算出 n 维空间中多胞体之间重叠的百分比,其中我唯一可用的参考来源是这些多胞体中的一组随机采样点。
假设以下两个 R 对象是从 5 个维度的两个不同多胞体中随机采样的两组点:
one <- matrix(runif(5000, min = 0, max = 5), ncol = 5)
two <- matrix(runif(5000, min = 0, max = 4), ncol = 5)
在这个例子中,我为第二个对象选择了一个较小的范围,所以我们知道应该有小于 10% 的重叠。如果我错了,请告诉我。
编辑: 简单说一下,问题是这两个对象之间的重叠百分比是多少?
我需要一种推广到 n 维空间的方法。
这个 stackoverflow question 与我正在尝试做的有点相似,但我没有设法让它工作。
答案 0 :(得分:1)
所以,最直接的方法是使用 hypervolume 包。
library(hypervolume)
one <- hypervolume(matrix(runif(5000, min = 0, max = 5), ncol = 5))
two <- hypervolume(matrix(runif(5000, min = 0, max = 4), ncol = 5))
three = hypervolume_set(one, two, check.memory=FALSE)
get_volume(three)
这将为您提供音量。
hypervolume_overlap_statistics(three)
此函数将输出四个不同的指标,一个是 Jaccard 相似度指数。 Jaccard Similarity 是两个样本集之间的重叠比例(交集除以并集)。
Chris 建议使用 volesti 作为替代方案。另一种选择是几何包。
他们不会立即计算比例。在这里你需要找到交集(例如intersectn
中的geometry
,volesti中的VpolytopeIntersection
),然后分别计算多面体的体积以及它们的交集,然后你需要划分体积与两个多胞体体积总和的交集。
在这里,他们还使用不同的方法来计算体积,如果您尝试在 n 维空间中构造凸包,它可能更适合您。对我来说,hypervolume 是一个更好的解决方案,因为我正在做一些更类似于 Hutchinson 来自生态学和进化生物学的 n 维 hypervolume 概念的事情。