При подбрасывании монеты мы бы хотели вычислить p (theta | Data), где theta - основной параметр.
- Предыдущее следует бета-распределению с параметрами a и b.
- Вероятность следует распределению Бернулли, которое дает нам вероятность выпадения головы.
Вот реализация кода:
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
Я хотел бы проверить, что апостериор равен аналитическому решению бета (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")
Если моя конечная цель состоит в том, чтобы иметь хороший график, который показывает апостериорный, вероятностный и предшествующий значения, например, так: 1011 *
Как мне следуетвычислять каждое значение?