Statistik JS: Chap. 8
8. Unity of Power
Apa gunanya kita mengembangkan teknologi? Apakah untuk membuat pekerjaan kita semakin rumit? Apakah untuk membuat tugas kita semakin banyak? Kalau jawaban keduanya adalah “ya”, maka gugurlah peranan teknologi tersebut. Teknologi kita ciptakan agar beban kerja kita semakin sedikit, kalaupun masih ada yang harus dikerjakan, ia menjadi lebih mudah berkat bantuan teknologi. Lalu apa contoh teknologi yang memudahkan? Contohnya adalah smartphone/laptop yang sedang Anda gunakan sambil membaca buku ini. Walau kita telah dikelilingi teknologi perangkat keras, perangkat lunak, jaringan yang cepat, tidak serta merta pekerjaan kita menjadi lebih mudah bukan? Apakah berarti semua teknologi tersebut gagal menjalankan tugasnya? Belum tentu.
Saya menulis buku ini dengan harapan bahwa apa yang saya kerjakan dalam profesi saya sebagai dosen statistik lebih mudah, dan juga harapan bahwa teknologi yang memudahkan saya tersebut dapat pula dinikmati oleh orang lain tanpa hambatan yang berarti. Sayangnya, teknologi yang saya harapkan tersebut tidak serta merta bisa saya peroleh dari sumber luar dengan cara yang se-efisien mungkin. Kalau saya masih bertahan untuk tidak belajar JS, dan tetap mengandalkan M. Excel dan SPSS hingga akhir hayat, mungkin pekerjaan saya tidak akan semudah ini. Kenapa? Karena kedua aplikasi tersebut belum tentu “tailor-made” untuk semua kebutuhan statistik saya. Bila itu terjadi kepada saya, apakah hal itu terjadi pula pada Anda?
Kalau seandainya buku ini saya stop di bab 7, mungkin Anda akan tetap kerepotan untuk menyalin semua kode satu per satu ke halaman console dan salin ulang data bahan dari spreadsheet, setiap kali olah data. Oleh karena itu saya teringat, bagaimana kalau kita tambahkan 1 fitur lagi agar tujuan teknologi statistik JS ini benar-benar bisa memudahkan pekerjaan?
Jika Anda pernah menonton film Lord of The Ring, tentu Anda tahu apa sebenarnya fungsi cincin yang diperebutkan antara pasukan Fellowships dan Sauron, yaitu cincin yang bisa menyatukan kekuatan semua cincin yang lain. Maka dalam bab ini, saya ingin membuat cincin terakhir tersebut, yang bentuknya seperti ini:
8.1. Descriptive Pack
descPack = arr => ({
basic: {
length: arr.length,
min: Math.min(...arr), max: Math.max(...arr),
range: Math.max(...arr) - Math.min(...arr)
},
central: {
mean: mean(arr), mode: mode(arr),
median: median(arr),
geometric: geoMean(arr),
harmonic: harmonicMean(arr)
},
distribution: {
frequency: distFreq(arr),
relative: distRelative(distFreq(arr)),
cumulative: distCumulative(distFreq(arr))
},
dispersion: {
deviation_mean: devMean(arr),
variance: variance(arr),
standard_deviation: stanDev(arr)
},
skewness: {
mode: skewMod(arr),
median: skewMed(arr),
moment: skewMom(arr),
bowley: skewBow(
fractile(4, 1, arr),
fractile(4, 2, arr),
fractile(4, 3, arr)
)
},
kurtosis: {
moment: kurtMom(arr),
percentile: kurtPer(
fractile(4, 1, arr),
fractile(4, 3, arr),
fractile(100, 10, arr),
fractile(100, 90, arr)
)
},
z_scores: zConvert(arr),
trend: {
semi_average: semiAvg(arr),
least_square: leastSquareEqu(arr),
parabolic: parabolicTrend(arr),
exponential: expoTrend(arr)
}
})
descPack([1, 2, 3, 4, 5, 6, 7, 8, 9, 11])
// get all specified results
descPack
adalah sebuah fungsi yang ketika menerima sebuah deret data, maka ia akan mengembalikan sebuah objek besar yang kaya dengan informasi statistik deskriptif yang pernah kita bahas sebelumnya dalam buku ini. Seperti yang bisa Anda lihat, fungsi ini memberikan output informasi mulai dari yang basic, central tendency, distribusi frekuensi, skewness/kemiringan, kurtosis/keruncingan, hingga persamaan trend. Sekarang coba Anda praktikkan salin kode diatas ke console dan panggil descPack
seperti contoh kode diatas, lihat sendiri hasil keluarannya.
trend
sebenarnya bukan termasuk bagian dari statistik deskriptif, tapi karena ia hanya membutuhkan 1 variabel sebagai input sementara dimensi lainnya adalah waktu, maka sekalian saja kelompok fungsi trend dimasukkan ke fungsi ini. Ketika Anda menggunakan fungsi ini untuk menganalisis deksriptif data yanga Anda punya dan tidak memiliki kebutuhan akan data trend, maka bagian ini dapat diabaikan.
8.2. Regression Pack
descPack
diatas hanya bisa digunakan untuk sebuah deret data tunggal, sementara untuk analisis data bivariat (= sepasang variabel) seperti analisis korelasi dan regresi kita butuh untuk mengolah 2 variabel sekaligus. Oleh karena itu fungsi regressPack
dibedakan sendiri seperti di bawah ini:
regressPack = (x, y) => ({
corelation: {
pearson: corelation(x, y),
spearman: corelationRank(x, y)
},
regression: {
SEE: SEE(x, y),
linear: regression(x, y),
exponential: expoRegress(x, y),
parabolic: parabolRegress(x, y)
}
})
regressPack(
[1, 2, 3, 4, 5],
[2, 3, 4, 5, 7]
)
/* get the specified output {
"corelation": {
"pearson": 0.9863939238321437,
"spearman": 1
},
"regression": {
"linear": {"a": 0.6, "b": 1.2},
"SEE": 0.3651483716701133,
"exponential": {
"a": 1.8875706673650718,
"b": 0.7429670644719149
},
"parabolic": {"a": 14, "b": -10,"c": 2}
}
}*/
regressPack
adalah fungsi yang menerima deret x
dan deret y
, dan ia akan mengembalikan 2 hasil analisis korelasi (Pearson dan Spearman), 1 ukuran ketepatan regresi (SEE
), dan 3 hasil analisis regresi (linear, eksponensial, dan parabolic). Karena ia hanya bisa menerima 2 variabel maka ia disebut analisis bivariat. Lalu bagaimana kalau data yang kita analisis bersifat multi-variat, atau lebih dari 2 variabel? Berarti kita harus mengeksekusi perintah regressPack untuk setiap pasangan setiap variabel tersebut. Misalnya ada variabel a, b, dan c. Berarti kita perlu analisis a&b, b&c, lalu a&c. Bagaimana bila ada 5 variabel atau lebih? Berarti kita perlu pasangkan setiap variabel dengan masing-masing variabel yang ada seperti pada contoh yang baru disebutkan.
Secara teoritis, tidak ada batasan berapa panjang data setiap variabel yang mampu diolah oleh JS. Karena pada website resmi Mozilla, diketahui bahwa panjang maksimal array pada JS adalah +/- 4 milyar elemen. Pada M. Excel panjang maksimalnya +/- 1 juta baris, dan panjang maksimal panjang baris pada SPSS diketahui +/- 2 milyar. Kecil sekali kemungkinan Anda membutuhkan kapasitas olah data yang sebesar itu, karena mayoritas penelitian dan alat analisis cukup terpuaskan dengan 200 baris data. Kecuali Anda bekerja pada industri teknologi informasi seperti startup jejaring sosial yang bisa mengumpulkan ratusan juta data per hari.
Pada bab sebelumnya saya menuliskan bahwa sebaiknya kita melakukan penilaian visual dulu pada grafik data kita lalu tentukan alat analisis apa yang cocok untuk menghitung koefisien atau model yang paling cocok. Tapi kenapa pada kode diatas ini saya malah menggabungkan semua alat analisis tersebut dalam 1 fungsi? Pada data real di lapangan, data bisa memiliki pola yang random, atau sangat random. Kalaupun kita memiliki expertise untuk menjustifikasi sebuah alat analisis sebagai yang paling cocok, belum tentu komputer berfikir demikian.
Menghadapi contoh data seperti diatas, bagaimana Anda bisa mengatakan bahwa garis linear adalah yang terbaik? Apakah Anda yakin bahwa tidak ada pola eksponensial dimana nilai mendekati nilai 90 tanpa pernah menyentuh 90? Atau Anda yakin bahwa ini tidak memiliki pola lekukan seperti parabolik? Mengerahkan semua “senjata” kita pada suatu pola data real juga bukan hal yang salah. Justru dengan kehadiran beberapa hasil analisis yang berbeda, nantinya Anda bisa menjustifikasi pola mana yang lebih cocok untuk sebuah data. Mana yang cocok diambil, yang ngawur tinggal dibuang. Tapi lebih baik perbedaan tersebut disimpan, agar nanti dapat mendukung argumen Anda kenapa sebuah model analisis lebih cocok dibanding yang lain.
8.4. The Great Case
H: Dr. Watson, bantu aku mengumpulkan data. Aku membutuhkan 50 set data para kriminal kelas atas di London.
W: Apa yan kau butuhkan Holmes?
H: Set data kuantitatif catatan kriminal dilihat dari putusan lama hukuman penjara, dan set data koneksi setiap kriminal tersebut kepada tokoh besar di London. Seharusnya mudah bagimu Watson.
W: Okay, akan kudapatkan. Tapi kenapa? Biasanya cukup intuisi kan?
H: Kali ini biar statistik yang membantu kasusku, Dr.
Dr. Watson meminta bantuan melalui koneksinya baik di kantor kepolisian dan pengadilan untuk mengumpulkan informasi yang diminta oleh Holmes, dan memperoleh data seperti ini:
dataX = [
10, 15, 16, 19, 20, 28, 30, 13, 16, 8, 9, 11, 10, 24, 25, 16, 19,
1, 2, 27, 26, 7, 9, 29, 7, 29, 7, 22, 23, 18, 19, 3, 5, 15, 18,
21, 21, 13, 12, 20, 24, 7, 7, 11, 13, 13, 16, 3, 3, 5
]
dataY = [
3, 5, 5, 8, 7, 10, 10, 5, 4, 2, 2, 5, 3, 7, 10, 6, 6, 2, 1, 9,
9, 3, 2, 10, 4, 10, 4, 7, 8, 6, 7, 1, 2, 6, 7, 8, 7, 4, 5, 8,
9, 3, 3, 3, 4, 5, 6, 1, 3, 3
]
W: Ini datanya Holmes,
dataX
adalah deret lama tahun hukuman penjara masing-masing kriminal,dataY
adalah deret jumlah koneksi yang dimiliki oleh setiap kriminal tersebut terhadap tokoh-tokoh besar yang ada di London. Setiap posisi dalam deret mewakili seorang kriminal, yang artinyadataX[0]
sepasang dengandataY[0]
,dataX[1]
sepasang dengandataY[1]
, begitu pula seterusnya.H: Terimakasih Watson!
Holmes membuka website https://chart-studio.plotly.com/create/#/ dan menyalin data yang telah diserahkan oleh Dr. Watson ke tabel seperti pada gambar berikut:
Lalu holmes menjalankan kode Statistik JS yang dipelajari dari buku ini dengan perintah sebagai berikut:
descPack(dataX)
descPack(dataY)
regressPack(dataX, dataY)
Dan memperoleh output sebagai berikut:
{ // hasil descPack(dataX)
"basic": {
"length": 50,
"min": 1,
"max": 30,
"range": 29
},
"central": {
"mean": 14.9,
"mode": 7,
"median": 15,
"geometric": 12.080937148786763,
"harmonic": 8.322643054626932
},
"distribution": {
"frequency": [
{"bot": 1, "top": 4, "fre": 5},
{"bot": 5, "top": 8, "fre": 8},
{"bot": 9, "top": 12, "fre": 7},
{"bot": 13, "top": 16, "fre": 10},
{"bot": 17, "top": 20, "fre": 7},
{"bot": 21, "top": 24, "fre": 6},
{"bot": 25, "top": 28, "fre": 4}
],
"relative": [
{"bot": 1, "top": 4, "fre": 5, "rel": 0.106},
{"bot": 5, "top": 8, "fre": 8, "rel": 0.170},
{"bot": 9, "top": 12, "fre": 7, "rel": 0.148},
{"bot": 13, "top": 16, "fre": 10, "rel": 0.212},
{"bot": 17, "top": 20, "fre": 7, "rel": 0.148},
{"bot": 21, "top": 24, "fre": 6, "rel": 0.127},
{"bot": 25, "top": 28, "fre": 4, "rel": 0.085}
],
"cumulative": [
{"bot": 1, "top": 4, "fre": 5, "cumA": 5, "cumD": 47},
{"bot": 5, "top": 8, "fre": 8, "cumA": 13, "cumD": 42},
{"bot": 9, "top": 12, "fre": 7, "cumA": 20, "cumD": 34},
{"bot": 13, "top": 16, "fre": 10, "cumA": 30, "cumD": 27},
{"bot": 17, "top": 20, "fre": 7, "cumA": 37, "cumD": 17},
{"bot": 21, "top": 24, "fre": 6, "cumA": 43, "cumD": 10},
{"bot": 25, "top": 28, "fre": 4, "cumA": 47, "cumD": 4}
]
},
"dispersion": {
"deviation_mean": 6.743999999999996,
"variance": 63.250000000000036,
"standard_deviation": 7.952986860293436
},
"skewness": {
"mode": 0.9933374892698514,
"median": -0.037721676807715744,
"moment": 0.1385815962354285,
"bowley": -0.09433962264150944
},
"kurtosis": {
"moment": 2.0173741317627187,
"percentile": 0.279535864978903
},
"z_scores": [
-0.616, 0.012, 0.138, 0.515, 0.641, 1.647, 1.898, -0.238,
0.138, -0.867, -0.741, -0.490, -0.616, 1.144, 1.269,
0.13831281496162484, 0.515, -1.747, -1.622, 1.521, 1.395,
-0.993, -0.741, 1.772, -0.993, 1.772, -0.993, 0.892, 1.018,
0.389, 0.515, -1.496, -1.244, 0.012, 0.389, 0.767, 0.767,
-0.238, -0.364, 0.641, 1.144, -0.993, -0.993, -0.490,
-0.238, -0.238, 0.138, -1.496, -1.496, -1.244
],
"trend": {
// khusus kasus ini analisis trend tidak perlu
}
} // hasil descPack(dataY) formatnya sama
{ // hasil regressPack(dataX, dataY)
"corelation": {
"pearson": 0.955618320325107,
"spearman": 0.9430492196878751
},
"regression": {
"SEE": 0.808517568616494,
"linear": {
"a": 0.5458276679841897,
"b": 0.323098814229249
},
"exponential": {
"a": 0.730726748688541,
"b": 0.735142754548469
},
"parabolic": {
"a": 9,
"b": -1,
"c": 0
}
}
}
H: Luar biasa Watson, aku mendapatkan apa yang aku butuhkan! Lihat nilai korelasi antara variabel lama tahun hukuman kriminal para kelas kakap ini dan jumlah koneksinya dengan nama-nama besar di London. Perhatikan pula kecilnya nilai SEE-nya Watson, angka itu menunjukkan bahwa jika kita menggunakan garis regresi untuk menganalisa kedua variabel ini maka kita bisa memperkirakan seberapa banyak koneksi jahat seorang kriminal dilihat dari lama tahun hukumannya, dan “mungkin” kita bisa memperkirakan lama tahun hukuman seorang kriminal yang belum tertangkap dengan mengetahui seberapa banyak koneksi jaringan jahatnya.
Holmes pun lanjut mengumpulkan daftar nama tokoh besar yang berhasil di kumpulkan Watson selama mewawancarai setiap perilaku kriminal tersebut.
W: Ada apa Holmes? Kau tampak pucat! Apa yang kau temukan?
H: Jangan ikuti aku Watson, aku akan urus “dia” sendiri.
W: Katakan siapa yang kau temukan Holmes??
Holmes memasang jaket detektifnya, membakar tembakau pipanya, dan mengarah ke pintu dan meningalkan Dr. Watson, dan menjawab:
H: Prof. Moriarty
THE END
Sudah jelas bahwa kasus diatas adalah kasus rekayasa yang penulis buatkan untuk mempermudah pembaca memahami bagaimana cara menggunakan fungsi descPack
dan regressPack
yang sudah kita kembangkan (Joke: sambil mengasah kemampuan menulis novel). Tentunya kedua fungsi yang kita kembangkan dapat bermanfaat secara umum bagi mayoritas penelitian bivariat atau multi-variat yang Anda hadapi. Jika Anda seorang mahasiswa, bisa jadi Anda akan meneliti variabel yang terkait dengan faktor-faktor ekonomi, perilaku manusia, penelitian tumbuhan/hewan, atau fenomena lainnya yang bisa Anda ukur secara kuantitatif setiap variabelnya.
Exercise!
Untuk membuktikan bahwa Anda paham isi bab ini, coba Anda karang pula sebuah kasus/fenomena dengan keterlibatan 2 variabel (bebas, boleh apapun). Coba Anda gunakan kedua fungsi tersebut untuk menjelaskan hasil analisis deskriptif dan regresi selengkap-lengkapnya dan hidangkan dalam bentuk presentasi di depan kelas atau posting di blog Anda.