25 minute read


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):

  1. 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.
  2. Kita bisa melakukan uji beda dua proporsi langsung di R.
  3. Kita bisa langsung membuat grafik dari hasil tabulasi dengan library(ggplot2) dan membuat report-nya dengan R Markdown.
  4. 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:

  1. dplyr untuk melakukan data carpentry di R.
  2. expss sebagai pengganti SPSS di R.
  3. 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:

  1. kota asal responden.
  2. gender.
  3. usia.
  4. pernah-kah responden membeli sayur dan daging dalam sebulan terakhir?
  5. tempat responden pernah membeli sayur dan daging dalam sebulan terakhir.
  6. 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") 
20 Data Teratas
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:

  1. Tabulasi dimulai dengan memanggil dataset.
  2. Memanggil variabel yang hendak dihitung dengan tab_cells(nama_variabel).
  3. Jika hendak melakukan cross tabulasi, tambahkan perintah tab_cols(nama_variabel) sesuai dengan variabel yang hendak disilangkan.
  4. Jika hendak melakukan drill down pada baris, tambahkan perintah tab_rows(nama_variabel) sesuai dengan variabel yang hendak disilangkan.
  5. Panggil perintah untuk menghitung persentase atau real number. Untuk persentase, bisa menggunakan perintah tab_stat_cpct(). Untuk real number, bisa menggunakan perintah tab_stat_cases().
  6. Jika hendak melakukan uji beda dua proporsi pada cross tabulasi, tambahkan tab_last_sig_cpct() atau tab_last_sig_cases().
  7. 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.