Statistik JS: Chap. 3

Riky Perdana
9 min readDec 19, 2022

--

Photo by Rodrigo Kugnharski on Unsplash

3. Central Tendency

Kalau diartikan secara langsung ke bahasa Indonesia artinya adalah tendensi tengah yang maknanya adalah kecenderungan sekelompok data terhadap pertengahannya. Orang yang awam terhadap konsep statistik akan cenderung hanya menggunakan rata-rata untuk mencari pertengahan data, sedikit sekali masyarakat menyadari bahwa formula rata-rata memiliki potensi resiko bias ketika dalam kelompok data yang dihadapi dijumpai data yang eksrtim kecil atau ekstrim besar (dibaca: outlier). Oleh karena itu kita membutuhkan algoritma alternatif selain rata-rata yaitu antara lain median dan moda. Kehadiran tiga alternatif algoritma ini tidak untuk menunjukkan siapa yang terbaik dalam penentuan pertengahan data, melainkan digunakan bersama dan untuk menutupi kekurangan satu sama lain, plus kemampuan untuk melihat kemiringan distribusi data (hal yang tidak mungkin dicapai tanpa kerjasama mean, median, dan moda). Jokes: penulis menyaksikan puluhan tayangan kura-kura ninja untuk menyadari bahwa misi mereka hanya bisa selesai bila dikerjakan bersama. Mari kita berkenalan dengan Mean, Median, dan Moda.

3.1. Mean

Adalah rata-rata hitung dari sekelompok data. Rumusnya adalah yang paling sederhana diantara semua rumus statistik. Cara mendapatkannya adalah dengan menjumlahkan seluruh anggota dan dibagi dengan panjang data. Bentuk rumusnya seperti ini:

Rumus: Mean deret data tunggal

Jika dikonversi menjadi kode JS, maka menjadi seperti ini:

mean = array => sum(array) / array.length
mean([4, 2, 3, 1, 3, 4, 3, 2]) // hasilnya 2,75

Fungsi mean dapat melakukan pekerjaannya yang terbaik ketika data yang kita hadapkan padanya memiliki kesenjangan yang wajar/normal. Masalah mulai tampak ketika salah satu atau beberapa memiliki nilai ekstrim. Contoh:

mean([4, 2, -300, 1, 3, 4, 3, -800]) // hasilnya -135,375
mean([4, 2, 3, 1, 3, 4, 3, 1500]) // hasilnya 190

3.2. Median

Gambar: Contoh lokasi Median pada sebuah deret data

Adalah algoritma pencarian nilai tengah data yang ‘hampir’ tidak melibatkan aritmatika. Karena mencari nilai median cukup dengan mengurutkan data dari yang terkecil ke yang terbesar (bisa juga sebaliknya) lalu mengambil nilai yang terletak paling tengah. Dimana jika panjang himpunan adalah ganjil maka nilai tengah bisa langsung ditunjuk, sementara bila panjang himpunannya genap maka bisa ambil dari mean dua data yang paling tengah. Mencari nilai median secara manual oleh manusia untuk himpunan yang relatif pendek memang mudah, masalah baru muncul ketika kita ingin “kenapa tidak komputer saja yang mengerjakan?”

Penulis telah mencoba meninjau beberapa referensi tentang algoritma pencarian median secara otomatis oleh komputer dan sayang sekali masih relatif sedikit, dan dari yang ditemukan semuanya menggunakan paradigma prosedural, sementara pada buku ini penulis ingin konsisten dengan paradigma fungsional. Berikut ini adalah kode JS untuk pencarian median serta penjelasannya:

median = array => withThis( // Penjelasan kode #1
sort(array), sorted => ors([ // #2
sorted.length === 1 && sorted[0], // #3
sorted.length === 2 && sum(sorted) / 2 // #4
]) || median(sorted.slice(1, sorted.length - 1)) // #5
)

Penjelasan kode:

  1. Urutkan dulu isi himpunan dari nilai terkecil ke terbesar
  2. Pilih salah satu kondisi yang benar
  3. Jika di tengah tinggal 1 maka itulah hasilnya
  4. Jika di tengah tinggal 2 maka ambil nilai mean keduanya
  5. Jika himpunan masih ada 3 atau lebih maka pangkas nilai pangkal dan ujung
