查找两个具有多个交点的图之间的公共区域

时间:2019-06-30 23:24:52

标签: r plot area integral kernel-density

我有以下2个变量的模拟数据。我创建了如下的密度图,

set.seed(1)
x1=density(rnorm(100,0.5,3))
x2=density(rnorm(100,1,3))

plot(x1)
lines(x2)

enter image description here

是否有任何函数可以使用R查找这两个图的公共区域?

我需要对相交点进行积分吗?

谢谢

1 个答案:

答案 0 :(得分:2)

如果将x值使用的两个密度设置为相同,则可以在y值上使用pmin。 (调用str(x1)来查看它们的存储方式。)例如,查看其工作方式:

set.seed(1)
x1 <- density(rnorm(100,0.5,3), from = -10, to = 10, n = 501)
x2 <- density(rnorm(100,1,3), from = -10, to = 10, n = 501)

plot(x2, main = 'Density intersection')
lines(x1)
polygon(x1$x, pmin(x1$y, x2$y), 20, col = 'dodgerblue')

density intersection

取整数意味着将每个pmin乘以x序列中的增量并求和:

sum(pmin(x1$y, x2$y) * diff(x1$x[1:2]))
#> [1] 0.896468