给定伯努利分布可能性,计算后验概率

时间:2019-01-16 16:31:20

标签: r statistics distribution bayesian coin-flipping

在硬币翻转中,我们想计算p(theta | Data),其中theta是基础参数。

  • 先验遵循带参数a和b的beta分布。
  • 可能性遵循伯努利分布,这使我们有可能出现上升趋势。

这是代码实现:

    a = 1  # a and b are the beta distribution's parameters
    b= 1
    num = 1e5 #Number of candidate theta values
    z= 17220 #Number of heads
    N= 143293 #Total number of flips

    Theta = seq(0.07,0.12, length.out= num)
    prior = dbeta(Theta, a,b) #Compute the prior at each value 

    likelihood = Theta^z *(1-Theta)^(N-z)

    pData = likelihood * prior /sum(likelihood * prior) #Compute evidence
    posterior = likelihood*prior / pData

我想证明后验等于解析解beta(a + z,N-z + b)。但是,由于theta值很小,似然性等于0,因此证据的概率为Nan,后验的概率也为Nan。

我曾尝试计算对数似然,但它给了我一个大的负数,取指数时等于0。

 Theta = seq(0.07,0.12, by= num_steps)
 lprior = log(dbeta(Theta, a,b)) #Compute the log prior at each value 

 llikelihood = log(Theta)*z + log(1-Theta)*(N-z) #log likelihood

 lpData = llikelihood + lprior - sum(llikelihood + lprior) #compute evidence

  lposterior = llikelihood+lprior - lpData
  posterior = exp(lposterior)
  plot(Theta, posterior, type="l")
  lines(Theta, exp(llikelihood), type="l")
  lines(Theta, exp(lprior), type="l")

如果我的最终目标是要有一个漂亮的图形来像这样显示后验,似然和先验

this

我应该如何计算每个值?

1 个答案:

答案 0 :(得分:0)

此答案已通过@JosephClarkMcIntyre的注释部分提供。

以下是摘要:

  • 在伯努利试验中,当N(试验的总数)和z(成功的总数)较大且基本参数theta较小时,最好只在对数空间中操作而不使用指数。
  • 而且,由于对数函数在增加,因此比较两个分布的对数后验与比较后验相似。
  • 上述实现是错误的,因为计算证据的公式不正确。 p(证据)=总和(可能性*优先级),p(log_evidence)=总和(对数可能性+ log_prior)

这是最终代码,在日志空间中包含先验,可能性和证据:

  a = 1  # a and b are the beta distribution's paramteres
  b= 1
  num_steps = 1e5
  z= 17220 #Number of heads
  N= 143293 #Total number of flips

  Theta = seq(from=0.07,to=0.12, length.out= num_steps)
  lprior = dbeta(Theta, a,b,log=TRUE) #Compute the log prior at each value 

  llikelihood = log(Theta)*z + log1p(-Theta)*(N-z) #log likelihood

  lpData = sum(llikelihood + lprior) #compute log of the evidence

  lposterior = llikelihood+lprior - lpData
  plot(Theta,log(dbeta(Theta,a+z,N-z+b)))
  plot(Theta, lposterior, type="l")

但是,分析后对数和计算对数后验与图中所示不同。

如果您认为此答案有缺陷,请随意发表评论,或者解释一下为什么分析后和对数后验不相同。 ^^