median([1, 2, 3]) // hasilnya 2
median([4, 2, 3, 1, 3, 4, 3, 2]) // hasilnya 3
median([1, 2, 5, 100]) // hasilnya 3.5
median([1, 1, 1, 1, 1, 1, 1500]) // hasilnya 1

Terlihat disini bahwa median mampu mengabaikan data ekstrim dan fokus pertengahan lokasi pada data. Tapi menggunakan median sendirian tidak baik, karena Anda bisa tidak sadar bahwa dalam data Anda mengandung nilai ekstrim.

3.3. Moda

Gambar: Contoh Moda yang dihitung berdasarkan mayoritas

Adalah teknik ketiga pada Central Tendency bersaudara yang mirip dengan median karena hampir tidak membutuhkan kalkulasi. Moda bekerja dengan cara menteli (tally counting) untuk mengetahui berapa kali setiap anggota himpunan muncul dengan nilai yang eksak sama pada anggota lainnya, lalu menunjuk salah satu angka yang paling sering muncul. Tidak banyak buku statistik yang membahas cara mengerjakan moda secara otomatis, dan disini penulis telah mengembangkan kode JS pencarian moda berikut contoh:

mode = array => +Object.entries( // Penjelasan kode #1
array.reduce((acc, inc) => // #2
Object.assign(acc, {[inc]: // #3
acc[inc] ? acc[inc] + 1 : 1 // #4
})
, {}) // #5
).reduce((acc, inc) => // #6
inc[1] > acc[1] ? inc : acc // #7
, [0, 0])[0] // #8

Penjelasan kode:

  1. Untuk mengambil angka besar terakhir yang tersisa
  2. Urai satu per satu anggota himpunan untuk diteli
  3. Untuk setiap nilai unik cari/buatkan pasangan ‘key:value’ nya
  4. Bila telah ada maka naikkan nilainya 1, kalau tidak maka mulai dari 1
  5. Objek kosong tempat menyimpan daftar pasangan ‘key:value’
  6. Urai objek untuk mulai mencari nilai dengan frekuensi terbesar
  7. Jika nilai iterasi lebih besar maka timpa nilai sebelumnya, jika tidak maka pertahankan nilai sebelumnya
  8. Ambil nilai yang tersisa untuk dikembalikan sebagai angka

Kode JS diatas adalah cara pencarian moda paling sederhana yang bisa penulis susun. Bila penjelasan diatas masih relatif sulit dipahami, harap untuk dimaklumi karena membangun kode sering kali lebih mudah daripada menyusun penjelasannya. Tapi bagi yang berminat silahkan urai kodenya satu per satu.

moda([4, 2, 3, 1, 3, 4, 3, 2]) // hasilnya 3
moda([1, 2, 2, 100]) // hasilnya 2
moda([1, 2, 2, 3, 3, 4, 4]) // hasilnya 2
moda([1, 2, 3, 4, 5]) // hasilnya 1

Dari uji coba diatas kita juga bisa melihat bahwa moda tidak terlepas dari masalah yang ditimbulkan oleh nilai ekstrim. Dan masalah kedua adalah bila ditemukan lebih dari 1 angka yang frekuensinya sama, maka yang diambil hanya salah satunya, dalam hal ini angka yang pertama.

Kini pembaca telah mengetahui apa itu mean, median, dan moda, bagaimana cara menghitungnya melalui JS, dan apa saja masalah yang masing-masing mereka hadapi. Bila penulis menyusun kekurangan dan kelebihannya dalam tabel maka bentuknya adalah sebagai berikut:

Tabel. Kelebihan dan Kekurangan Mean, Median, Moda
Gambar. Posisi relatif Mean — Median — Moda

