在抛硬币中,我们想计算 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)。但是,由于由于θ值很小,似然性等于0,因此证据的概率是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")
如果我的最终目标是有一个漂亮的图表来显示后验、可能性和先验,就像这样
我应该如何计算每个值?