Melanjutkan pipeline infer

Pengujian Hipotesis di R

Richie Cotton

Data Evangelist at DataCamp

Rekap: hipotesis dan dataset

$H_{0}$: Proporsi hobiis < 30 sama dengan proporsi hobiis ≥ 30.

$H_{A}$: Proporsi hobiis < 30 berbeda dari proporsi hobiis ≥ 30.

alpha <- 0.1

stack_overflow_imbalanced %>% 
  count(hobbyist, age_cat, .drop = FALSE)
  hobbyist     age_cat    n
1       No At least 30    0
2       No    Under 30  191
3      Yes At least 30   15
4      Yes    Under 30 1025
Pengujian Hipotesis di R

Rekap: alur kerja

null_distn <- dataset %>% 
  specify() %>% 
  hypothesize() %>% 
  generate() %>% 
  calculate()
observed_stat <- dataset %>% 
  specify() %>% 
  calculate()
get_p_value(null_distn, observed_stat)
stack_overflow_imbalanced %>%
  specify(hobbyist ~ age_cat, success = "Yes") %>% 
  hypothesize(null = "independence")
Response: hobbyist (factor)
Explanatory: age_cat (factor)
Null Hypothesis: independence
# A tibble: 1,231 x 2
  hobbyist age_cat    
  <fct>    <fct>      
1 Yes      At least 30
2 Yes      At least 30
3 Yes      At least 30
4 Yes      Under 30   
5 Yes      At least 30
6 Yes      At least 30
7 No       Under 30   
# ... with 1,224 more rows
Pengujian Hipotesis di R

Motivasi generate()

$H_{0}$: Proporsi hobiis < 30 sama dengan proporsi hobiis ≥ 30.

Jika $H_{0}$ benar, maka

  • Pada tiap baris, nilai hobbyist bisa muncul dengan kategori usia mana pun dengan peluang sama.
  • Untuk mensimulasikan ini, permutasikan (acak) nilai hobbyist sambil mempertahankan kategori usia tetap.
Pengujian Hipotesis di R
stack_overflow_imbalanced






# A tibble: 1,231 x 2
  hobbyist age_cat    
  <fct>    <fct>      
1 Yes      At least 30
2 Yes      At least 30
3 Yes      At least 30
4 Yes      Under 30   
5 Yes      At least 30
6 Yes      At least 30
7 No       Under 30   
# ... with 1,224 more rows
bind_cols(
  stack_overflow_imbalanced %>% 
    select(hobbyist) %>% 
    slice_sample(prop = 1),
  stack_overflow_imbalanced %>% 
    select(age_cat)
)
# A tibble: 1,231 x 2
  hobbyist age_cat    
  <fct>    <fct>      
1 Yes      At least 30
2 Yes      At least 30
3 No       At least 30
4 No       Under 30   
5 Yes      At least 30
6 Yes      At least 30
7 Yes      Under 30   
# ... with 1,224 more rows
Pengujian Hipotesis di R

Membuat banyak replikasi

Kisi persegi panjang dua kolom hasil dari pemilihan kolom ditampilkan di kiri. Di kanannya ada kata generate dengan panah ke kanan. Di kanan panah ada tiga kisi dua kolom lagi, mewakili replikasi. Kolom kanan tiap replikasi identik dengan kolom kanan dataset asli, menandakan variabel penjelas tidak berubah. Kolom kiri tiap replikasi berbeda, menandakan variabel respons dipermutasi.

Pengujian Hipotesis di R

generate()

generate() membuat data simulasi yang merefleksikan hipotesis nol.

  • Untuk hipotesis nol "independence", set type ke "permute".
  • Untuk hipotesis nol "point", set type ke "bootstrap" atau "simulate".
stack_overflow_imbalanced %>%
  specify(hobbyist ~ age_cat, success = "Yes") %>% 
  hypothesize(null = "independence") %>% 
  generate(reps = 5000, type = "permute")
