Uji Asumsi Normalitas Data dengan Python |
Jumpa kembali dalam blog sederhana ini. Sebelumnya mohon maaf karena konten dari blog ini sedikit tersendat-sendat karena demikian padatnya pekerjaan. Baik, kali ini kita akan lanjutkan belajar bersama kita mengenai penerapan bahasa pemrograman Python dalam dunia Data Science, Data Mining, atau yang lebih mendasar, yakni Statistika.
Pada konten ini, kita akan mencoba mempraktikkan bagaimana melakukan uji asumsi normalitas suatu data. Adapun jenis uji asumsi normalitas yang kita pakai ada 4 jenis, yaitu uji Kolmogorov-Smirnov, uji Shapiro Wilks, uji Jarque-Bera, dan uji Anderson Darling.
Uji normalitas suatu data atau residual sebuah model adalah hal yang lumrah dilakukan, bahkan dalam beberapa konteks wajib diterapkan. Uji normalitas suatu data bertujuan untuk melihat apakah sebaran dari data mengikuti distribusi teoritis normal dengan rata-rata 0 dan varians sebesar sigma atau tidak. Data yang sebarannya tidak mengikuti distribusi teoritis normal selain menunjukkan keberadaan pencilan (outlier) juga secara langsung memperlihatkan bahwa data tersebut sangat berfluktuatif atau bahkan bervolatil sehingga polanya tidak dapat kita tangkap dengan mudah. Sedangkan uji normalitas dalam pemodelan (data mining) bertujuan untuk melihat seberapa stabil suatu model mampu memprediksi nilai aktual atau amatannya, baik pada satu titik waktu maupun untuk periode berikutnya.
Kendati demikian, tidak semua data yang tak mengikuti distribusi teoritis normal merupakan data yang buruk. Sebab, data yang terlalu menyebar, memiliki kemencengan curam, atau bahkan keruncingan yang tinggi sekalipun mengandung informasi yang lebih banyak. Pencilan dari suatu data dapat kita gunakan sebagai tambahan informasi, temuan, atau bahkan untuk penajaman rekomendasi kebijakan.
Pada praktiknya, sebagian dari kita mungkin telah banyak mengetahui dan memahami jenis-jenis uji asumsi normalitas data. Namun, sebagian mungkin hanya mengetahui atau bahkan lebih cenderung menyukai salah satu uji asumsi normalitas saja dari sekian banyak jenis uji normalitas data yang ada.
Jenis uji asumsi normalitas data atau residual model yang banyak digunakan adalah uji normalitas Kolmogorov-Smirnov atau uji KS. Dengan menggunakan notasi pengujian statistik D, uji ini mampu digunakan untuk membandingkan kedekatan antara distribusi atau sebaran data dengan distribusi teoritis normal. Kelebihan dari uji KS ini adalah dapat digunakan untuk pengujian normalitas data yang berukuran kecil maupun besar. Kendati di sebagian literatur mengatakan bahwa uji ini lebih cocok untuk analisis non-parametrik, sedangkan untuk analisis parametrik lebih disarankan menggunakan uji KS modifikasi Liliefors, di beberapa literatur lainnya justru uji KS dapat digunakan baik untuk analisis non-parametrik maupun analisis parametrik.
Jenis uji normalitas berikutnya adalah uji normalitas Shapiro-Wilks. Mirip dengan uji KS, perbedaan uji Shaprio-Wilks ini terletak pada ukuran datanya. Uji ini lebih cocok digunakan ketika data kita sedikit atau kecil, meski demikian, hasil uji ini terlihat konsisten untuk data yang besar.
Uji normalitas selanjutnya adalah uji normalitas Jarque-Bera atau lebih dikenal dengan uji JB. Berbeda dengan uji KS dan Shapiro-Wilks, kelebihan uji ini selain dapat digunakan untuk data kecil maupun besar, pendekatan dalam membandingkan data dengan distribusi teoritis sangat tampak. Uji JB menggunakan ukuran kemencengan dan keruncingan dari data yang diuji kemudian dibandingkan dengan kemencengan dan keruncingan dari sebaran distribusi normal teoritis.
Terakhir adalah uji normalitas Anderson Darling atau biasa dikenal dengan uji AD. Uji normalitas terakhir ini sering disebut relatif lebih baik daripada hasil pengujian normalitas dengan KS. Namun demikian, untuk data yang berukuran besar, lebih dari 100, hasil dari uji ini relatif konsisten dengan uji lainnya.
Demikian sedikit pengantar mengenai uji asumsi normalitas. Berikutnya kita akan mempraktikkan bagaimana melakukan pengujian asumsi normalitas data menggunakan Python. Data yang kita gunakan kali ini adalah data Indeks Nilai Tukar Pertani (NTP) yang bersumber dari BPS Provinsi Jawa Timur (jatim.bps.go.id) periode bulanan sejak 2013 sampai Mei 2023 (dapat diunduh pada tautan berikut). Setelah datanya telah diunduh, berikut tahapan untuk melakukan pengujian normalitas data dengan Python:
# Aktivasi package
from scipy import stats
import pandas as pd
# Import dataset untuk diuji normalitas
data = pd.read_excel("C:\\Users\\Joko Ade\\Documents\\ntp.xlsx")
data
bulan | ntp | |
---|---|---|
0 | 2013-01-01 | 103.35 |
1 | 2013-02-01 | 102.51 |
2 | 2013-03-01 | 101.51 |
3 | 2013-04-01 | 101.91 |
4 | 2013-05-01 | 102.58 |
... | ... | ... |
120 | 2023-01-01 | 106.41 |
121 | 2023-02-01 | 106.37 |
122 | 2023-03-01 | 106.82 |
123 | 2023-04-01 | 106.66 |
124 | 2023-05-01 | 107.39 |
125 rows × 2 columns
# Uji normalitas Kolmogorov-Smirnov
kstest_result = stats.kstest(data.ntp, 'norm')
# Output hasil uji
print("Statistik Uji:", kstest_result.statistic)
print("P-value:", kstest_result.pvalue)
Statistik Uji: 1.0 P-value: 0.0
# Uji normalitas Shapiro-Wilk
shapiro_result = stats.shapiro(data.ntp)
# Output hasil uji
print("Statistik Uji:", shapiro_result.statistic)
print("P-value:", shapiro_result.pvalue)
Statistik Uji: 0.9867525100708008 P-value: 0.2667540907859802
# Uji normalitas Jarque-Bera
jarque_bera_result = stats.jarque_bera(data.ntp)
# Output hasil uji
print("Statistik Uji:", jarque_bera_result.statistic)
print("P-value:", jarque_bera_result.pvalue)
Statistik Uji: 2.257436598959202 P-value: 0.3234475537609569
# Uji normalitas Anderson-Darling
anderson_result = stats.anderson(data.ntp, dist='norm')
# Output hasil uji
print("Statistik Uji:", anderson_result.statistic)
print("Tingkat Signifikansi:", anderson_result.significance_level)
print("Tabel Kritis:", anderson_result.critical_values[2])
Statistik Uji: 0.29407650269369867 Tingkat Signifikansi: [15. 10. 5. 2.5 1. ] Tabel Kritis: 0.764
Berdasarkan nilai p-value semua uji normalitas di atas ternyata > alpha (misal 0,05) sehingga disimpulkan bahwa data tersebut telah mengikuti distribusi normal atau dikatakan data telah memenuhi asumsi kenormalan (terima Ho).
Demikian sedikit sharing kali ini, semoga bermanfaat dan jangan lupa untuk terus mengikuti dan menyimak serta menyebarkan infromasi dan ilmu dari blog sederhana ini. Selamat memahami dan mempraktikkan!