Anova atau Analysis of Variance adalah salah satu metode statistika yang cukup sering digunakan dalam desain eksperimen atau rancangan percobaan. Metode ini dapat digunakan untuk mengetahui ada tidaknya pengaruh perlakuan terhadap variabel yang diamati. Untuk mengetahui penjelasan lengkapnya, Exsight sudah pernah membahas terkait teori ANOVA serta langkah analisisnya di artikel berikut.
PENJELASAN MENGENAI ANOVA (ANALISIS OF VARIANCE)
Exsight juga sudah pernah melakukan uji ANOVA menggunakan R Studio secara lengkap, mulai dari cara import data hingga post-hoc tes menggunakan uji Tukey, LSD dan Duncan.
ONE WAY ANOVA ATAU ANOVA 1 ARAH DI RSTUDIO
Selain menggunakan bahasa R di RStudio, uji anova juga dapat dilakukan dengan tool yang lain, salah satunya adalah bahasa Python. Kamu dapat menjalankan script python melalui Jupyter Notebook, Google Colab atau interface lainnya sesuai dengan preferensimu. Dan yang paling penting, Python dan semua interfacenya juga merupakan software open source sehingga kamu tidak perlu khawatir lagi terkait lisensi atau isu pembajakan aplikasi lainnya.
Berikut akan diberikan tutorial lengkap terkait penerapan uji ANOVA di Python, mulai dari import data hingga uji lanjut Tukey. Adapun data yang akan digunakan sama dengan data yang dianalisis menggunakan RStudio.
Studi Kasus
Seorang petani ingin mengetahui apakah ada pengaruh jenis pupuk terhadap tinggi tanaman cabenya (dalam cm). Petani tersebut menggunakan 5 jenis pupuk yang berbeda (A, B, C, D dan E) dan melakukan pengamatan selama 2 minggu terhadap 20 tanaman cabe. Adapun 1 jenis pupuk akan dicobakan pada 4 tanaman cabe yang berbeda. Berikut tampilan data untuk analisis.
Jenis Pupuk | ||||
A | B | C | D | E |
14.9 | 16.1 | 18 | 20.2 | 9.5 |
15.9 | 17.6 | 17.9 | 20.5 | 7.3 |
14.7 | 16.9 | 17.9 | 20.5 | 8.6 |
14.8 | 16.9 | 17.6 | 21.4 | 9.1 |
Dari dataset di atas, One Way ANOVA merupakan metode yang tepat untuk menjawab pertanyaan petani tersebut. Hal ini dikarenakan ada 5 kelompok tanaman yang akan dibandingkan untuk melihat ada tidaknya perbedaan tinggi tanaman antar kelompok. Jika diperoleh hasil bahwa terdapat perbedaan tinggi tanaman antar kelompok, maka dapat disimpulkan terdapat pengaruh jenis pupuk terhadap tinggi tanaman. Dan sebaliknya, jika diperoleh hasil tidak terdapat perbedaan tinggi tanaman antar kelompok, maka dapat disimpulkan tidak terdapat pengaruh jenis pupuk terhadap tinggi tanaman.
Import Data
Sebelum dilakukan import data ke Jupyter Notebook, kamu harus mempersiapkan datanya terlebih dahulu. Tabel hasil pengamatan di atas harus dikonversi menjadi 2 kolom saja, yaitu kolom tinggi_tanaman dan jenis_pupuk. Kolom tinggi_tanaman berisi nilai pengukurannya dalam cm dan kolom jenis_pupuk yang berisi kode pupuk yang dicobakan ke tanaman tersebut.
Secara umum, jika ingin melakukan uji One Way ANOVA di Python atau R, dataset harus dibuat menjadi 2 kolom yang berisi variabel independen dan variabel dependennya. Di mana dalam kasus ini yang merupakan variabel independen adalah jenis pupuk dan variabel dependennya adalah tinggi tanaman.
Berikut tampilan dataset di excel.
Setelah dibuat tabel seperti di atas, maka simpan file tersebut dalam file berekstensi .xlsx Kamu juga bisa menyimpannya dalam file csv. Namun perlu diingat, jika file disimpan dalam bentuk csv, maka kamu harus mengimportnya menggunakan code pd.read_csv
Karena data sudah siap, maka buka Jupyter Notebook dan ketikkan sintaks berikut untuk mengimport file excel tersebut. Jangan lupa import library pandas terlebih dahulu.
import pandas as pd data=pd.read_excel("Documents/One Way Anova Exsight.xlsx") data.head()
Berikut tampilan data yang telah diimport.
Untuk lokasi file dapat kamu sesuaikan dengan lokasi file kamu berada. Karena data excel saya simpan pada folder “Document”, maka code yang digunakan adalah seperti di atas.
Uji Asumsi ANOVA di Python
Setelah file berhasil diimport, jangan lupa untuk melakukan uji asumsi terlebih dahulu sebelum melakukan uji Anova. Perlu diingat bahwa pengujian asumsi dilakukan terhadap residual data, bukan terhadap data pengamatan. Menurut Widasari (1988) dalam bukunya yang berjudul Materi Pokok Rancangan Percobaan, asumsi-asumsi yang mendasari ANOVA yang perlu diperhatikan agar pengujian menjadi sahih adalah residual percobaan menyebar normal (asumsi normalitas residual) serta residual percobaan mempunyai residual yang homogen (asumsi homogenitas residual).
Untuk menghitung nilai residual, terlebih dahulu dilakukan pemodelan ANOVA di python menggunakan sintaks berikut
import statsmodels.api as sm
from statsmodels.formula.api import olsmodel_pupuk = ols('tinggi_tanaman ~ C(jenis_pupuk)', data=data).fit()
Pemodelan anova di python akan dilakukan menggunakan function ols yang terdapat pada library statsmodels.api dimana maksud dari tinggi_tanaman ~ C(jenis_pupuk) adalah untuk menguji hipotesis apakah tinggi_tanaman dipengaruhi oleh jenis pupuk atau tidak.
Untuk mendefinisika variabel residual, gunakan sintaks berikut.
residual=model_pupuk.resid
Pada bagian setelah “=”, sesuaikan dengan nama model yang akan diuji dan diikuti code “.resid”. Karena sebelumnya model anova telah saya definisikan dengan nama model_pupuk, maka tuliskan model_pupuk.resid
Karena kita telah mendapatkan nilai residual yang disimpan dalam variabel residual, maka uji asumsi dapat segera kita lakukan.
Asumsi Normalitas
Uji asumsi normalitas dapat dilakukan dengan banyak metode, satu di antaranya adalah Shapiro Wilk. Python juga telah menyediakan function untuk melakukan uji normalitas menggunakan Shapiro Wilk yang terdapat pada library scipy.stats
import scipy.stats as stats
stats.shapiro(residual)
Berikut hasil pengujian asumsi normalitas.
Dari output di atas, nilai 0.94 merupakan nilai statistik uji Wilk dan 0.25 merupakan nilai p-valuenya. Kita dapat menyimpulkan bahwa pada taraf signifikansi 5%, residual berdistribusi normal. Hal ini dikarenakan residual memiliki p-value sebesar 0.2572 > 0.05.
Pengujian asumsi normalitas juga dapat dilakukan secara visual menggunakan probability plot residual. Berikut sintaksnya.
import matplotlib.pyplot as plt
fig = plt.figure(figsize= (5, 5))
ax = fig.add_subplot(111)
normality_plot, stat = stats.probplot(residual, plot= plt, rvalue= True)
ax.set_title("Probability plot of model residual's", fontsize= 10)
ax.set
plt.show()
Secara visual, juga terlihat jelas bahwa residual berdistribusi normal karena titik-titik data residual mengikuti pola garis linier.
Karena uji asumsi normalitas terpenuhi, maka kita dapat melanjutkan ke uji asumsi homogenitas.
Tapi, jika pada tahap ini asumsi normalitas nya tidak terpenuhi, kamu harus melakukan transformasi data terlebih dahulu atau melakukan uji perbandingan menggunakan metode lain, seperti Kruskal Wallis yang merupakan uji perbandingan non parametrik.
Asumsi Homogenitas
Untuk uji homogenitas residual, akan dilakukan menggunakan Levene Test. Pada python, pengujian dapa dilakukan dengan menggunakan library pingouin.homoscedasticity. Kamu bisa menggunakan metode yang lain sesuai kebutuhanmu.
import pingouin as pg
pg.homoscedasticity(data, dv='tinggi_tanaman', group='jenis_pupuk')
Berikut output yang diperoleh
Dari output di atas, kita dapat menyimpulkan bahwa pada taraf signifikansi 5%, residual memenuhi asumsi homogenitas. Hal ini dikarenakan residual memiliki p-value sebesar 0.511 > 0.05.
Karena uji asumsi normalitas dan homogenitas terpenuhi, maka kita dapat melanjutkan ke analisis utama kita, yaitu One Way Anova.
One Way ANOVA di Python
Ada banyak library untuk melakukan uji Anova di Python. Artikel kali ini akan membahas 3 di antaranya.
Statsmodel
import statsmodels.api as sm
from statsmodels.formula.api import ols
model_pupuk = ols('tinggi_tanaman ~ C(jenis_pupuk)', data=data).fit()
tabel_anova = sm.stats.anova_lm(model_pupuk, typ=2)
print(tabel_anova)
SciPy
import scipy.stats as stats
stats.f_oneway(data['tinggi_tanaman'][data['jenis_pupuk'] == 'A'],
data['tinggi_tanaman'][data['jenis_pupuk'] == 'B'],
data['tinggi_tanaman'][data['jenis_pupuk'] == 'C'],
data['tinggi_tanaman'][data['jenis_pupuk'] == 'D'],
data['tinggi_tanaman'][data['jenis_pupuk'] == 'E'])
Pingouin
import pingouin as pg
tabel_aov = pg.anova(data=data, dv='tinggi_tanaman', between='jenis_pupuk', detailed=True)
print(tabel_aov)
Dari semua library yang digunakan, nilai F dan p-value menampilkan nilai yang sama, yaitu 212.76 dan 5.15 x 10-13. Kamu dapat menggunakan library manapun sesuai preferensimu.
Dari 3 output tersebut dapat disimpulkan bahwa pada taraf signifikansi 5%, H0 ditolak karena Pr(>F) = 5.15 x 10-13 yang artinya terdapat perbedaan tinggi tanaman antar kelompok pupuk atau dapat dikatakan bahwa ada pengaruh jenis pupuk terhadap tinggi tanaman.
Uji Lanjut Tukey
Sesuai dengan teori dari ANOVA, jika diperoleh hasil bahwa terdapat pengaruh perlakuan terhadap variabel yang diamati, maka analisis akan dilanjutkan dengan melakukan post-hoc test. Uji ini digunakan untuk mengetahui pasangan mana yang berbeda signifikan satu sama lain. Pengujian juga akan memberikan informasi terkait perlakuan mana yang memberikan hasil terbaik.
Banyak metode yang dapat digunakan untuk melakukan uji lanjut, salah satunya adalah uji Tukey. Sama halnya dengan R, Python juga menyediakan library untuk melakukan uji Tukey sebagai lanjutan dari uji Anova di Python.
import statsmodels.stats.multicomp as mc
comp = mc.MultiComparison(data['tinggi_tanaman'], data['jenis_pupuk'])
post_hoc_res = comp.tukeyhsd()
post_hoc_res.summary()
Dari output di atas, terdapat 10 pasangan kelompok yang diuji. Kolom meandiff menyatakan nilai selisih rata-rata antar kelompok tersebut dan kolom p-adj menyatakan nilai p value yang akan digunakan untuk penarikan kesimpulan. Jadi jika menggunakan Python, kita tidak perlu repot-repot menghitung nilai BNJ tiap pasangan, kita hanya perlu melihat nilai p-adj dan membandingkannya dengan alpha yang kita gunakan. H0 ditolak jika nilai p-adj < alpha dan sebaliknya, H0 gagal ditolak jika p adj lebih besar sama dengan alpha.
Dari output tersebut, maka dapat disimpulkan bahwa pada taraf signifikansi atau alpha 5% hanya pasangan kelompok B dan C yang tidak berbeda signifikan karena memiliki nilai p adj = 0.2193 > 0.05. Sedangkan untuk 9 pasangan lainnya diperoleh hasil bahwa H0 ditolak.
Selain itu, kita juga bisa mengetahui manakah jenis pupuk terbaik dari kelima pupuk yang digunakan. Pupuk terbaik pastilah pupuk yang merangsang pertumbuhan tanaman paling cepat. Artinya, kelompok yang dikenai pupuk tersebut adalah kelompok dengan nilai rata-rata tanaman tertinggi dan berbeda secara signifikan dengan semua kelompok lainnya. Untuk memudahkan penarikan kesimpulan kita dapat membuat mean plot dengan sintaks sebagai berikut.
post_hoc_res.plot_simultaneous(ylabel= "Jenis Pupuk", xlabel= "Tinggi Tanaman (cm)")
Dari plot di atas, sangat jelas terlihat bahwa Jenis Pupuk dengan rata-rata tinggi tanaman tertinggi adalah kelompok tanaman dari pupuk D. Karena kelompok ini juga berbeda signifikan dari kelompok lainnya, maka dapat kita simpulkan bahwa jenis pupuk terbaik untuk tanaman tersebut adalah jenis pupuk D.
Nah, mudah bukan cara melakukan uji ANOVA di Python. Jika kamu ingin mengetahui bagaimana penerapan metode statistika lainnya di Python, kamu bisa request di kolom komentar atau langsung bertanya ke admin via instagram atau WA yaa.
See you di artikel selanjutnya.