条件化小捷径
太好了,您刚刚完成了一次贝叶斯计算,而且完全没有用到模拟!您绘制的图形应当与第 3 章中计算得到的后验分布相似。不过,您会发现代码写得相当长。有没有可以精简的地方呢?
答案是肯定的!您可以直接对数据进行条件化,而不必先构建联合分布。
本练习是课程的一部分
R 中的贝叶斯数据分析基础
练习说明
- 将
n_visitors直接设为6,把原来的seq语句替换掉。 - 现在可以删除对数据进行条件化的那一行代码,以及紧随其后的用于将
pars$probability归一化的那一行。 - 最后再仔细检查一下完整代码,并确认修改后的结果与之前相同。:)
交互式实操练习
通过完成这段示例代码来试试这个练习。
# Simplify the code below by directly conditioning on the data
n_ads_shown <- 100
proportion_clicks <- seq(0, 1, by = 0.01)
n_visitors <- seq(0, 100, by = 1)
pars <- expand.grid(proportion_clicks = proportion_clicks,
n_visitors = n_visitors)
pars$prior <- dunif(pars$proportion_clicks, min = 0, max = 0.2)
pars$likelihood <- dbinom(pars$n_visitors,
size = n_ads_shown, prob = pars$proportion_clicks)
pars$probability <- pars$likelihood * pars$prior
pars$probability <- pars$probability / sum(pars$probability)
pars <- pars[pars$n_visitors == 6, ]
pars$probability <- pars$probability / sum(pars$probability)
plot(pars$proportion_clicks, pars$probability, type = "h")