开始使用免费开始使用

条件化小捷径

太好了,您刚刚完成了一次贝叶斯计算,而且完全没有用到模拟!您绘制的图形应当与第 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")
编辑并运行代码