首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何计算数据长度不同的两个密度图之间的差值?

如何计算数据长度不同的两个密度图之间的差值?
EN

Stack Overflow用户
提问于 2021-09-17 21:24:33
回答 1查看 186关注 0票数 1

假设我有两个不同长度的数据集,如下所示:

代码语言:javascript
复制
df1 <- data.frame(x = rnorm(1000, 0, 2))
df2 <- data.frame(y = rnorm(500, 1, 1))

我要计算和绘制df1和df2的密度图的差异。我需要差分值来计算两个密度图之间差的总数/平均值。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-09-17 21:35:06

首先,计算两种密度在其联合范围内的u

代码语言:javascript
复制
u <- range(c(x, y))
dx <- density(x, from=u[1], to=u[2])
dy <- density(y, from=u[1], to=u[2])

第二,从彼此之间减去y的估计。

代码语言:javascript
复制
dd_xy <- dx$y - dy$y

x应该是一样的。

代码语言:javascript
复制
stopifnot(all.equal(dx$x, dy$x))

绘图

然后plot的一个密度,并使用lines添加其他。

代码语言:javascript
复制
plot(dx, col=4, ylim=c(-.25, .45), main='Density distributions', xlab='')
abline(h=0, lty=3, col=8)
lines(dy, col=3)
lines(dx$x, dd_xy, col=2, lty=2, lwd=2)  ## <---------------- difference
mtext(sprintf('N(x) = %s  Bandwidth(x) = %s', dx$n, signif(dx$bw, 3)), 1, 2)
mtext(sprintf('N(y) = %s  Bandwidth(y) = %s', dy$n, signif(dy$bw, 3)), 1, 3)
legend('topleft', legend=c('x', 'y', 'x - y'), col=4:2, 
       lty=c(1, 1, 2), lwd=c(1, 1, 2), title='density')

计算

代码语言:javascript
复制
sapply(c('sum', 'mean', 'sd', 'min', 'max'), \(x) do.call(x, list(dd_xy))) |>
  signif(3)
#       sum      mean        sd       min       max 
# -0.049700 -0.000097  0.088000 -0.249000  0.122000 

数据:

代码语言:javascript
复制
set.seed(42)
x <- rnorm(1000, 0, 2)
y <- rnorm(500, 1, 1)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69229627

复制
相关文章

相似问题

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