One Way Anova (Rancangan Percobaan) dengan Python

Diposting pada

One way Anova merupakan alat analisis yang umum digunakan data analyst atau peneliti untuk menentukan ada atau tidak perbedaan rata-rata dari tiga kelompok atau lebih. One way anova tidak hanya digunakan untuk rancangan percobaan, melainkan digunakan juga untuk data lain yang memiliki data yang continuous (data yang berskala interval atau rasio).

Kali ini saya berlatih menggunakan python, sebuah aplikasi atau Bahasa pemrograman yang free licensi dan bisa digunakan sebagai metode resmi pada karya tulis ilmiah. Pada dasarnya urutan pengerjaannya sama, yakni menghitung uji F terlebih dahulu kemudian berlanjut uji Duncan atau tukey sebagai tindak lanjut dari signifikansi uji F. jika uji F tidak signifikan, maka uji lanjut tidak diperlukan lagi. Materi mengenai rancangan percobaan baik Ral maupun Rak sudah saya jelaskan di artikel: info lengkap Ral dan Rak.

Langkah one way anova dengan python

Data awal kita save dengan nama data.csv. jika anda pemula sebaiknya nama file juga sama karena akan berpengaruh terhadap variable yang ditulis selanjutnya.

data one way anova dengan python

Data disimpan dalam folder notebook khusus kita namai dengan one way anova. Kemudian buka jupyter notebook melalui cmd (command prompt). Jika anda belum paham tentang hal dasar ini, silahkan simak artikel cara install python di windows, dan membuat folder di python.

Setelah masuk dalam python, buat notebook baru dibagian kanan atas.

one way anova dengan python

Langkah pertama adalah import data yang sudah kita simpan dalam folder.

import pandas as pd
df = pd.read_csv("data.csv")
print(df.head())
hasil one way anova

Langkah selanjutnya adalah menkonversi nilai atau data tersebut agar sesuai dengan module.

df_melt = pd.melt(df.reset_index(), id_vars=['index'], value_vars=['A', 'B', 'C', 'D'])
# replace column names
df_melt.columns = ['index', 'treatments', 'value']
print(df_melt.head())
print(df_melt.tail())

kode diatas memberi perintah agar kolom A B C D yang diawal diubah menjadi kolom index, treatment, dan value. Artinya kita membuat perlakuan atau treatment dijadikan satu kolom (persis seperti kita mengolah data di SPSS). Hasilnya adalah sebagai berikut:

data siap diolah python

Terlihat data telah siap untuk diolah karena terdiri dari treatment dan value. Lalu bagaimna jika file csvnya langsung diubah menjadi gambar diatas? Boleh. Klo sudah dibuat format yang sesuai tersebut, maka Langkah 2 dilewati. Namun perlu diingat bahwa untuk Langkah selanjutnya setiap variable df_melt diganti menjadi variable df saja.

Selanjutnya, untuk proses identifikasi kita akan membuat bloxplot untuk mengetahui sebaran mean setiap treatment. Gunakan kode berikut:

import matplotlib.pyplot as plt
import seaborn as sns
ax = sns.boxplot(x='treatments', y='value', data=df_melt, color='#99c2a2')
ax = sns.swarmplot(x="treatments", y="value", data=df_melt, color='#7d0013')
plt.savefig('boxplot.png')
plt.show()

Hasil dari kode berikut adalah sebuah gambar boxplot yang secara otomatis tersimpan didalam folder yang sama yang dinama dengan boxplot.png sebagai berikut:

boxplot one way anova python
Jika sudah meilhat gambar ini secara sekilas ada perbedaan yang nyata antara treatment A dan C. tapi nanti bisa dibuktikan dengan anova dan uji lanjutnya.
Selanjutnya kita akan menghitung f test dan p valuenya. H0 adalah tidak ada perbedaan rata-rata terhadap empat treatment. H1 adalah setidaknya ada satu kelompok yang berbeda rata-rata dari kelompok yang lain.
import scipy.stats as stats
# mendapatkan f hitung dan p valuenya
fvalue, pvalue = stats.f_oneway(df['A'], df['B'], df['C'], df['D'])
print(fvalue, pvalue)

hasilnya adalah sebagai berikut:

hasil uji f menggunakan python

