【发布时间】:2021-09-19 20:38:32
【问题描述】:
假设我有两个不同长度的数据集如下:
df1 <- data.frame(x = rnorm(1000, 0, 2))
df2 <- data.frame(y = rnorm(500, 1, 1))
我想计算并绘制 df1 和 df2 的密度图的差异。我需要差异值来计算两个密度图之间差异的总和/平均值。
【问题讨论】:
标签: r
假设我有两个不同长度的数据集如下:
df1 <- data.frame(x = rnorm(1000, 0, 2))
df2 <- data.frame(y = rnorm(500, 1, 1))
我想计算并绘制 df1 和 df2 的密度图的差异。我需要差异值来计算两个密度图之间差异的总和/平均值。
【问题讨论】:
标签: r
首先,计算两个密度在它们的联合范围u。
u <- range(c(x, y))
dx <- density(x, from=u[1], to=u[2])
dy <- density(y, from=u[1], to=u[2])
第二次将估计值y彼此相减。
dd_xy <- dx$y - dy$y
x 应该是一样的。
stopifnot(all.equal(dx$x, dy$x))
然后plot 一个密度并使用lines 来添加其他密度。
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')
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
数据:
set.seed(42)
x <- rnorm(1000, 0, 2)
y <- rnorm(500, 1, 1)
【讨论】: