Cách tính p của bài toán kiểm định 2 bên

Người đọc bài viết này nên có những kiến thức cơ bản về phân bố chuẩn, cách tính trung bình, độ lệch chuẩn, và lập trình Python

Kiểm định giả thuyết thống kê [Hypothesis Testing]

Bài toán

Một nhà thần kinh học muốn kiểm tra ảnh hưởng của một loại thuốc đến phản xạ của động vật. Trong thí nghiệm tiêm thuốc vào chuột, kích thích thần kinh, sau đó kiểm tra thời gian phản xạ của chuột. Nhà thần kinh học tiêm thuốc vào 100 con chuột. Với thí nghiệm trướ,c ông biết rằng: Nếu không tiêm thuốc, thời gian trung bình của thời gian phản xạ của chuột là 1.2 giây. Với thí nghiệm mới, thời gian phản xạ trung bình của chuột được tiêm thuốc là 1.05 giây, và độ lệch chuẩn là 0.5 giây. Nhà thần kinh học quyết định rằng : Thuốc có tác dụng nếu thời gian phản xạ của chuột thấp hơn so với bình thường. Giả sử phản xạ của chuột không thay đổi khi tiêm hoặc không thuốc. Nếu khả năng thời gian phản xạ trung bình của chuột tiêm thuốc thấp hơn 5%, ông sẽ kết luận là thuốc có tác dụng. Hỏi thuốc có tác dụng hay không?

Tạo giả thuyết

Để giải bài toán kiểm định giả thuyết thống kê, đầu tiên ta phải định nghĩa 2 giả thuyết:

  • "Giả thuyết không" [null hypothesis] là giả thuyết nói rằng số liệu thống kê giống với suy đoán trước, không có gì mới.
  • "Giả thuyết nghịch" [alternative hypothesis] được viết dựa theo giả thuyết là số liệu thống kê đã thay đổi. Nếu giả thuyết này được chấp nhận thì đó là thông tin mới.

Ví dụ ở bài toán này giả thuyết sẽ được định nghĩa như sau:

  • Giả thuyết không: Đây là điều nhà thần kinh đã biết. Nhà thần kinh biết thời gian phản xạ trung bình của chuột là 1.2 giây. Giả thuyết không là kể cả nếu tiêm thuốc thì phản xạ của chuột cũng không có gì thay đổi.Nói một cách khác:

H0:thời gian phản xạ trung bình chuột tiêm thuốc = 1.2 giây.

  • Giả thuyết nghịch: Nếu giả thuyết này được chấp nhận thì đây là điều mới đối với nhà thần kinh họ. Nếu tiêm thuốc thì thời gian phản xạ nhỏ hơn so với bình thường.

Ha:thời gian phản xạ trung bình chuột tiêm thuốc < 1.2 giây.

Dựa vào các tính toán sau đây về nghiên cứu và mức ý nghĩa thống kê, ta sẽ đưa ra 1 trong 2 kết luận về giả thuyết:

  1. Bác bỏ giả thuyết không và chấp nhận giả thuyết nghịch
  2. Chúng ta thất bại trong việc bác bỏ giả thuyết không.

Tính z-score [hoặc t-score]

Một trong số những số liệu toán thống kê ta phải tính là z-score [hoặc t-score]. Các bạn có thể tự tìm hiểu thêm về số liệu này. Z-score là số liệu thống kê cho biết: giá trị ta muốn tìm hiểu cách trung bình của phân bố chuẩn bằng bao nhiêu độ lệch chuẩn. Ví dụ z-score = 1 có nghĩa là giá trị bây giờ hơn trung bình 1 độ lệch chuẩn.

Công thức được viết như ở dưới đây:

z-score càng lớn thì giá trị mẫu của ta càng xa trung bình. Điều đấy cũng có nghĩa là với phân bố từ giả thuyết không, xác xuất ta có một mẫu có giá trị trung bình cách xa giá trị trung bình từ giả thuyết không rất thấp. Một giả thuyết khác xảy ra, hợp lý hơn giả thuyết không.

