Search code examples
rplotareaintegralkernel-density

Find the common area between two graphs with multiple intersection points


I have following simulated data of following 2 variables. I created the density plot as follows,

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

plot(x1)
lines(x2)

enter image description here

Is there any function that can use to find the common area for these 2 graphs using R ?

Do i need to perform an integration for intersecting points ?

Thank you


Solution

  • If you set the sequence both densities use for x values to be identical, you can use pmin on the y values. (Call str(x1) to see how they're stored.) For instance, to see how it works:

    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

    Taking the integral means just multiplying each pmin times the increment in the x sequence and summing the lot:

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