在硬币翻转中,我们想计算p(theta | Data),其中theta是基础参数。
这是代码实现:
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")
如果我的最终目标是要有一个漂亮的图形来像这样显示后验,似然和先验
我应该如何计算每个值?
答案 0 :(得分:0)
此答案已通过@JosephClarkMcIntyre的注释部分提供。
以下是摘要:
这是最终代码,在日志空间中包含先验,可能性和证据:
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")
但是,分析后对数和计算对数后验与图中所示不同。
如果您认为此答案有缺陷,请随意发表评论,或者解释一下为什么分析后和对数后验不相同。 ^^