Nilai pertama (4.904) adalah F hitung, sedangkan 0.00409 adalah p valuenya. Sebenarnya output ini sudah cukup, tapi biasanya kita menggunakan table yang lebih komplit yang terdiri dari sum square dan df. Maka kita menggunakan kode berikut:

import statsmodels.api as sm
from statsmodels.formula.api import ols

# Ordinary Least Squares (OLS) model
model = ols('value ~ C(treatments)', data=df_melt).fit()
anova_table = sm.stats.anova_lm(model, typ=2)
anova_table

Outputnya adalah sebagai berikut:

output uji F

Bagi yang sudah malang melintang di anova, mestinya sudah tidak perlu dijelaskan tentang output ini ya.. pada intinya F hitung bernilai  4.9 dengan probabilitas 0.004 yang berarti dibawah 0.05 dan menandakan bahwa kita tolak H0. Artinya, terdapat setidaknya satu kelompok yang berbeda secara nyata dari rata-rata kelompok lainnya.

Pada table diatas, sepertinya ada yang kurang yakni mean square. Kekurangan tersebut bisa diperbaiki dengan menggunakan kode berikut:

from bioinfokit.analys import stat
res = stat()
res.anova_stat(df=df_melt, res_var='value', anova_model='value ~ C(treatments)')
res.anova_summary

Jika anda menjumpai error seperti gambar dibawah ini, dimanapun step anda misalnya didepan atau diawal tadi, artinya ada module yang belum terinstall di python laptop anda.

error di python

Pada keterangan diatas, saya belum menginstall paket ‘bioinfokit’. Jadi jangan panik dulu, di artikel cara install python windows diatas bahwa cara instal module kita kembali ke command prompt, matikan dulu kernel python dengan menekan ctr-c. kemudian install dengan menulis:

pip install bioinfokit

setelah berhasil terinstal, kembali aktivkan jupyter notebook dan klik notebook yang telah tersimpan tadi, kita ulangi dari awal tapi cukup klik run saja karena kode sudah tersave. Hasil dari pendingan table diatas adalah sebagai berikut:

output uji f lengkap anova python

Inti hasil table ini masih sama, yakni terjadi uji F yang signifikan. Perlu dilanjutkan uji lanjut untuk menemukan treatment mana yang berbeda nyata dengan yang lain. Pada Latihan ini saya menggunakan uji tukey untuk uji lanjutnya. kode yang kita gunakan adalah sebagai berikut:

from bioinfokit.analys import stat
res = stat()
res.tukey_hsd(df=df_melt, res_var='value', xfac_var='treatments', anova_model='value ~ C(treatments)')
res.tukey_summary

hasilnya adalah sebagai berikut:

uji tukey anova python

Agak berbeda membaca output spss dan python kali ini. Output diatas sudah disandingkan berdasarkan group secara berpasangan. Pada baris pertama, treatment A dipasangkan dengan treatment B. terjadi perbedaan mean sebesar 0.326 dan memiliki p value 0.49 yang artinya terima H0 (tidak berbeda nyata).

Langsung melompat ke baris 2 (no 1) pasangan A dan C memiliki perbedaan mean sebesar 0.836 dengan p value 0.003 (dibawah 0.05) yang menandakan tolak H0 atau berbeda nyata /signifikan. Hal yang sama terjadi pada pasangan C dan D. untuk memudahkan kita membaca output ini dengan melihat bloxplot sebelumnya.

Jika dibuatkan notasi huruf untuk pengelompokkan maka kira kira akan tertulis seperti ini Aa Bab Cb Dac dan table bisa disesuaikan sesuai kebutuhan pembaca.

Selanjutnya kita seharusnya melakukan uji asumsi terhadap data yang digunakan termasuk homogen atau tidak, menyebar normal atau tidak. Hal ini dilakukan agar hasil yang diperoleh dapat memiliki goodness of fit dan bisa dikatakan hasil penelitiannya berlaku untuk kondisi yang lain (populasi) sebagai ciri khas dari statistic inferensia. Mengenai uji asumsi akan dibahas pada artikel yang terpisah.

Selamat Belajar.

Gambar Gravatar
Data analyst sekaligus researcher. Pernah mendalami production scheduling dalam manufacture. Melalui blog ini menyalurkan hobi menjadi statistical consulting dan menghimpun statistical process control software.

2 komentar

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *