首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何计算两个数据集分布之间的重叠

如何计算两个数据集分布之间的重叠
EN

Stack Overflow用户
提问于 2020-11-18 04:01:07
回答 1查看 582关注 0票数 1

Hi如何计算R中两列(或一列的两个子集)之间的重叠面积。请参阅以下示例数据:

代码语言:javascript
运行
复制
set.seed(1234)
df <- data.frame(
  Data=factor(rep(c("D1", "D2"), each=200)),
  weight=round(c(rnorm(200, mean=55, sd=5),
                 rnorm(200, mean=65, sd=5)))
)

library(ggplot2)
plot <- ggplot(df, aes(weight,fill = Data))+
  geom_density() 
plot

这就产生了下面的图。我想知道,如何给重叠区域着色并计算重叠系数(OVL),类似于使用蒙特卡洛积分here所做的那样?请注意,当我询问是否有观测值的数据集时,提供的链接(和上面的示例)使用了参数分布。

EN

回答 1

Stack Overflow用户

发布于 2020-11-18 04:56:46

通常,我发现直接使用密度并将其绘制为geom_area更容易。如果在两个分布上获得匹配的x轴采样点,则可以使用pmin找到重叠区域,其值的总和除以两条曲线的值的总和应该会得到重叠的总面积的比例。

代码语言:javascript
运行
复制
d1dens <- with(df, density(weight[Data == "D1"], 
                           from = min(weight), 
                           to = max(weight)))
d2dens <- with(df, density(weight[Data == "D2"], 
                           from = min(weight),
                           to = max(weight)))
joint <- pmin(d1dens$y, d2dens$y)

df2 <- data.frame(x = rep(d1dens$x, 3), 
                  y = c(d1dens$y, d2dens$y, joint),
                  Data = rep(c("D1", "D2", "overlap"), each = length(d1dens$x)))

ggplot(df2, aes(x, y, fill = Data)) + 
  geom_area(position = position_identity(), color = "black") +
  scale_fill_brewer(palette = "Pastel2") +
  theme_bw()

代码语言:javascript
运行
复制
sum(joint) / sum(d1dens$y, d2dens$y)
#> [1] 0.1480701
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64882496

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档