Với bài toán trên ta muốn tìm khả năng ta lấy một mẫu chuật có phản xạ = 3000

  • Giả thuyết nghịch: trung bình khối lượng sữa < 2929.5
  • Trước khi tính toán ta sẽ lựa chọn mức ý nghĩa thống kê. Nếu khối lượng sữa mẫu ít hơn so với khối lượng chuẩn [3000g], hoàn toàn do ngẫu nhiên, có xác xuất nhỏ hơn 3%, ta có thể bác bỏ giả thuyết là trung bình khối lượng sữa >= 3000g. Nên ta có thể chọn mức ý nghĩa thống kê là 3%

    Trong code bài toán sẽ được trình bày như sau:

        sample_size = 10 
        null_hypothesis_mean = 3000 
        sig_level = 0.05
        sample_mean = 2929.5
        sample_stddev = 67.409610261116
    

    Tính t-score

    t-score có cách tính giống y hệt như z-score. Điểm khác nhau t-score sẽ giả sử là phân bố là t-distribution, còn z-score giả sử là phân bố chuẩn tắc.

    Vì t-score có cách tính giống z-score, t-score sẽ bằng z-score, nhưng p-value từ t-score sẽ khác với p-value từ z-score.

    Chúng ta dùng t-score nếu, thỏa mãn 1 trong 2 điều kiện

    • Số dữ liệu mẫu ít hơn 30
    • Chúng ta không biết độ lệch chuẩn của tập hợp.

    Tính t-score ta sẽ công thức tính như sau [giống hệt với công thức tính z-score, nhưng phân bố khác nhau]:

    Trong bài toán trên về kiểm định giả thuyết thống kê về tỷ lệ, ta có số dữ liệu mẫu [240] lớn hơn 30 và có cách tính được độ lệch chuẩn của tập hợp. Với bài toán này số dữ liệu mẫu ít hơn 30 và ta không biết cả độ lệch chuẩn của tập hợp, nên ta dùng t-score.

    Trong code:

        import math
        estimated_pop_stddev = sample_stddev/math.sqrt[sample_size]
        t_score = [sample_mean - null_hypothesis_mean]/estimated_pop_stddev
        t_score # -3.3072520991931906
    

    t-score ước lượng là -3.307.

    Tính p-value

    Chúng ta có thể tính p-value từ cdf giống như bài toàn trên trên. Lưu ý là bài toán này là một đuôi. Đồng thời t-score là số âm, nên ta có thể trực tiếp tính luôn cdf để đưa ra khả năng ngẩu nhiên trung bình khối lượng sữa nhỏ hơn 2929.5, giả sử giả thuyết không là đúng.

    Một điểm cần lưu ý là bây giờ ta dùng

    sample_p = sample_true_size/sample_size   # Tỷ lệ trong mẫu
    sample_p # 0.1
    

    8, thay bằng

    sample_p = sample_true_size/sample_size   # Tỷ lệ trong mẫu
    sample_p # 0.1
    

    9

    Vậy theo code ta có:

        p_one_way_value = stats.t.cdf[t_score] 
        p_one_way_value  # 0.004561894650979413
    

    p-value có số giá trị là 0.0046.

    Note: Nếu bạn trực tiếp có dữ liệu mẫu, thì các bạn có thể dùng dữ liệu mẫu trức tiếp để tính t-score và p-value. Điểm cần lưu ý là trong scipy API, p-value được tính theo hai đuôi, nên ta chia số đó cho 2 để lấy p-value một đuôi:

    sample_p = sample_true_size/sample_size   # Tỷ lệ trong mẫu
    sample_p # 0.1
    

    0

    Kết quả sẽ ra tương tự như ở trên.

    Đưa ra kết luận

    Bây giờ ta so sánh p-value 0.0046 với mức ý nghĩa là 0.03. Ta thấy p-value nhỏ hơn với mức ý nghĩa. Ta có thể bác bỏ giả thuyết không là khối lượng sữa trung bình >= 3000g, và chấp nhận giả thuyết nghịch là khối lượng sữa trung bình < 3000g. Vậy thanh tra có đủ bằng trứng để kết luận rằng sữa trong hộp ít hơn so với trên bao bì.

    Chủ Đề