infer hattına devam

R ile Hipotez Testi

Richie Cotton

Data Evangelist at DataCamp

Özet: hipotezler ve veri seti

$H_{0}$: 30 yaş altı hobicilerin oranı, en az 30 yaş hobicilerin oranıyla aynıdır.

$H_{A}$: 30 yaş altı hobicilerin oranı, en az 30 yaş hobicilerin oranından farklıdır.

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
R ile Hipotez Testi

Özet: iş akışı

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
R ile Hipotez Testi

generate() için motivasyon

$H_{0}$: 30 yaş altı hobicilerin oranı, en az 30 yaş hobicilerin oranıyla aynıdır.

Eğer $H_{0}$ doğruysa:

  • Her satırda, hobbyist değeri her iki yaş kategorisiyle de eş olasılıkla eşleşebilirdi.
  • Bunu benzetmek için hobbyist değerlerini karıştırıp (permüte edip) yaş kategorilerini sabit tutabiliriz.
R ile Hipotez Testi
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
R ile Hipotez Testi

Birçok çoğaltım üretme

Sol tarafta, belirlenen sütunların sonucu olan iki sütunlu dikdörtgen ızgara gösterilir. Sağında sağa okla birlikte generate sözcüğü yer alır. Okun sağında üç adet iki sütunlu ızgara, yani çoğaltımlar bulunur. Her çoğaltımın sağ sütunu özgün veri setinin sağ sütunuyla aynıdır; bu, veri setindeki açıklayıcı değişkenin değişmediğini gösterir. Her çoğaltımın sol sütunu farklıdır; bu da yanıt değişkeninin permüte edildiğini gösterir.

R ile Hipotez Testi

generate()

generate() sıfır hipotezini yansıtan benzetim verileri üretir.

  • "Bağımsızlık" sıfır hipotezleri için type = "permute".
  • "Nokta" sıfır hipotezleri için type = "bootstrap" veya "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
R ile Hipotez Testi

Test istatistiğini hesaplama

Üretim adımında gördüğünüz özgün veri seti ve çoğaltımlar gösterilir. Bunların altında 'calculate' sözcüğü ve her çoğaltımın altında aşağı ok yer alır. Her okun altında bir test istatistiğini temsil eden tek bir gölgeli hücre vardır. Çoğaltımların tüm test istatistikleri bir kutu içine alınır ve 'sıfır dağılımı' olarak etiketlenir.

R ile Hipotez Testi

calculate()

calculate() test istatistiklerinin dağılımını, yani sıfır dağılımını hesaplar.

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 ?calculate yardım sayfası tüm olası test istatistiklerini listeler.
R ile Hipotez Testi

Sıfır dağılımını görselleştirme

visualize(null_distn)

Sıfır dağılımının histogramı. Sola çarpık ve dokuz ayrı değer var.

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
R ile Hipotez Testi

Test istatistiğini özgün veri setinde hesaplama

Hesapla adımında gördüğünüz özgün veri seti ve çoğaltımlar ile sıfır dağılımındaki hücreler gösterilir. Bu kez özgün veri setinin altında da bir aşağı ok ve altında gölgeli bir hücre vardır. Bu hücre, 'gözlenen istatistik' etiketiyle kutu içine alınmıştır.

R ile Hipotez Testi

Gözlenen istatistik: 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
R ile Hipotez Testi

Sıfır dağılımı vs gözlenen istatistik

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

Sıfır dağılımının histogramı ve gözlenen istatistikte kırmızı düşey çizgi. Çizgi histogramın en sağdaki çubuğunun üzerindedir.

R ile Hipotez Testi

p-değerini alın

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
R ile Hipotez Testi

Passons à la pratique !

R ile Hipotez Testi

Preparing Video For Download...