Lompat ke konten Lompat ke sidebar Lompat ke footer

Menghitung Chi Square Test Menggunakan Python

Menghitung korelasi antar variable adalah salah satu fundamental dalam Data Science. Ibaratnya, bagaimana kita ingin menghitung nilai A dari variabel B yang ternyata sama sekali tidak berhubungan dengan variabel A?. Akan sangat penting untuk mengetahui korelasi variabel sebelum melakukan berbagai proses, seperti Machine learning.

Salah satu test korelasi yang sering digunakan adalah Chi Square Test. Test tersebut digunakan untuk menghitung korelasi antara 2 varibel kategori. Misalkan variabel pertama adalah hari yang berisi senin, selasa, hingga minggu. Sedangkan variabel kedua adalah Suhu yang berisi Panas, Sedang, Dingin.

Tidak seperti penghitungan korelasi variabel numerik, Chi Square Test tidak dapat langsung dihitung menggunakan modul tertentu. Seperti pearson correlation yang langsung dapat dihitung menggunakan numpy.corr().

Untuk itu, akan dibahas prinsip penghitungan korelasi menggunakan Chi Square dan kemudian diaplikasikan penghitungan tersebut menggunakan python.

 

Script lengkap dan data yang digunakan dapat dilihat di:

https://github.com/WahyuNoorIchwan/DataScience/tree/main/Chi%20Square%20Test

 

Prinsip Menghitung Chi Square Test

Berikut ini adalah langkah-langkah untuk menghitung korelasi menggunakan Chi Square.

  1. Membuat matrix cross tab. Matrix tersebut berisi frekuensi kemunculan dari pasangan kategori data. Misalkan siang - panas muncul 10 kali, malam - sedang muncul 6 kali.
  2. Kira-kira seperti ini tampilan dari pandas cross tab
    pandas_cross_tab
  3. Total pada bagian baris dan kolom menunjukkan total data pada bagian tersebut. Misal total pada baris pertama kolom terakhir, menunjukkan bahwa terdapat 40 data "15-19". Kolom kedua baris terakhir menunjukkan "Divorced" berjumlah 10 data.
  4. Cell pada crosstab menunjukkan jumlah kategori data yang muncul. Misalkan baris ke-5 kolom ke-2 menunjukkan terdapat 10 data usia "31-40" yang "Divorced".
  5. Nilai-nilai pada cross tab di atas akan digunakan untuk menghitung nilai chi square menggunakan persamaa:

    $ chi = \sum_\ \frac{(O-E)^2}{E}\ $ dimana $ E = \frac{R_i.C_j}{Total}\ $

  6. O adalah frekuensi kemunculan dari pasangan kategori ke-i dan ke-j dair masing-masing variabel. Contohnya "31-40" dan "Divorced" berjumlah 10 data.
  7. R_i adalalah total kemunculan kategori pada baris ke-i cross tab."31-40" terdapat total 10 data.
  8. C_j adalah total kemunculan kategori pada kolom ke-j. Contoh "Divorced" memiliki total data 10.
  9. Persamaan di atas menghasilkan nilai Chi Square. Nilai tersebut digunakan untuk menghitung p-value menggunakan modul stats dari scipy
    • p-value = stats.chi2.cdf(chi2_value, n_col.n_row)
  10. Dimana chi2_value adalah nilai yang dihitung menggunakan persamaan chi, n_col.n_row adalah total pasangan kategori data yang diuji, jumlah row dan kolom pada cross tab.

 

Menghitung p-value dan Chi Square Menggunakan Python

Agar lebih jelas, akan dibahas secara sekilas script python untuk melakukan test korelasi variabel menggunakan chi square test.

1   import pandas as pd
2   from scipy import stats
3  
4   
5   df = pd.read_csv("dummy_data.csv")
6   
7   # Separate Categories
8   cat_1 = df["Age"]
9   cat_2 = df["Status"]
10  
11  # Cross Tabulation of Categories Pair
12  ctab = pd.crosstab(cat_1, cat_2, margins=True, margins_name="Total")
13  
14  # Calculate Chi Square
15  row, col = ctab.shape
16  chi = 0
17  
18  for i in range(row-1):
19      for j in range(col-1):
20          E = ctab.iloc[i, -1]*ctab.iloc[-1, j]/ctab.iloc[-1, -1]
21          chi += (ctab.iloc[i, j] - E)**2 / E
22  
23  # Calculate p-value from  Chi Square Value
24  p = 1 - stats.chi2.cdf(chi, (row-1)*(col-1))
25  
26  treshold = 0.05
27  if p < 0.05:
28      print("{} and {} are related".format("Age", "Status"))
29  else::
30      print("{} and {} are not related")
  1. Pertama import modul yang digunakan, pandas dan stats dari scipy. 
  2. Baca data yang akan ditest. Data yang digunakan sebagai contoh adalah data dummy yang berisi 2 kolom, "Age" dan "Status". Akan diuji apakah rentang usia berhubungan dengan status pernikahan.
  3. Pisahkan kolom yang dites menjadi cat_1 dan cat_2.
  4. Buat correlation tab menggunakan pd.crosstab(). Margins=True digunakan untuk menampilkan total dari kolom, baris, dan total keseluruhan data.
  5. Nilai total akan digunakan untuk menghitung nilai chi square seperti di persamaannya.
  6. Ambil jumal row, dan col dari cross tab. Nilai ini akan digunakan untuk menghitung chi swuare
  7. Inisiasi variabel chi=0. Karena menghitung chi square merupakan proses sumasi, maka diperlukan nilai awal.
  8. Kalkulasi chi square dilakukan terhadap seluruh cell dari cross tab kecuali total, sehingga dilakukan loop bertingkat terhadap row, dan col.
  9. row-1 dan col-1 diguanakan agar loop tidak sampai ke margin / kolom dan baris total.
  10. Pertama hitung E untuk tiap cell, kemudian hitung nilai chi square tiap cell dan tambahkan ke chi.
  11. Selanjutnya adalah menghitung p-value dari chi squre yang sudah dihitung. p-value dihitung pada baris ke-24.
  12. p-value inilah yang digunakan untuk mengecek korelasi antara varibel. Jika nilai p-value < 0.05, maka 2 variabel yang dites berkorelasi dan sebaliknya.

Posting Komentar untuk "Menghitung Chi Square Test Menggunakan Python"