Tiếp tục quy trình infer

Kiểm định giả thuyết trong R

Richie Cotton

Data Evangelist at DataCamp

Ôn tập: giả thuyết và dữ liệu

$H_{0}$: Tỷ lệ người chơi sở thích dưới 30 bằng tỷ lệ người chơi sở thích từ 30 trở lên.

$H_{A}$: Tỷ lệ người chơi sở thích dưới 30 khác tỷ lệ người chơi sở thích từ 30 trở lên.

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
Kiểm định giả thuyết trong R

Ôn tập: quy trình

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
Kiểm định giả thuyết trong R

Động cơ của generate()

$H_{0}$: Tỷ lệ người chơi sở thích dưới 30 bằng tỷ lệ từ 30 trở lên.

Nếu $H_{0}$ đúng, thì

  • Ở mỗi hàng, giá trị hobbyist có thể đi với bất kỳ nhóm tuổi nào với xác suất bằng nhau.
  • Để mô phỏng, hoán vị (xáo trộn) các giá trị hobbyist và giữ nguyên nhóm tuổi.
Kiểm định giả thuyết trong 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
Kiểm định giả thuyết trong R

Tạo nhiều bản lặp

Lưới chữ nhật hai cột là kết quả của bước chỉ định cột ở bên trái. Bên phải là từ generate với mũi tên sang phải. Bên phải mũi tên là ba lưới hai cột nữa, biểu thị các bản lặp. Cột phải của mỗi bản lặp giống hệt cột phải của dữ liệu gốc, thể hiện biến giải thích không đổi. Cột trái của mỗi bản lặp khác nhau, thể hiện biến phản hồi được hoán vị.

Kiểm định giả thuyết trong R

generate()

generate() tạo dữ liệu mô phỏng theo giả thuyết không.

  • Với giả thuyết không “độc lập”, đặt type"permute".
  • Với giả thuyết không “điểm”, đặt type"bootstrap" hoặc "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
Kiểm định giả thuyết trong R

Tính thống kê kiểm định

Các lưới chữ nhật của dữ liệu gốc và bản lặp (như ở bước generate) được hiển thị. Bên dưới là từ 'calculate', dưới mỗi bản lặp là mũi tên xuống. Dưới mỗi mũi tên là một ô tô màu biểu thị thống kê kiểm định. Một khung bao quanh các thống kê của bản lặp, ghi 'phân phối không'.

Kiểm định giả thuyết trong R

calculate()

calculate() tính phân phối các thống kê kiểm định gọi là phân phối không.

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 Trang trợ giúp ?calculate liệt kê mọi thống kê kiểm định có thể dùng.
Kiểm định giả thuyết trong R

Trực quan hóa phân phối không

visualize(null_distn)

Biểu đồ tần suất của phân phối không. Lệch trái, có chín giá trị rời rạc.

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
Kiểm định giả thuyết trong R

Tính thống kê trên dữ liệu gốc

Các lưới dữ liệu gốc và bản lặp, cùng các ô phân phối không ở bước calculate, được hiển thị. Lần này có thêm mũi tên xuống dưới dữ liệu gốc, bên dưới là một ô tô màu. Ô này có khung ghi 'thống kê quan sát'.

Kiểm định giả thuyết trong R

Thống kê quan sát: 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
Kiểm định giả thuyết trong R

So sánh phân phối không và thống kê quan sát

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

Biểu đồ tần suất của phân phối không, có thêm đường dọc đỏ tại thống kê quan sát. Đường dọc nằm trên cột ngoài cùng bên phải.

Kiểm định giả thuyết trong R

Lấy p-value

get_p_value(
  null_distn, obs_stat, 
  direction = "two sided"   # Không phải 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
Kiểm định giả thuyết trong R

Vamos praticar!

Kiểm định giả thuyết trong R

Preparing Video For Download...