6  Proporties vergelijken

# Zoals altijd: de pakket moeten wel geïnstalleerd zijn.
library(tidyverse)
Warning: package 'tidyverse' was built under R version 4.1.3
-- Attaching packages --------------------------------------- tidyverse 1.3.1 --
v ggplot2 3.3.6     v purrr   0.3.4
v tibble  3.1.7     v dplyr   1.0.9
v tidyr   1.2.0     v stringr 1.4.0
v readr   2.1.2     v forcats 0.5.1
Warning: package 'ggplot2' was built under R version 4.1.3
Warning: package 'tibble' was built under R version 4.1.3
Warning: package 'tidyr' was built under R version 4.1.3
Warning: package 'readr' was built under R version 4.1.3
Warning: package 'dplyr' was built under R version 4.1.3
-- Conflicts ------------------------------------------ tidyverse_conflicts() --
x dplyr::filter() masks stats::filter()
x dplyr::lag()    masks stats::lag()
library(brms)
Warning: package 'brms' was built under R version 4.1.3
Loading required package: Rcpp
Warning: package 'Rcpp' was built under R version 4.1.3
Loading 'brms' package (version 2.17.0). Useful instructions
can be found by typing help('brms'). A more detailed introduction
to the package is available through vignette('brms_overview').

Attaching package: 'brms'
The following object is masked from 'package:stats':

    ar
library(bayesplot)
Warning: package 'bayesplot' was built under R version 4.1.3
This is bayesplot version 1.9.0
- Online documentation and vignettes at mc-stan.org/bayesplot
- bayesplot theme set to bayesplot::theme_default()
   * Does _not_ affect other ggplot2 plots
   * See ?bayesplot_theme_set for details on theme setting
library(ProbBayes)
Warning: package 'ProbBayes' was built under R version 4.1.3
Loading required package: LearnBayes

Attaching package: 'LearnBayes'
The following object is masked from 'package:brms':

    rdirichlet
Loading required package: gridExtra

Attaching package: 'gridExtra'
The following object is masked from 'package:dplyr':

    combine
Loading required package: shiny
Warning: package 'shiny' was built under R version 4.1.3

6.1 Proporties vergelijken

6.1.1 Facebook gebruik, voorbeeld

In Hoofdstuk 9 van Alberts en Hu’s boek vergelijken ze de volgende proporties. Een sample studenten is gevraagd naar hun geslacht en het gemiddeld aantal keren dat ze op een dag Facebook bezoeken.

Van de \(n_M\) mannen in de sample had \(y_M\) een hoog aantal Facebook bezoeken en van de \(n_F\) vrouwen in de sample had \(y_F\) een hoog aantal bezoeken.

Stel dat de data zijn georganiseerd als het volgende dataframe:

|—— | ———– | —— | | Geslacht| Sample-omva | bezoek | | mann | \(n_m\) | $y_m | | vro | \(n_f\) | \(y_f\) |

6.1.2 Sampling model

Stel dat we twee onafhankelijke samples hebben waarbij \(y_M\) binomial(\(n_M\) is, \(p_M\)) en \(y_F\) is binomial(\(n_F\),\(p_F\)).

Schrijf de proporties met eem logistisch model:

\[log(\frac{p}{1-p})=\beta_o + \beta_1I(Geslacht=Man)\]

Voor vrouwen is de logit van \(p_f\) als volgt:

\[log(\frac{p}{1-p})=\beta_0\]

en voor mannen is de logit van \(p_m\) als

\[log(\frac{p}{1-p})=\beta_0 +\beta_1\]

6.1.3 De data

Hier zijn de geobserveerde data:

fb_data <- data.frame(Gender = c("male", "female"),
                      Sample_Size = c(93, 151),
                      Visits = c(39, 75))

6.1.4 Priors

In dit model is \(\beta_0\) de logit van het aandeel vrouwen dat veel Facebook gebruikt en \(\beta_1\) het verschil in de logits van de proporties voor mannen en vrouwen.

Veronderstel dat je niet veel weet over de locatie van \(beta_0\), maar je denkt dat mannen en vrouwen gelijkaardig zijn in hun gebruik van Facebook. Dus je kent u een N(0, 31.6) toe aan \(\beta_0\) met een hoge standaardafwijking, wat weinig kennis weergeeft. Om de overtuiging weer te geven dat \(\beta_1\) dicht bij 0 ligt, gebruik je een \(N(0, 0.71)\) prior.

De get_prior() functie geeft een lijst van alle parameters om priors op te definiëren voor dit specifieke model, en kent het resultaat toe aan de prior. Dan worden de twee componenten van de prior toegewezen die de bovenstaande verklaringen weergeven.

(my_prior <- get_prior(family = binomial,
           Visits | trials(Sample_Size) ~ Gender,
           data = fb_data))
                prior     class       coef group resp dpar nlpar lb ub
               (flat)         b                                       
               (flat)         b Gendermale                            
 student_t(3, 0, 2.5) Intercept                                       
       source
      default
 (vectorized)
      default

6.1.5 Posterior sampling

Hieronder wordt brm() gebruikt met de priorspecificatie in my_prior.

fit <- brm(family = binomial,
           Visits | trials(Sample_Size) ~ Gender,
           data = fb_data,
           prior = my_prior,
           iter = 1000,
           refresh = 0)
Compiling Stan program...
Start sampling

Je krijgt dan de matrix van gesimuleerde waarden van de parameters met de posterior_samples() functie.

post <- posterior_samples(fit)
Warning: Method 'posterior_samples' is deprecated. Please see ?as_draws for
recommended alternatives.
head(post)
  b_Intercept b_Gendermale    lprior      lp__
1  0.13513941   -0.6202579 -1.920443 -7.839533
2 -0.11196426   -0.1659622 -1.921229 -7.348417
3 -0.16170932    0.1897022 -1.917656 -8.984950
4  0.09659172   -0.5877812 -1.921327 -7.674766
5 -0.14531896    0.2198457 -1.917313 -9.302451
6  0.16357662   -0.3082601 -1.917189 -8.097521

De plot() functie geeft de traceplots en densityplots van elke parameter.

plot(fit)

Posterior samenvattingen krijg je met de print() functie.

print(fit)
 Family: binomial 
  Links: mu = logit 
Formula: Visits | trials(Sample_Size) ~ Gender 
   Data: fb_data (Number of observations: 2) 
  Draws: 4 chains, each with iter = 1000; warmup = 500; thin = 1;
         total post-warmup draws = 2000

Population-Level Effects: 
           Estimate Est.Error l-95% CI u-95% CI Rhat Bulk_ESS Tail_ESS
Intercept     -0.01      0.17    -0.35     0.35 1.00     2052     1348
Gendermale    -0.32      0.28    -0.88     0.23 1.00     1049     1154

Draws were sampled using sampling(NUTS). For each parameter, Bulk_ESS
and Tail_ESS are effective sample size measures, and Rhat is the potential
scale reduction factor on split chains (at convergence, Rhat = 1).