2.5 Posterior simulation
We can also validate the posterior model derived using the Bayes’ Rule via simulation.
Start off with specifying the prior and the likelihoods.
<- list(fake = 0.4, real = 0.6)
prior <- list(fake = 0.2667, real = 0.0222) likelihood
We then simulate 10,000 articles as either “real” or “fake” based on the prior probabilities.
set.seed(84735)
<- sample_n(tibble(type = c("fake", "real")), size = 10000,
articles weight = prior, replace = TRUE)
Summary of simulated articles | ||
type | n | percent |
---|---|---|
fake | 4031 | 40.3% |
real | 5969 | 59.7% |
Total | 10000 | 100.0% |
Against these simulated we add an attribute - “does it have an exclamation (!) mark” based on the likelihoods.
<- articles |>
articles mutate(data_model = if_else(type == "fake", likelihood$fake,
$real)) |>
likelihoodrowwise() |>
mutate(has_exclam = sample(c(T, F), 1, prob = c(data_model, 1-data_model)))
Finally, we filter for those articles which have an exclamation mark and compute the probabilitiy of them being “fake” or “real”. This gives us the posterior probability (simulated).
<-
posterior_prob_sim |>
articles filter(has_exclam) |>
tabyl(type) |>
adorn_pct_formatting(digits = 1) |>
pull(percent)
Fake | Real | |
---|---|---|
prior | 40.0% | 60.0% |
likelihood | 26.7% | 2.2% |
posterior | 88.9% | 11.1% |
posterior (simulated) | 89.0% | 11.0% |