TUTORIAL: Alternatif Pengganti SPSS Menggunakan R
Siapa sih yang gak kenal dengan SPSS? Software yang paling banyak digunakan untuk menyelesaikan masalah statistik.
Mulai dari membuat analisa deskriptif yang sederhana sampai membuat
model machine learning yang kompleks bisa dilakukan di SPSS. Dulu
ketika masih menjadi mahasiswa tingkat akhir, saya pernah menjadi
asisten lab bio statistik
yang memberikan tutor SPSS. Namun
demikian, bagi mahasiswa Matematika sendiri, kami tidak pernah diberikan
materi lab SPSS sana sekali.
SPSS membuat kamu malas.
Begitu selentingan yang saya dengar.
Kalau begitu software apa yang dipelajari oleh mahasiswa Matematika untuk menyelesaikan masalah statistik terkait data?
Microsoft Excel!
Saat itu SPSS yang digunakan adalah versi 13
student edition
resmi.
Kisah SPSS saya berlanjut saat saya mulai bekerja di bidang market
research pada tahun 2008. Hampir semua orang tim data processing di
market research agency tempat saya bekerja menggunakan SPSS. Waktu
itu mereka menggunakan versi 17
. Usut punya usut ternyata versi yang
digunakan itu bukan berasal dari jalur resmi.
Istilahnya versi crack-an yang didapatkan dari forum berbagi-file
populer pada zamannya.
Kisah terus berlanjut sampai saya berlabuh di perusahaan tempat saya
bekerja saat ini. Ternyata __@nutrifood__ memiliki license resmi
SPSS versi 13
yang digunakan oleh semua member tim market
research. Namun versi tersebut sudah cukup usang untuk melakukan
beberapa analisa dan mengolah data survey yang semakin banyak. Apalagi
semenjak IBM membeli kepemilikan SPSS, memakai versi bajakan dari
software ini bukanlah pilihan yang bijak.
Setelah mencari informasi terkait harga resminya, ternyata harganya lumayan juga yah.
Tipe license SPSS yang dibutuhkan untuk mengolah data market riset
adalah yang standard
karena sudah bisa mengakomodir multiple response
answer.
Perbedaan Data Survey dengan Data Lainnya
Apa sih perbedaan antara data survey dengan data lain? (Misalkan data transaksi atau data scrape dari social media).
Disadari atau tidak, dalam survey, responden bisa ditanyakan suatu pertanyaan yang bisa lebih dari satu jawaban. Market researcher menyebutnya dengan istilah multiple answer question. Jawaban responden akan disimpan menjadi multiple column.
Prinsipnya adalah satu responden disimpan dalam satu baris data.
Berbeda dengan data transaksi atau data social media yang memungkinkan dibentuk menjadi tabular (satu response bisa disimpan as multiple columns).
Maka dari itu, tools pengolahan data market riset harus bisa mengakomodir hal ini.
Masalah dengan SPSS
Seperti yang telah saya sampaikan sebelumnya, faktor harga menjadi salah satu kendala terbesar bagi (hampir semua) perusahaan untuk bisa menggunakan SPSS secara legal. Banyak di antara perusahaan malah tetap memilih untuk menggunakan software bajakan. Menurut beberapa sumber, IBM sedang galak-galaknya melakukan sidak ke perusahaan-perusahaan untuk menangkap perusahaan yang nakal.
Setau saya memang ada konsekuensi hukum bagi yang melakukan hal ini.
Selain itu, memakai software bajakan bisa jadi menghilangkan keberkahan pekerjaan kita lho.
Alternatif SPSS
Kita sebenarnya bisa memakai software olah data selain SPSS yang
bersifat open source alias gratis. Salah satunya dengan R melalui
library(expss)
.
Berikut ini adalah beberapa kelebihan mengolah data survey dengan
library(expss)
:
- Kita tidak perlu repot-repot mengubah tipe data menjadi numeric with labels. Pada SPSS, kita tahu ada dua tab, yakni variabel view dan data view. Biasanya salah satu preparation yang harus dilakukan di SPSS adalah mengubah data text hasil entry kuesioner menjadi numeric lalu diberikan value label. Hasil entry kuesioner yang sudah berupa text bisa langsung kita pakai. Biasanya ini terjadi saat kita menggunakan platform online survey yang memberikan data as it is.
- Kita bisa melakukan
uji beda dua proporsi
langsung di R. - Kita bisa langsung membuat grafik dari hasil tabulasi dengan
library(ggplot2)
dan membuat report-nya dengan R Markdown. - R bisa membaca banyak format data. Baik
.sav
SPSS dan.csv
,.xls
,.xlsx
dari MS. Excel.
Bagaimana caranya? Saya mulai tutorialnya yah.
Bahan-Bahan yang Dibutuhkan
Oke, untuk melakukannya kita memerlukan R dan atau R Studio. Kemudian kita harus menginstall beberapa libraries seperti:
dplyr
untuk melakukan data carpentry di R.expss
sebagai pengganti SPSS di R.openxlsx
untuk export tabulasi ke format.xlsx
.
Cara installnya adalah:
# install.packages("dplyr")
# install.packages("expss")
# install.packages("openxlsx")
Selepas instalasi selesai, mari kita panggil kedua libraries tersebut:
library(dplyr)
library(expss)
library(openxlsx)
Sekarang saya akan menggunakan contoh data hasil survey mengenai persepsi dan habit responden. Pertanyaan dalam survey tersebut antara lain:
kota
asal responden.gender
.usia
.pernah
-kah responden membeli sayur dan daging dalam sebulan terakhir?tempat
responden pernah membeli sayur dan daging dalam sebulan terakhir.rating
kesukaan terhadap minuman soda.
Survey dilakukan kepada 1.000
orang responden di 5 kota (Jakarta,
Bandung, Tasikmalaya, Garut, dan Sukabumi). Sebagai latihan bersama,
data bisa diunduh di
sini.
Berikut adalah datanya:
data = read.csv("data survey.csv")
id | kota | gender | usia | pernah | tempat\_1 | tempat\_2 | tempat\_3 | tempat\_4 | tempat\_5 | rating |
---|---|---|---|---|---|---|---|---|---|---|
1 | Bandung | wanita | 35 | ya | pasar | warung | NA | NA | NA | sangat tidak suka |
2 | Jakarta | wanita | 32 | tidak | NA | NA | NA | NA | NA | tidak suka |
3 | Jakarta | pria | 27 | tidak | NA | NA | NA | NA | NA | suka |
4 | Bandung | pria | 39 | ya | online | supermarket | warung | minimarket | pasar | tidak suka |
5 | Bandung | pria | 30 | tidak | NA | NA | NA | NA | NA | sangat suka |
6 | Bandung | wanita | 31 | ya | warung | minimarket | supermarket | pasar | NA | sangat suka |
7 | Tasikmalaya | pria | 38 | ya | minimarket | online | supermarket | pasar | NA | suka |
8 | Sukabumi | wanita | 30 | ya | supermarket | warung | online | NA | NA | sangat tidak suka |
9 | Garut | wanita | 39 | tidak | NA | NA | NA | NA | NA | sangat tidak suka |
10 | Bandung | wanita | 26 | tidak | NA | NA | NA | NA | NA | sangat suka |
11 | Jakarta | wanita | 33 | ya | online | supermarket | NA | NA | NA | sangat tidak suka |
12 | Tasikmalaya | wanita | 30 | ya | supermarket | warung | online | minimarket | NA | suka |
13 | Sukabumi | wanita | 38 | tidak | NA | NA | NA | NA | NA | sangat tidak suka |
14 | Tasikmalaya | wanita | 33 | tidak | NA | NA | NA | NA | NA | suka |
15 | Garut | pria | 35 | ya | pasar | supermarket | online | minimarket | NA | sangat tidak suka |
16 | Bandung | wanita | 34 | ya | supermarket | online | pasar | NA | NA | suka |
17 | Tasikmalaya | wanita | 25 | tidak | NA | NA | NA | NA | NA | suka |
18 | Garut | pria | 34 | tidak | NA | NA | NA | NA | NA | suka |
19 | Tasikmalaya | wanita | 27 | ya | online | NA | NA | NA | NA | suka |
20 | Sukabumi | pria | 34 | ya | pasar | warung | online | NA | NA | suka |
Prinsip dasar library(expss)
Skrip pada library(expss)
selalu menggunakan pipe pada tidyverse
(%>%
).
Berikut adalah alur pengerjaannya:
- Tabulasi dimulai dengan memanggil dataset.
- Memanggil variabel yang hendak dihitung dengan
tab_cells(nama_variabel)
. - Jika hendak melakukan cross tabulasi, tambahkan perintah
tab_cols(nama_variabel)
sesuai dengan variabel yang hendak disilangkan. - Jika hendak melakukan drill down pada baris, tambahkan perintah
tab_rows(nama_variabel)
sesuai dengan variabel yang hendak disilangkan. - Panggil perintah untuk menghitung persentase atau real number.
Untuk persentase, bisa menggunakan perintah
tab_stat_cpct()
. Untuk real number, bisa menggunakan perintahtab_stat_cases()
. - Jika hendak melakukan uji beda dua proporsi pada cross tabulasi,
tambahkan tab_last_sig_cpct()
atautab_last_sig_cases()
. - Akhiri dengan
tab_pivot()
.
Yuk, kita praktek langsung!
Frekuensi Tabulasi
Mari kita mulai dengan menghitung proporsi kota
dan gender
dari
survey ini:
data %>%
tab_cells(kota) %>%
tab_stat_cpct() %>%
tab_pivot() %>%
set_caption("Tabel 1: Kota Asal Responden")
Tabel 1: Kota Asal Responden | |
\#Total | |
---|---|
kota | |
Bandung | 19.1 |
Garut | 18.6 |
Jakarta | 22.4 |
Sukabumi | 20.4 |
Tasikmalaya | 19.5 |
\#Total cases | 1000 |
data %>%
tab_cells(gender) %>%
tab_stat_cpct() %>%
tab_pivot() %>%
set_caption("Tabel 2: Gender Responden")
Tabel 2: Gender Responden | |
\#Total | |
---|---|
gender | |
pria | 29.3 |
wanita | 70.7 |
\#Total cases | 1000 |
Sekarang saya akan menghitung proporsi dari rating dengan menggunakan real number:
data %>%
tab_cells(rating) %>%
tab_stat_cases() %>%
tab_pivot() %>%
set_caption("Tabel 3: Rating Kesukaan Responden (real number)")
Tabel 3: Rating Kesukaan Responden (real number) | |
\#Total | |
---|---|
rating | |
sangat tidak suka | 257 |
tidak suka | 108 |
suka | 499 |
sangat suka | 136 |
\#Total cases | 1000 |
Cross Tabulasi
Berikutnya saya akan membuat tabel cross tabulasi rating
vs kota
sekaligus menghitung signifikansinya:
data %>%
tab_cells(rating) %>%
tab_cols(total(),kota) %>%
tab_stat_cpct() %>%
tab_last_sig_cpct() %>%
tab_pivot() %>%
set_caption("Table 4. Cross tabulasi Pernah dan Kota")
Table 4. Cross tabulasi Pernah dan Kota | |||||||||||
\#Total | kota | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Bandung | Garut | Jakarta | Sukabumi | Tasikmalaya | |||||||
A | B | C | D | E | |||||||
rating | |||||||||||
sangat tidak suka | 25.7 | 26.7 | 27.4 | 21.9 | 26.5 | 26.7 | |||||
tidak suka | 10.8 | 13.1 | 8.6 | 11.6 | 12.3 | 8.2 | |||||
suka | 49.9 | 44.0 | 51.1 | 55.4 A D | 45.6 | 52.8 | |||||
sangat suka | 13.6 | 16.2 | 12.9 | 11.2 | 15.7 | 12.3 | |||||
\#Total cases | 1000 | 191 | 186 | 224 | 204 | 195 |
Kita bisa melihat bahwa suka
di Jakarta signifikan lebih tinggi
dibandingkan Bandung dan Sukabumi.
Sekarang saya akan membuat cross tabulasi rata-rata usia per kota:
data %>%
tab_cells(usia) %>%
tab_cols(total(),kota) %>%
tab_stat_mean_sd_n() %>%
tab_last_sig_means() %>%
tab_pivot() %>%
set_caption("Table 5. Rata-rata Usia per Kota")
Table 5. Rata-rata Usia per Kota | |||||||||||
\#Total | kota | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Bandung | Garut | Jakarta | Sukabumi | Tasikmalaya | |||||||
A | B | C | D | E | |||||||
usia | |||||||||||
Mean | 32.1 | 31.5 | 31.9 | 31.8 | 32.5 A | 32.7 A C | |||||
Std. dev. | 4.5 | 4.6 | 4.6 | 4.5 | 4.6 | 4.3 | |||||
Unw. valid N | 1000.0 | 191.0 | 186.0 | 224.0 | 204.0 | 195.0 |
Ternyata rata-rata usia responden di Tasikmalaya signifikan lebih tua dibandingkan Bandung dan Jakarta. Sedangkan usia responden di Sukabumi signifikan lebih tua dibandingkan Bandung.
Multiple Response
Sekarang kita akan menghitung frekuensi tabulasi untuk pertanyaan
multiple response. Pada kasus ini adalah variabel tempat_1
sampai
tempat_5
.
data %>%
tab_cells(mrset(tempat_1 %to% tempat_2)) %>%
tab_stat_cpct() %>%
tab_pivot()%>%
set_caption("Table 6. Tempat Berbelanja")
Table 6. Tempat Berbelanja | |
\#Total | |
---|---|
minimarket | 36.3 |
online | 45.1 |
pasar | 39.7 |
supermarket | 37.3 |
warung | 37.3 |
\#Total cases | 375 |
Kita juga bisa membuat cross tabulasi untuk pertanyaan multiple response berikut:
data %>%
tab_cells(mrset(tempat_1 %to% tempat_2)) %>%
tab_cols(total(),kota) %>%
tab_rows(gender) %>%
tab_stat_cpct() %>%
tab_last_sig_cpct() %>%
tab_pivot()%>%
set_caption("Table 7. Detail Tempat Berbelanja")
Table 7. Detail Tempat Berbelanja | |||||||||||||
\#Total | kota | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Bandung | Garut | Jakarta | Sukabumi | Tasikmalaya | |||||||||
A | B | C | D | E | |||||||||
gender | |||||||||||||
pria | minimarket | 43.6 | 48.0 | 40.0 | 47.6 | 42.9 | 38.9 | ||||||
online | 41.8 | 48.0 B | 20.0 | 47.6 B | 66.7 B E | 27.8 | |||||||
pasar | 39.1 | 28.0 | 52.0 | 42.9 | 23.8 | 50.0 | |||||||
supermarket | 41.8 | 44.0 | 44.0 | 38.1 | 38.1 | 44.4 | |||||||
warung | 29.1 | 20.0 | 40.0 | 19.0 | 28.6 | 38.9 | |||||||
\#Total cases | 110 | 25 | 25 | 21 | 21 | 18 | |||||||
wanita | minimarket | 33.2 | 26.4 | 37.5 | 33.3 | 31.6 | 38.0 | ||||||
online | 46.4 | 56.6 | 41.7 | 40.4 | 47.4 | 46.0 | |||||||
pasar | 40.0 | 43.4 | 47.9 | 36.8 | 40.4 | 32.0 | |||||||
supermarket | 35.5 | 28.3 | 43.8 | 28.1 | 35.1 | 44.0 | |||||||
warung | 40.8 | 43.4 | 25.0 | 57.9 B E | 42.1 | 32.0 | |||||||
\#Total cases | 265 | 53 | 48 | 57 | 57 | 50 |
Tentunya masih banyak lagi fitur dan function yang bisa dilakukan. Tapi segitu saja harusnya sudah cukup ya.
Exporting to Excel
Sekarang saya akan tunjukkan cara agar tabel-tabel di atas dimasukkan ke
satu file Excel .xlsx
.
Buat dulu object tabelnya
tab1 =
data %>%
tab_cells(kota) %>%
tab_stat_cpct() %>%
tab_pivot() %>%
set_caption("Tabel 1: Kota Asal Responden")
tab2 =
data %>%
tab_cells(gender) %>%
tab_stat_cpct() %>%
tab_pivot() %>%
set_caption("Tabel 2: Gender Responden")
tab3 =
data %>%
tab_cells(rating) %>%
tab_stat_cases() %>%
tab_pivot() %>%
set_caption("Tabel 3: Rating Kesukaan Responden (real number)")
tab4 =
data %>%
tab_cells(rating) %>%
tab_cols(total(),kota) %>%
tab_stat_cpct() %>%
tab_last_sig_cpct() %>%
tab_pivot() %>%
set_caption("Table 4. Cross tabulasi Pernah dan Kota")
tab5 =
data %>%
tab_cells(usia) %>%
tab_cols(total(),kota) %>%
tab_stat_mean_sd_n() %>%
tab_last_sig_means() %>%
tab_pivot() %>%
set_caption("Table 5. Rata-rata Usia per Kota")
tab6 =
data %>%
tab_cells(mrset(tempat_1 %to% tempat_2)) %>%
tab_stat_cpct() %>%
tab_pivot()%>%
set_caption("Table 6. Tempat Berbelanja")
tab7 =
data %>%
tab_cells(mrset(tempat_1 %to% tempat_2)) %>%
tab_cols(total(),kota) %>%
tab_rows(gender) %>%
tab_stat_cpct() %>%
tab_last_sig_cpct() %>%
tab_pivot()%>%
set_caption("Table 7. Detail Tempat Berbelanja")
Buat workbook
wb = createWorkbook()
Buat worksheets lalu save ke Excel
tabel = list(tab1,tab2,tab3,tab4,tab5,tab6,tab7)
for(i in 1:7){
nama_sheet = paste0("tabel",i)
sh = addWorksheet(wb, nama_sheet)
xl_write(tabel[[i]], wb, sh)
}
saveWorkbook(wb, "tabulasi.xlsx", overwrite = TRUE)
File hasilnya bisa di-download di sini.
if you find this article helpful, support this blog by clicking the ads.