Continuarea pipeline-ului infer

Testarea ipotezelor în R

Richie Cotton

Data Evangelist at DataCamp

Recapitulare: ipoteze și set de date

$H_{0}$: Proporția de hobbyiști sub 30 de ani este egală cu prop. de hobbyiști de cel puțin 30 de ani.

$H_{A}$: Proporția de hobbyiști sub 30 de ani diferă de prop. de hobbyiști de cel puțin 30 de ani.

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
Testarea ipotezelor în R

Recapitulare: flux de lucru

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
Testarea ipotezelor în R

Motivarea generate()

$H_{0}$: Proporția de hobbyiști sub 30 de ani este egală cu prop. de hobbyiști de cel puțin 30 de ani.

Dacă $H_{0}$ este adevărată, atunci

  • În fiecare rând, valoarea hobbyist ar fi putut apărea cu oricare categorie de vârstă cu probabilitate egală.
  • Pentru a simula acest lucru, putem permuta (amesteca) valorile hobbyist păstrând categoriile de vârstă fixe.
Testarea ipotezelor în 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
Testarea ipotezelor în R

Generarea mai multor replici

Grila dreptunghiulară cu două coloane, rezultatul specificării coloanelor, este afișată în stânga. În dreapta apare cuvântul „generate" cu o săgeată spre dreapta. În dreapta săgeții se află trei grile cu două coloane, reprezentând replici. Coloana dreaptă a fiecărei replici este identică cu cea a setului original, reprezentând faptul că variabila explicativă rămâne neschimbată. Coloana stângă a fiecărei replici diferă, reprezentând permutarea variabilei răspuns.

Testarea ipotezelor în R

generate()

generate() generează date simulate care reflectă ipoteza nulă.

  • Pentru ipoteze nule de „independență", setați type la "permute".
  • Pentru ipoteze nule de „punct", setați type la "bootstrap" sau "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
Testarea ipotezelor în R

Calcularea statisticii de test

Grilele dreptunghiulare reprezentând setul de date original și replicile, văzute la pasul de generare, sunt afișate. Dedesubt apare cuvântul „calculate", iar sub fiecare replică se află o săgeată în jos. Sub fiecare săgeată se află o celulă umbrită reprezentând o statistică de test. Un chenar grupează toate statisticile de test ale replicilor, etichetat „distribuție nulă".

Testarea ipotezelor în R

calculate()

calculate() calculează o distribuție a statisticilor de test, numită distribuție nulă.

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 Pagina de ajutor `?calculate` listează toate statisticile de test posibile.
Testarea ipotezelor în R

Vizualizarea distribuției nule

visualize(null_distn)

O histogramă a distribuției nule. Este asimetrică la stânga și conține nouă valori distincte.

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
Testarea ipotezelor în R

Calcularea statisticii de test pe setul de date original

Grilele dreptunghiulare reprezentând setul de date original și replicile, împreună cu celulele distribuției nule din pasul de calcul, sunt afișate. De data aceasta, există și o săgeată în jos sub setul de date original, iar dedesubt o celulă umbrită cu un chenar etichetat „statistică observată".

Testarea ipotezelor în R

Statistica observată: 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
Testarea ipotezelor în R

Vizualizarea distribuției nule față de statistica observată

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

Histograma distribuției nule, cu o linie verticală roșie suplimentară la statistica observată. Linia verticală se suprapune peste bara din extrema dreaptă a histogramei.

Testarea ipotezelor în R

Obținerea valorii p

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
Testarea ipotezelor în R

Să exersăm!

Testarea ipotezelor în R

Preparing Video For Download...