Прежде всего, сделайте некоторые данные для использования. Здесь мы рассмотрим ширину лепестков двух видов растений из встроенного набора данных iris
.
## Some sample data from iris
dat <- droplevels(with(iris, iris[Species %in% c("versicolor", "virginica"), ]))
## make a similar graph
library(ggplot2)
ggplot(dat, aes(Petal.Width, fill=Species)) +
geom_density(alpha=0.5)
![enter image description here](https://i.stack.imgur.com/SG55L.png)
Чтобы найти область пересечения, вы можете использовать approxfun
аппроксимировать функцию, описывающую перекрытия. Затем проинтегрируйте его, чтобы получить область. Так как это кривые плотности, их площадь равна 1 (ish), поэтому интеграл будет составлять процентное перекрытие.
## Get density curves for each species
ps <- lapply(split(dat, dat$Species), function(x) {
dens <- density(x$Petal.Width)
data.frame(x=dens$x, y=dens$y)
})
## Approximate the functions and find intersection
fs <- sapply(ps, function(x) approxfun(x$x, x$y, yleft=0, yright=0))
f <- function(x) fs[[1]](x) - fs[[2]](x) # function to minimize (difference b/w curves)
meet <- uniroot(f, interval=c(1, 2))$root # intersection of the two curves
## Find overlapping x, y values
ps1 <- is.na(cut(ps[[1]]$x, c(-Inf, meet)))
ps2 <- is.na(cut(ps[[2]]$x, c(Inf, meet)))
shared <- rbind(ps[[1]][ps1,], ps[[2]][ps2,])
## Approximate function of intersection
f <- with(shared, approxfun(x, y, yleft=0, yright=0))
## have a look
xs <- seq(0, 3, len=1000)
plot(xs, f(xs), type="l", col="blue", ylim=c(0, 2))
points(ps[[1]], col="red", type="l", lty=2, lwd=2)
points(ps[[2]], col="blue", type="l", lty=2, lwd=2)
polygon(c(xs, rev(xs)), y=c(f(xs), rep(0, length(xs))), col="orange", density=40)
![enter image description here](https://i.stack.imgur.com/ph45K.png)
## Integrate it to get the value
integrate(f, lower=0, upper=3)$value
# [1] 0.1548127
Если вас интересуют групповые различия некоторой меры (в связанном изображении это будет b e 'weight'), то почему бы не просто выполнить t-тест? –
Похоже, вы можете обратиться к статистику, а не к программисту, в зависимости от ваших потребностей. Если ваш вопрос о поиске статистически подходящих тестов или методе оценки, то вы должны спрашивать в [stats.se]. Если вы знаете, какой тест вы хотите выполнить, но не знаете, как это сделать в R, тогда вы должны отредактировать свой вопрос, чтобы сделать это более понятным. – MrFlick