Bayesian calculation

Fundamentals of Bayesian Data Analysis in R

Rasmus Bååth

Data Scientist

Fundamentals of Bayesian Data Analysis in R

Fundamentals of Bayesian Data Analysis in R

Bayesian inference by calculation












Fundamentals of Bayesian Data Analysis in R

Bayesian inference by calculation

n_ads_shown <- 100










Fundamentals of Bayesian Data Analysis in R

Bayesian inference by calculation

n_ads_shown <- 100
n_visitors
proportion_clicks








Fundamentals of Bayesian Data Analysis in R

Bayesian inference by calculation

n_ads_shown <- 100
n_visitors <- seq(0, 100, by = 1)
proportion_clicks








Fundamentals of Bayesian Data Analysis in R

Bayesian inference by calculation

n_ads_shown <- 100
n_visitors <- seq(0, 100, by = 1)
proportion_clicks <- seq(0, 1, by = 0.01)








Fundamentals of Bayesian Data Analysis in R

Bayesian inference by calculation

n_ads_shown <- 100
n_visitors <- seq(0, 100, by = 1)
proportion_clicks <- seq(0, 1, by = 0.01)
pars <- expand.grid(proportion_clicks = proportion_clicks, 
                    n_visitors = n_visitors)






proportion_clicks n_visitors 
             0.04         38  
             0.11         93 
             0.16        100  
             0.67         98  
             0.96          3  
             0.48         73   
             0.14         13
             ...         ...    
Fundamentals of Bayesian Data Analysis in R

Bayesian inference by calculation

n_ads_shown <- 100
n_visitors <- seq(0, 100, by = 1)
proportion_clicks <- seq(0, 1, by = 0.01)
pars <- expand.grid(proportion_clicks = proportion_clicks,
                    n_visitors = n_visitors)
proportion_clicks <- runif(n_samples, min = 0.0, max = 0.2)





proportion_clicks n_visitors 
             0.04         38  
             0.11         93 
             0.16        100  
             0.67         98  
             0.96          3  
             0.48         73   
             0.14         13
             ...         ...    
Fundamentals of Bayesian Data Analysis in R

Bayesian inference by calculation

n_ads_shown <- 100
n_visitors <- seq(0, 100, by = 1)
proportion_clicks <- seq(0, 1, by = 0.01)
pars <- expand.grid(proportion_clicks = proportion_clicks,
                    n_visitors = n_visitors)
pars$prior <- dunif(pars$proportion_clicks, min = 0, max = 0.2) 





proportion_clicks n_visitors prior   
             0.04         38     5  
             0.11         93     5 
             0.16        100     5 
             0.67         98     0  
             0.96          3     0 
             0.48         73     0  
             0.14         13     5  
             ...         ...    ... 
Fundamentals of Bayesian Data Analysis in R

Bayesian inference by calculation

n_ads_shown <- 100
n_visitors <- seq(0, 100, by = 1)
proportion_clicks <- seq(0, 1, by = 0.01)
pars <- expand.grid(proportion_clicks = proportion_clicks,
                    n_visitors = n_visitors)
pars$prior <- dunif(pars$proportion_clicks, min = 0, max = 0.2) 
n_visitors <- rbinom(n = n_samples, size = n_ads_shown,
                     prob = proportion_clicks)



proportion_clicks n_visitors prior   
             0.04         38     5  
             0.11         93     5 
             0.16        100     5 
             0.67         98     0  
             0.96          3     0 
             0.48         73     0  
             0.14         13     5  
             ...         ...    ... 
Fundamentals of Bayesian Data Analysis in R

Bayesian inference by calculation

n_ads_shown <- 100
n_visitors <- seq(0, 100, by = 1)
proportion_clicks <- seq(0, 1, by = 0.01)
pars <- expand.grid(proportion_clicks = proportion_clicks,
                    n_visitors = n_visitors)
pars$prior <- dunif(pars$proportion_clicks, min = 0, max = 0.2) 
pars$likelihood <- dbinom(pars$n_visitors, size = n_ads_shown,
                          prob = pars$proportion_clicks)



