0

背景

我正在尝试复制 Gelman 等人的“贝叶斯数据分析”中关于狄利克雷过程的章节中的以下图表。人。这些图像描绘了一个断棍过程。

这些图有效地向您展示了四种不同场景的概率分布。横轴是“数据”值,纵轴是与该数据相关的概率估计。

期望的

我的问题

我想我已经有了创建绘图所需的数据;数据点和相应的概率估计(是的,概率实际上是点周围的小区间,因为它是概率密度函数)。问题是我不知道如何制作一个包含上述漂亮条形的图。通常在 R 中,直方图是由仅包含数据值的向量构建的,但我有两列。(并且搜索没有发现任何东西)

## data
head(dat)
    thet prob.estim
1 -0.1532657 0.05451808
2 -1.2471313 0.06407723
3  0.3452990 0.06608997
4  0.4886357 0.12634090
5  1.3894174 0.02572439
6 -0.7041029 0.03688599

我能得到的最接近的看起来很糟糕。请参阅下面的代码和图像。(注意概率估计因使用随机数生成而不同)

# Best I can do, but not bars
plot(dat$thet, dat$prob.estim, main = "Alpha = 1")

我能做的最好的

4

1 回答 1

1

首先,生成一些要使用的数据:

set.seed(24601)
thet <- seq(-3, 3, by=.05)
prob.estim <- rbeta(length(thet), 1, 100)
dat <- data.frame(thet = thet,
                  prob.estim = prob.estim)
# putting in the spike in the plot
dat[thet == 1, ]$prob.estim <- .99 

使用基本图形生成绘图

首先,这是散点图版本(这样您就可以看到我生成的数据与您的数据相比如何)

plot(dat$thet, dat$prob.estim)

分散 这是一个条形图

barplot(names.arg = dat$thet, height = dat$prob.estim)

酒吧

使用 ggplot2 生成绘图

如果你有兴趣控制你的情节的外观(听起来像你),你可能想要转移到 ggplot2。

library(ggplot2)
ggplot(dat, aes(y = prob.estim, x = thet)) + 
  geom_bar(stat = "identity") + 
  theme_classic()

bar_ggplot

于 2017-03-02T04:19:46.547 回答