Hướng dẫn welch test python - chào mừng con trăn thử nghiệm

Nó là gì?

Thử nghiệm t Welch từ là một thử nghiệm đơn biến không tham số, các thử nghiệm cho sự khác biệt đáng kể giữa giá trị trung bình của hai nhóm không liên quan. Đó là một giải pháp thay thế cho bài kiểm tra t độc lập khi có một vi phạm trong giả định về sự bình đẳng của phương sai.

Giả thuyết đang được kiểm tra là:

  • Giả thuyết Null (H0): U1 = U2, dịch thành giá trị trung bình của mẫu 1 bằng với giá trị trung bình của mẫu 2: u1 = u2, which translates to the mean of sample 1 is equal to the mean of sample 2
  • Giả thuyết thay thế (HA): U1 ≠ U2, dịch thành giá trị trung bình của mẫu 1 không bằng giá trị trung bình của mẫu 2: u1 ≠ u2, which translates to the mean of sample 1 is not equal to the mean of sample 2

Nếu giá trị p nhỏ hơn những gì được thử nghiệm, phổ biến nhất là 0,05, người ta có thể từ chối giả thuyết null.

Các giả định kiểm tra t của Welch

Giống như mọi bài kiểm tra, bài kiểm tra thống kê suy luận này có các giả định. Các giả định rằng dữ liệu phải đáp ứng để kết quả kiểm tra có hiệu lực là:

  • Biến độc lập (IV) là phân loại với ít nhất hai cấp độ (nhóm)
  • Biến phụ thuộc (DV) liên tục được đo theo thang điểm hoặc tỷ lệ
  • Sự phân phối của hai nhóm nên tuân theo phân phối bình thường

Nếu bất kỳ giả định nào trong số này bị vi phạm thì nên sử dụng thử nghiệm khác.

Dữ liệu được sử dụng trong ví dụ này

Dữ liệu được sử dụng trong ví dụ này là từ kaggle.com và được đăng bởi Web IR. Liên kết đến bộ dữ liệu ở đây. Bộ dữ liệu chứa chiều dài và chiều rộng của cánh hoa và chiều rộng của các loài hoa khác nhau. Chúng tôi sẽ thử nghiệm để xem liệu có sự khác biệt đáng kể về chiều dài cánh hoa giữa loài iris-setosa và iris-virginica tương ứng là các biến số petal_length và các loài khác.

Hãy để nhập khẩu gấu trúc dưới dạng PD, dữ liệu, và sau đó xem xét những gì chúng ta sẽ làm việc cùng!

import pandas as pd

df= pd.read_csv("Iris_Data.csv")

df.groupby("species")['petal_length'].describe()
loàiđếmbần tiệnSTDTối thiểu25%50%75%Tối đa
Iris-setosa50.0 1.464 0.173511 1.0 1.4 1.50 1.575 1.9
IRIS-VDECOLOR50.0 4.260 0.469911 3.0 4.0 4.35 4.600 5.1
Iris-virginica50.0 5.552 0.551895 4.5 5.1 5.55 5.875 6.9

Để làm cho mã trong các bước tiếp theo một chút sạch hơn để đọc, tôi sẽ tạo 2 khung dữ liệu là tập hợp dữ liệu gốc trong đó mỗi khung dữ liệu chỉ chứa dữ liệu cho một loài hoa tương ứng.

setosa = df[(df['species'] == 'Iris-setosa')]
virginica = df[(df['species'] == 'Iris-virginica')]

Ví dụ về bài kiểm tra Welch Welch

Điều đầu tiên chúng ta cần làm là nhập scipy.stats dưới dạng số liệu thống kê và sau đó kiểm tra các giả định của chúng tôi. Chúng ta có thể kiểm tra giả định về tính quy tắc bằng cách sử dụng stat.shapiro (). Thật không may, đầu ra không được dán nhãn. Giá trị đầu tiên trong tuple là thống kê kiểm tra W và giá trị thứ hai là giá trị p.

from scipy import stats

stats.shapiro(setosa['petal_length'])

(0,9549458622932434, 0,05464918911457062)

stats.shapiro(virginica['petal_length'])

(0.9621862769126892, 0.10977369546890259)

Cả hai biến quan tâm đều không vi phạm giả định về tính quy tắc để chúng tôi có thể tiếp tục với kế hoạch phân tích của mình. Để thực hiện một thử nghiệm t Welch, người ta cần sử dụng phương thức StatS.TTest_ind () trong khi chuyển qua các trò chơi sai trong đối số của Equil_var =.

stats.ttest_ind(setosa['petal_length'], virginica['petal_length'], equal_var = False)

Ttest_indresult (thống kê = -49.965703359355636, pvalue = 9.7138670616970964E-50)

Giá trị p là có ý nghĩa, do đó người ta có thể bác bỏ giả thuyết null để hỗ trợ cho sự thay thế.

Một thông tin khác bạn sẽ cần báo cáo là mức độ tự do (DOF). Tuy nhiên, hiện tại không có một phương pháp tích hợp cho điều này. Dưới đây là 2 chức năng sẽ cung cấp cho bạn những gì bạn cần. Đầu tiên, chỉ tính toán DOF như một bài kiểm tra hai đuôi và trả về nó. Lần thứ hai, tiến hành thử nghiệm Welch, tính toán DOF như một bài kiểm tra hai đuôi và trả về tất cả các thông tin cần thiết.

def welch_dof(x,y):
        dof = (x.var()/x.size + y.var()/y.size)**2 / ((x.var()/x.size)**2 / (x.size-1) + (y.var()/y.size)**2 / (y.size-1))
        print(f"Welch-Satterthwaite Degrees of Freedom= {dof:.4f}")
        
welch_dof(setosa['petal_length'], virginica['petal_length'])

Welch-Satterthwaite độ tự do = 58.5928

def welch_ttest(x, y): 
    ## Welch-Satterthwaite Degrees of Freedom ##
    dof = (x.var()/x.size + y.var()/y.size)**2 / ((x.var()/x.size)**2 / (x.size-1) + (y.var()/y.size)**2 / (y.size-1))
   
    t, p = stats.ttest_ind(x, y, equal_var = False)
    
    print("\n",
          f"Welch's t-test= {t:.4f}", "\n",
          f"p-value = {p:.4f}", "\n",
          f"Welch-Satterthwaite Degrees of Freedom= {dof:.4f}")

welch_ttest(setosa['petal_length'], virginica['petal_length'])

Welch từ t-test = -49.9657 p-value = 0,0000 welch-satterthwaite độ tự do = 58.5928
p-value = 0.0000
Welch-Satterthwaite Degrees of Freedom= 58.5928

Giải thích bài kiểm tra T Welch Welch

Nghiên cứu hiện tại nhằm mục đích kiểm tra xem có sự khác biệt đáng kể về chiều dài cánh hoa giữa các loài hoa setosa và Virginica hay không. Setosa có chiều dài cánh hoa ngắn hơn (M = 1.464 đơn vị, SD = 0,174 đơn vị) so với Virginica (M = 5.552 đơn vị, SD = 0,552 đơn vị). Thử nghiệm T Welch đã được chọn để phân tích dữ liệu vì thử nghiệm Levene, về tính đồng nhất của các phương sai cho thấy phương sai không đồng đều giữa các nhóm (F = 39,977, p <0,0001). Sự khác biệt về chiều dài cánh hoa giữa hai loài là khác nhau đáng kể (Welch's t (-49,966) = 58,593, p <0,0001).