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)
我希望这能帮助像它帮助我的人!这是一个示例重叠图