proportion_clicks n_visitors prior    likelihood 
             0.04         38     5  3.409439e-27 
             0.11         93     5  5.006969e-80
             0.16        100     5  2.582250e-80 
             0.67         98     0  4.863666e-15
             0.96          3     0 3.592054e-131 
             0.48         73     0  2.215148e-07 
             0.14         13     5  1.129620e-01 
             ...         ...    ...          ...
Fundamentals of Bayesian Data Analysis in R

Bayesian inference by calculation

n_ads_shown <- 100
n_visitors <- seq(0, 100, by = 1)
proportion_clicks <- seq(0, 1, by = 0.01)
pars <- expand.grid(proportion_clicks = proportion_clicks, 
                    n_visitors = n_visitors)
pars$prior <- dunif(pars$proportion_clicks, min = 0, max = 0.2) 
pars$likelihood <- dbinom(pars$n_visitors, size = n_ads_shown,
                          prob = pars$proportion_clicks)
pars$probability <- pars$likelihood * pars$prior


proportion_clicks n_visitors prior    likelihood  probability
             0.04         38     5  3.409439e-27 1.704720e-26
             0.11         93     5  5.006969e-80 2.503485e-79
             0.16        100     5  2.582250e-80 1.291125e-79
             0.67         98     0  4.863666e-15 0.000000e+00
             0.96          3     0 3.592054e-131 0.000000e+00
             0.48         73     0  2.215148e-07 0.000000e+00
             0.14         13     5  1.129620e-01 5.648101e-01
             ...         ...    ...          ...          ...
Fundamentals of Bayesian Data Analysis in R

Bayesian inference by calculation

n_ads_shown <- 100
n_visitors <- seq(0, 100, by = 1)
proportion_clicks <- seq(0, 1, by = 0.01)
pars <- expand.grid(proportion_clicks = proportion_clicks,
                    n_visitors = n_visitors)
pars$prior <- dunif(pars$proportion_clicks, min = 0, max = 0.2) 
pars$likelihood <- dbinom(pars$n_visitors, size = n_ads_shown, 
                          prob = pars$proportion_clicks)
pars$probability <- pars$likelihood * pars$prior
sum(pars$probability)
105
proportion_clicks n_visitors prior    likelihood  probability
             0.04         38     5  3.409439e-27 1.704720e-26
             0.11         93     5  5.006969e-80 2.503485e-79
             0.16        100     5  2.582250e-80 1.291125e-79
             0.67         98     0  4.863666e-15 0.000000e+00
             0.96          3     0 3.592054e-131 0.000000e+00
             0.48         73     0  2.215148e-07 0.000000e+00
             0.14         13     5  1.129620e-01 5.648101e-01
             ...         ...    ...          ...          ...
Fundamentals of Bayesian Data Analysis in R

Bayesian inference by calculation

n_ads_shown <- 100
n_visitors <- seq(0, 100, by = 1)
proportion_clicks <- seq(0, 1, by = 0.01)
pars <- expand.grid(proportion_clicks = proportion_clicks,
                    n_visitors = n_visitors)
pars$prior <- dunif(pars$proportion_clicks, min = 0, max = 0.2) 
pars$likelihood <- dbinom(pars$n_visitors, size = n_ads_shown,
                          prob = pars$proportion_clicks)
pars$probability <- pars$likelihood * pars$prior
pars$probability <- pars$probability / sum(pars$probability)

proportion_clicks n_visitors prior    likelihood  probability
             0.04         38     5  3.409439e-27 1.623542e-28
             0.11         93     5  5.006969e-80 2.384271e-81
             0.16        100     5  2.582250e-80 1.229643e-81
             0.67         98     0  4.863666e-15 0.000000e+00
             0.96          3     0 3.592054e-131 0.000000e+00
             0.48         73     0  2.215148e-07 0.000000e+00
             0.14         13     5  1.129620e-01 5.379144e-03
             ...         ...    ...          ...          ...
Fundamentals of Bayesian Data Analysis in R

Bayesian inference by calculation

