При подбрасывании монеты мы хотели бы вычислить 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")
Если моя конечная цель - получить хороший график, который показывает апостериорную, правдоподобную и априорную как таковые
Как мне вычислить каждое значение?
log_posterior = log(analytic_solution)
. Если возвращение журналов к исходному масштабу вызывает проблемы, вы можете просто сделать все в масштабе журнала. - person Joseph Clark McIntyre   schedule 16.01.2019posterior = exp(lposterior)
, и вы сказали, что именно здесь возникают проблемы. Так что просто работайте сlposterior
и сравните его с журналом аналитического решения. - person Joseph Clark McIntyre   schedule 16.01.2019dbeta(Theta, z+a, N-z+b, log = TRUE)
? Иногда не хватает точности в способе хранения чисел, чтобы сначала получить PDF-файл, а затем зарегистрировать его, но R вернет журнал напрямую (я чувствую, что вы должны получитьdbeta(Theta, z+a, N-z+b) = 0
, но 'dbeta (Theta, z + a, N -z + b, log = TRUE) = - (какое-то большое число) '; когда я использовал Theta = 0,07, N = 143293, z = 17220, a = 1, b = 1, я получил -2308) - person Joseph Clark McIntyre   schedule 16.01.2019log1p(-Theta)
вместоlog(1-Theta)
, если это проблема числовой стабильности. - person merv   schedule 17.01.2019library(bayesAB) bayes.test <- bayesTest(control$converted,treatment$converted, priors = c('alpha' = 1, 'beta' = 1), n_samples = 1e5, distribution = 'bernoulli') print(bayes.test)
- person Salma Bouzid   schedule 17.01.2019