R 2.5%和5%阴影的密度图

R 2.5%和5%阴影的密度图,r,ggplot2,R,Ggplot2,我想尝试用R再现以下图像。目标是将单面和双面假设表示为.025和.95水平,类似于下图: 我设法利用其他问题的资源在分位数内创建了一个阴影,但我希望它位于边界之外,而不是内部。守则: set.seed(1) draws <- rnorm(1000000) dens <- density(draws) q025 <- quantile(draws, .025) q975 <- quantile(draws, .975) dd <- with(dens, data

我想尝试用R再现以下图像。目标是将单面和双面假设表示为.025和.95水平,类似于下图:

我设法利用其他问题的资源在分位数内创建了一个阴影,但我希望它位于边界之外,而不是内部。守则:

set.seed(1)
draws <- rnorm(1000000)
dens <- density(draws)

q025 <- quantile(draws, .025)
q975 <- quantile(draws, .975)

dd <- with(dens, data.frame(x, y))

library(ggplot2)

qplot(x, y, data = dd, geom="line") +
  geom_ribbon(data = subset(dd, x > q025 & x < q975),
              aes(ymax = y),
              ymin = 0, fill = "red", colour = NA, alpha = 0.5)
set.seed(1)

绘制这有点笨重,但似乎有效;注意,填充不是很完美

set.seed(1)
draws <- data.frame(x = rnorm(1000000))
q025  <- quantile(draws$x, .025)
q975  <- quantile(draws$x, .975)

ggplot(draws, aes(x)) +
  geom_density() +
  stat_function(fun = dnorm, xlim = c(min(draws$x), q025), geom = "area") +
  stat_function(fun = dnorm, xlim = c(q975, max(draws$x)), geom = "area")
set.seed(1)
绘制
set.seed(1)
draws <- rnorm(1000000)
dd <- data.frame(x = draws, y = dnorm(draws))
q025  <- quantile(draws$x, .025)
q975  <- quantile(draws$x, .975)

ggplot(dd, aes(x, y)) +
  geom_line() +
  stat_function(fun = dnorm, xlim = c(min(draws$x), q025), geom = "area") +
  stat_function(fun = dnorm, xlim = c(q975, max(draws$x)), geom = "area")