Seperti yang telah penulis sebutkan sebelumnya bahwa meski mean, median, dan moda masing-masing memiliki kelemahan, mereka akan menunjukkan kebermanfaatannya ketika digunakan bersamaan. Memangnya apa yang terjadi bila digunakan bersamaan? Kita akan bisa melihat kemiringan distribusi data atau dengan kata lain normalitas distribusi. Bila kita perhatikan seluruh grafik diatas ini kita akan sadar bahwa posisi median akan selalu ditengah, apapun yang terjadi. Sementara mean dan moda dapat mengambil posisi mana saja di dalam grafik. Perhatikan juga bahwa hampir selalu mean dan moda menempati posisi yang berlainan yang dipisahkan oleh median. Bila pada grafik terlihat mean, median, dan moda menempati posisi yang berdekatan maka dapat diasumsikan bahwa himpunan berdistribusi normal. Bila mean berada di sebelah kiri median maka disebut kurva miring negatif, sementara bila mean berada di sebelah kanan median maka disebut kurva miring positif. Memang apa maksudnya positif atau negatif tersebut? Artinya telah terjadi penumpukan nilai pada salah satu sisi kurva, dan dapat diartikan pula bahwa ada kecenderungan data himpunan tersebut tidak normal. Memang kenapa kalau distribusinya tidak normal? Sebenarnya tidak ada yang salah dengan kurva yang miring positif ataupun negatif bila memang itu apa adanya data di lapangan. Namun ada beberapa alat uji statistik yang mensyaratkan normalitas data untuk dianggap layak olah.

Central Tendency bukan satu-satunya alat untuk mengetahui normalitas distribusi meski mean, median, dan moda adalah alat yang paling sederhana untuk mendeteksi normalitas distribusi. Pada bab-bab berikutnya kita akan singgung kembali tentang normalitas distribusi dengan pendekatan yang berbeda.

Praktik mandiri:

  1. Coba karang sebuah himpunan dengan panjang 100, dimana angka yang Anda tulis/pilih kebanyakan mendekati 50 sementara semakin sedikit yang mendekati 0 atau 100.
  2. Karang pula himpunan kedua dimana pilihan angkanya kebanyakan mendekati 70.
  3. Lalu coba cari mean, median, dan moda untuk kedua himpunan tersebut dan perhatikan kemiringan datanya dilihat dari ketiga alat ukur tadi.
  4. Untuk himpunan ketiga, coba buat deret angka acak yang tidak berdekatan antara satu sama lain, bahkan isi dengan beberapa nilai ekstrim.
  5. Lakukan pengukuran Central Tendency pada himpunan acak tersebut untuk melihat apa yang terjadi dengan distribusi datanya.

Did You Know?

Ada cara alternatif untuk menemukan nilai moda bila:

  1. Cara yang biasa tidak menunjukkan moda yang wajar / ganda,
  2. Jarak antara mean dan median tidak begitu jauh.

Adapun rumus matematisnya adalah:

Rumus: Hubungan matematis antara Mean — Median — Moda

Yang bila diterjemahkan ke kode JS akan menjadi:

moda2 = array => mean(array) - (3 * (
mean(array) - median(array)
))

Silahkan coba dengan data contoh moda sebelumnya dan lihat seberapa besar atau kecil perbedaannya.

3.4. Pythagorean Means

Photo by Ryunosuke Kikuno on Unsplash

Arithmatic mean (AM) atau yang biasa cukup dipanggil mean hanyalah salah satu dari Pythagorean Means (PM) bersaudara. Selain AM ada juga harmonic mean (HM) dan geometric mean (GM) dimana meski ketiganya adalah rata-rata hitung, tapi berbeda dalam hal cara menghitungnya. Bila AM bekerja dengan cara penambahan, HM dengan cara pembagian pecahan, dan GM dengan cara pengakaran perkalian. Cara yang berbeda ini membuat mereka lebih cocok untuk digunakan pada situasi tertentu. Mari kita berkenalan dengan HM dan GM:

3.4.1. Rata-rata Harmonis

Khusus untuk himpunan data pecahan atau rasio, rata-rata matematis mungkin bukan pilihan yang paling tepat, diakibatkan oleh kelemahannya yang terlalu sensitif terhadap data ekstrim. Alternatif yang bisa diambil adalah Harmonic Mean, yang cara kerjanya adalah menghitung rata-rata pecahan dari setiap data himpunan, rumus matematisnya adalah:

Rumus: Rata-rata harmonis deret data tunggal

Yang jika dikonversi menjadi kode JS maka bentuknya:

meanHarmonic = array => array.length / sum(
array.map(i => 1 / i)
)

mean([2, 5, 7, 9, 12]) // hasilnya 7
meanHarmonic([2, 5, 7, 9, 12]) // hasilnya 4,82

Hasil perthitungan harmonic mean akan selalu lebih kecil dari arithmatic mean (rumus rata-rata biasa), dan itu adalah hal yang normal. Memang apa gunanya belajar harmonic mean? Mari penulis buat 1 kasus contoh:

