使用R通过ggplot计算重叠密度图的面积

use*_*028 5 r ggplot2 density-plot probability-density

如何获得重叠密度曲线下的面积?

我该如何解决 R 的问题?(这里有python的解决方案:计算两个函数的重叠面积

set.seed(1234)
df <- data.frame(
  sex=factor(rep(c("F", "M"), each=200)),
  weight=round(c(rnorm(200, mean=55, sd=5),
                 rnorm(200, mean=65, sd=5)))
  )
Run Code Online (Sandbox Code Playgroud)

(来源:http : //www.sthda.com/english/wiki/ggplot2-density-plot-quick-start-guide-r-software-and-data-visualization

ggplot(df, aes(x=weight, color=sex, fill=sex)) + 
 geom_density(aes(y=..density..), alpha=0.5)
Run Code Online (Sandbox Code Playgroud)

“图中使用的点由 ggplot_build() 返回,因此您可以访问它们。” 所以现在,我有了积分,我可以将它们提供给 approxfun,但我的问题是我不知道如何减去密度函数。

非常感谢任何帮助!(而且我相信需求量很大,没有现成的解决方案。)

小智 5

我正在寻找一种方法来为经验数据执行此操作,并且遇到了 user5878028 提到的多个交叉点的问题。经过一番挖掘,我找到了一个非常简单的解决方案,即使对于像我这样的 R 菜鸟:

安装并加载库“overlapping”(执行计算)和“lattice”(显示结果):

library(overlapping)
library(lattice)
Run Code Online (Sandbox Code Playgroud)

然后将变量“x”定义为包含要比较的两个密度分布的列表。在本例中,两个数据集“data1”和“data2”都是名为“yourfile”的文本文件中的列:

x <- list(X1=yourfile$data1, X2=yourfile$data2)
Run Code Online (Sandbox Code Playgroud)

然后告诉它以图表的形式显示输出,该图表还将显示估计的重叠百分比:

out <- overlap(x, plot=TRUE)
Run Code Online (Sandbox Code Playgroud)

我希望这能帮助像它帮助我的人!这是一个示例重叠图

重叠图