n_ads_shown <- 100
n_visitors <- seq(0, 100, by = 1)
proportion_clicks <- seq(0, 1, by = 0.01)
pars <- expand.grid(proportion_clicks = proportion_clicks, 
                    n_visitors = n_visitors)
pars$prior <- dunif(pars$proportion_clicks, min = 0, max = 0.2) 
pars$likelihood <- dbinom(pars$n_visitors, size = n_ads_shown, 
                          prob = pars$proportion_clicks)
pars$probability <- pars$likelihood * pars$prior
pars$probability <- pars$probability / sum(pars$probability)
sum(pars$probability)
1
proportion_clicks n_visitors prior    likelihood  probability
             0.04         38     5  3.409439e-27 1.623542e-28
             0.11         93     5  5.006969e-80 2.384271e-81
             0.16        100     5  2.582250e-80 1.229643e-81
             0.67         98     0  4.863666e-15 0.000000e+00
             0.96          3     0 3.592054e-131 0.000000e+00
             0.48         73     0  2.215148e-07 0.000000e+00
             0.14         13     5  1.129620e-01 5.379144e-03
             ...         ...    ...          ...          ...
Fundamentals of Bayesian Data Analysis in R

Fundamentals of Bayesian Data Analysis in R

Fundamentals of Bayesian Data Analysis in R
n_ads_shown <- 100
n_visitors <- seq(0, 100, by = 1)
proportion_clicks <- seq(0, 1, by = 0.01)
pars <- expand.grid(proportion_clicks = proportion_clicks, 
                    n_visitors = n_visitors)
pars$prior <- dunif(pars$proportion_clicks, min = 0, max = 0.2) 
pars$likelihood <- dbinom(pars$n_visitors, size = n_ads_shown, 
                          prob = pars$proportion_clicks)
pars$probability <- pars$likelihood * pars$prior
pars$probability <- pars$probability / sum(pars$probability)


proportion_clicks n_visitors prior    likelihood  probability
             0.04         38     5  3.409439e-27 1.623542e-28
             0.11         93     5  5.006969e-80 2.384271e-81
             0.16        100     5  2.582250e-80 1.229643e-81
             0.67         98     0  4.863666e-15 0.000000e+00
             0.96          3     0 3.592054e-131 0.000000e+00
             0.48         73     0  2.215148e-07 0.000000e+00
             0.14         13     5  1.129620e-01 5.379144e-03
             ...         ...    ...          ...          ...
Fundamentals of Bayesian Data Analysis in R
n_ads_shown <- 100
n_visitors <- seq(0, 100, by = 1)
proportion_clicks <- seq(0, 1, by = 0.01)
pars <- expand.grid(proportion_clicks = proportion_clicks, 
                    n_visitors = n_visitors)
pars$prior <- dunif(pars$proportion_clicks, min = 0, max = 0.2) 
pars$likelihood <- dbinom(pars$n_visitors, size = n_ads_shown,
                          prob = pars$proportion_clicks)
pars$probability <- pars$likelihood * pars$prior
pars$probability <- pars$probability / sum(pars$probability)
pars <- pars[pars$n_visitors == 13, ]
pars$probability <- pars$probability / sum(pars$probability)
proportion_clicks n_visitors prior    likelihood  probability
             0.04         13     5  1.368611e-04 0.0001428716
             0.14         13     5  1.129620e-01 0.1179229621
             0.19         13     5  3.265098e-02 0.0340849069
             0.39         13     0  7.234996e-09 0.0000000000
             0.59         13     0  1.531703e-21 0.0000000000
             0.79         13     0  3.582066e-45 0.0000000000
             0.94         13     0  1.591196e-91 0.0000000000
             ...         ...    ...          ...          ...
Fundamentals of Bayesian Data Analysis in R

Fundamentals of Bayesian Data Analysis in R

Fundamentals of Bayesian Data Analysis in R

Fundamentals of Bayesian Data Analysis in R

Calculate for yourself!

Fundamentals of Bayesian Data Analysis in R

Preparing Video For Download...