Anda adalah seorang karyawan Google yang bekerja di unit bisnis Google Map. User sering mengeluhkan bahwa estimasi waktu sampai tujuan jauh lebih cepat dibanding rata-rata di lapangan. Anda diminta untuk merancang logika yang lebih toleran terhadap kemungkinan terjelek di lapangan. Dari siste informasi geografis dan info kepadatan jalan, Anda mendapat bahwa perjalanan dari kota A ke kota B yang akan melewati 5 jalan berikut estimasi kecepatan tempuhnya:

  • melewati 2 jalan protokol (50 kpj dan 70 kpj)
  • melewati 1 jalan pasar (20 kpj)
  • melewati 2 jalan lintas (90 kpj dan 120 kpj)

Kita asumsikan saja panjang setiap jalan kebetulan sama. Dengan menggunakan arithmatic mean, kita akan mendapati hitungan rata-rata kecepatan total adalah 70 kpj, ini adalah angka yang terlalu optimis untuk mengestimasi kecepatan perjalanan. Sementara dengan menggunakan harmonic mean, kita akan mendapat hitungan rata-rata kecepatan total adalah 48,2 kpj, ini adalah angka estimasi yang lebih toleran terhadap resiko keterlambatan di perjalanan.

3.4.2. Geometric Mean

Alternatif ketiga untuk perhitungan mean adalah geometric mean, yang tidak rentang terhadap nilai ekstrim seperti arithmatic mean dan cara menghitung yang relatif mudah. Adapun formula matematisnya adalah sebagai berikut:

Rumus: Geometric Mean pada data tunggal

Jika dikonversi menjadi kode JS, maka bentuknya adalah sebagai berikut:

meanGeometric = array => pow(1 / array.length)(mul(array))

meanGeometric([2, 5, 7, 9, 12]) // hasilnya 5,97

Disini dapat kita lihat bahwa GM menghasilkan angka rata-rata yang tidak setinggi arithmtic mean, dan tidak pula serendah harmonic mean. Itu karena metode perhitungan arithmatic mean mengandalkan pertambahan, harmonic mean mengandalkan pecahan nilai (reciprocal), sementara geometric mean mengandalkan multiplikasi. Lalu apa contoh kasus dimana geometric mean lebih cocok digunakan?

Anda sedang mempertimbangkan untuk membeli console gaming terbaru, sebutlah namanya A dan B. Karena harga keduanya mahal dan sama-sama canggih sementara dana Anda terbatas, Anda akan mencari ulasan dari komunitas gaming terpercaya di internet seperti IGN dan Gamespot dan memanfaatkan scoring mereka untuk mengambil keputusan secara kuantitatif. Anda berhasil mengumpulkan skor review dalam tabel berikut:

Tabel. Contoh kasus Geometric Mean

Lalu dengan menggunakan arithmatic mean Anda menghitung rata-rata skor setiap konsol dari kedua sumber seperti berikut:

KonsolA = mean([6.8, 4.5]) // hasilnya 36,25
KonsolB = mean([75, 3]) // hasilnya 39

Dari perhitungan arithmatic mean Anda mendapati bahwa yang menang adalah Konsol B. Kemudian Anda sadar bahwa informasi penting telah terlewatkan, dimana scoring range kedua komunitas tersebut berbeda. IGN menerapkan scoring dalam skala 0 s/d 100 sementara Gamespot menerapkan skala 0 s/d 5. Jelas bahwa penilaian keduanya tidak dapat disetarakan, dan memaksa menggunakan arithmatic mean adalah kesalahan fatal. Sekarang kita coba menggunakan geometric mean:

KonsolA = meanGeometric([68, 4.5]) // hasilnya 17,5
KonsolB = meanGeometric([75, 3]) // hasilnya 15

Geometric mean yang bekerja dengan cara multiplikasi tidak terpengaruh oleh perbedaan skala pada anggota himpunannya, sehingga lebih fair sebagai solusi kasus ini.

Did You Know?

Bila Anda jeli memperhatikan contoh hitungan AM, HM, GM terakhir, Anda akan mendapati bahwa perbandingan hasilnya adalah HM < GM < AM dan perbedan ini sudah sifat alamiah PM.

--

--

No responses yet