Hypothesetoetsen en z-scores

Hypothesis Testing in R

Richie Cotton

Data Evangelist at DataCamp

A/B-testen

  • Electronic Arts (EA) is een videogamebedrijf.
  • In 2013 brachten ze SimCity 5 uit.
  • Doel: meer pre-orders.
  • Ze gebruikten A/B-testen om advertenties te vergelijken.
  • Je splitst gebruikers in control- en treatmentgroepen.

Gebouw van Electronic Arts

1 Beeldcredits: "Electronic Arts" door majaX1 CC BY-NC-SA 2.0
Hypothesis Testing in R

A/B-test retailpagina

Control

SimCity-webpagina met banner met tekst "pre-order en krijg $20 korting op je volgende aankoop"

Treatment

SimCity-webpagina zonder banner

Hypothesis Testing in R

A/B-testresultaten

  • De treatmentgroep (zonder advertentie) had 43,4% meer aankopen dan de controlegroep (met advertentie).
  • De intuïtie "een advertentie verhoogt de verkoop" bleek fout.
  • Was dit resultaat statistisch significant of toeval?
  • Daarvoor heb je de data van EA nodig.
  • Je gebruikt technieken uit Sampling in R + deze cursus.
Hypothesis Testing in R

Stack Overflow Developer Survey 2020

library(dplyr)
glimpse(stack_overflow)
Rows: 2,261
Columns: 8
$ respondent         <dbl> 36, 47, 69, 125, 147, 152, 166, 170, 187, 196, 221,…
$ age_first_code_cut <chr> "adult", "child", "child", "adult", "adult", "adult…
$ converted_comp     <dbl> 77556, 74970, 594539, 2000000, 37816, 121980, 48644…
$ job_sat            <fct> Slightly satisfied, Very satisfied, Very satisfied,…
$ purple_link        <chr> "Hello, old friend", "Hello, old friend", "Hello, o…
$ age_cat            <chr> "At least 30", "At least 30", "Under 30", "At least…
$ age                <dbl> 34, 53, 25, 41, 28, 30, 28, 26, 43, 23, 24, 35, 37,…
$ hobbyist           <chr> "Yes", "Yes", "Yes", "Yes", "No", "Yes", "Yes", "Ye…
Hypothesis Testing in R

Hypothese over het gemiddelde

Een hypothese:

Het gemiddelde jaarlijkse salaris van de populatie datascientists is $110.000.

De puntschatting (steekproefstatistiek):

mean_comp_samp <- mean(stack_overflow$converted_comp)
mean_comp_samp <- stack_overflow %>% 
  summarize(mean_compensation = mean(converted_comp)) %>% 
  pull(mean_compensation)
119574.7
Hypothesis Testing in R

Een bootstrapverdeling genereren

# Stap 3. Herhaal stap 1 & 2 vaak
so_boot_distn <- replicate(
  n = 5000,
  expr = {
    # Stap 1. Resamplen
    stack_overflow %>%
      slice_sample(prop = 1, replace = TRUE) %>%
      # Stap 2. Puntschatter berekenen
      summarize(mean_compensation = mean(converted_comp)) %>% 
      pull(mean_compensation)
  }
)
1 Bootstrapverdelingen komen aan bod in hoofdstuk 4 van Sampling in R
Hypothesis Testing in R

De bootstrapverdeling visualiseren

tibble(resample_mean = so_boot_distn) %>%
  ggplot(aes(resample_mean)) +
  geom_histogram(binwidth = 1000)

Histogram van de bootstrapverdeling: klokvormig, ruwweg tussen 110000 en 140000

Hypothesis Testing in R

Standaardfout

std_error <- sd(so_boot_distn)
5511.674
Hypothesis Testing in R

z-scores

$\text{gestandaardiseerde waarde} = \dfrac{\text{waarde} - \text{gemiddelde}}{\text{standaardafwijking}}$

$z = \dfrac{\text{steekproefstat} - \text{gehypoth. waarde}}{\text{standaardfout}}$

$z = \dfrac{\$119,574.7 - \$110,000}{\$5511.67} = 1.737$

mean_comp_samp
119574.7
mean_comp_hyp <- 110000
std_error
5511.674
z_score <- (mean_comp_samp - mean_comp_hyp) / std_error
1.737171
Hypothesis Testing in R

De hypothese toetsen

  • Is 1.737171 hoog of laag?
  • Dit is het doel van de cursus!
Use case hypothesetoetsen:

Bepaal of steekproefstatistieken dicht bij of ver van verwachte (of "gehypotheseerde") waarden liggen.

Hypothesis Testing in R

Standaardnormale (z) verdeling

Standaardnormale verdeling: de normale verdeling met gemiddelde 0 en standaardafwijking 1.

tibble(x = seq(-4, 4, 0.01)) %>% 
  ggplot(aes(x)) +
  stat_function(fun = dnorm) +
  ylab("PDF(x)")

Dichtheidsplot van de PDF voor de standaardnormale verdeling

Hypothesis Testing in R

Laten we oefenen!

Hypothesis Testing in R

Preparing Video For Download...