Response: hobbyist (factor)
Explanatory: age_cat (factor)
Null Hypothesis: independence
# A tibble: 6,155,000 x 3
# Groups:   replicate [5,000]
  hobbyist age_cat     replicate
  <fct>    <fct>           <int>
1 Yes      At least 30         1
2 Yes      At least 30         1
3 Yes      At least 30         1
4 Yes      Under 30            1
5 Yes      At least 30         1
6 Yes      At least 30         1
7 Yes      Under 30            1
# ... with 6,154,993 more rows
Pengujian Hipotesis di R

Menghitung statistik uji

Kisi dataset asli dan replikasi seperti pada langkah generate ditampilkan. Di bawahnya ada kata 'calculate' dengan panah ke bawah di tiap replikasi. Di bawah tiap panah ada satu sel berarsir mewakili statistik uji. Sekotak mengelilingi seluruh statistik uji dari replikasi, berlabel 'null distribution'.

Pengujian Hipotesis di R

calculate()

calculate() menghitung sebaran statistik uji yang disebut null distribution.

null_distn <- stack_overflow_imbalanced %>%
  specify(
    hobbyist ~ age_cat, 
    success = "Yes"
  ) %>%
  hypothesize(null = "independence") %>%
  generate(reps = 5000, type = "permute") %>%
  calculate(
    stat = "diff in props", 
    order = c("At least 30", "Under 30")
  )
# A tibble: 5,000 x 2
  replicate    stat
      <int>   <dbl>
1         1  0.0896
2         2  0.0896
3         3 -0.180 
4         4  0.157 
5         5  0.0896
6         6 -0.113 
7         7  0.0221
# ... with 4,993 more rows
1 Halaman bantuan ?calculate mencantumkan semua statistik uji yang tersedia.
Pengujian Hipotesis di R

Memvisualisasikan null distribution

visualize(null_distn)

Histogram null distribution. Miring ke kiri, dengan sembilan nilai berbeda.

null_distn %>% count(stat)
# A tibble: 9 x 2
     stat     n
    <dbl> <int>
1 -0.383      2
2 -0.315     22
3 -0.248     63
4 -0.180    246
5 -0.113    641
6 -0.0454  1132
7  0.0221  1453
8  0.0896  1063
9  0.157    378
Pengujian Hipotesis di R

Menghitung statistik uji pada dataset asli

Kisi dataset asli dan replikasi, beserta sel null distribution dari langkah calculate, ditampilkan. Kali ini ada panah ke bawah juga di bawah dataset asli, dan di bawahnya satu sel berarsir. Sel ini diberi kotak berlabel 'observed statistic'.

Pengujian Hipotesis di R

Statistik teramati: specify() %>% calculate()

obs_stat <- stack_overflow_imbalanced %>%
  specify(hobbyist ~ age_cat, success = "Yes") %>%
  # hypothesize(null = "independence") %>%
  # generate(reps = 5000, type = "permute") %>%
  calculate(
    stat = "diff in props",
    order = c("At least 30", "Under 30")
  )
# A tibble: 1 x 1
   stat
  <dbl>
1 0.157
Pengujian Hipotesis di R

Null distribution vs statistik teramati

visualize(null_distn) +
  geom_vline(
    aes(xintercept = stat),
    data = observed_stat, 
    color = "red"
  )

Histogram null distribution, dengan garis vertikal merah pada statistik teramati. Garis berada di batang paling kanan.

Pengujian Hipotesis di R

Dapatkan p-value

get_p_value(
  null_distn, obs_stat, 
  direction = "two sided"   # Not alternative = "two.sided"
)
# A tibble: 1 x 1
  p_value
    <dbl>
1   0.151
# A tibble: 1 x 6
  statistic chisq_df p_value alternative lower_ci upper_ci
      <dbl>    <dbl>   <dbl> <chr>          <dbl>    <dbl>
1      2.79        1  0.0949 two.sided    0.00718   0.0217
Pengujian Hipotesis di R

Ayo berlatih!

Pengujian Hipotesis di R

Preparing Video For Download...