1 Tujuan Praktikum

Pada praktikum sebelumnya, kita sudah belajar mengenali satu peubah melalui ukuran pemusatan, penyebaran, dan berbagai bentuk visualisasi. Sekarang kita lanjut satu langkah lagi.

Dalam analisis data, kita hampir tidak pernah berhenti pada pertanyaan “bagaimana bentuk satu peubah?”. Kita biasanya ingin tahu:

Apakah satu peubah memiliki hubungan dengan peubah lainnya?

Contohnya sederhana. Apakah semakin besar total tagihan restoran, semakin besar pula tip yang diberikan? Apakah jumlah tagihan berbeda menurut hari kunjungan? Apakah pola transaksi berbeda antara kelompok perokok dan non-perokok?

Nah, pertanyaan-pertanyaan seperti itulah yang akan kita jawab pada praktikum hari ini.

Setelah mengikuti praktikum ini, mahasiswa diharapkan mampu:

  1. mengenali jenis hubungan berdasarkan tipe peubah yang dibandingkan;
  2. memilih visualisasi yang sesuai untuk dua atau lebih peubah;
  3. membaca pola hubungan dari visualisasi;
  4. mengukur arah dan kekuatan hubungan menggunakan korelasi; dan
  5. menjelaskan hasil eksplorasi dengan bahasa yang sederhana tetapi tetap tepat secara statistik.

💡 Ide utama hari ini: sebelum memilih grafik atau ukuran hubungan, tanyakan dulu: “Tipe kedua peubah ini apa?”


2 Persiapan Data

2.1 Dataset yang digunakan

Sepanjang praktikum kita menggunakan dataset tips. Dataset ini berisi informasi transaksi restoran dan cocok digunakan karena memiliki kombinasi peubah numerik dan kategorik.

Kita mulai dengan menyiapkan package yang diperlukan.

# Jalankan install.packages() hanya jika package belum pernah diinstal
# install.packages(c("reshape2", "ggplot2", "dplyr", "GGally",
#                    "corrplot", "vcd", "hexbin", "tidytext",
#                    "widyr", "tidyr"))

library(reshape2)
library(ggplot2)
library(dplyr)
library(GGally)
library(corrplot)
library(vcd)
library(hexbin)

Selanjutnya, panggil dataset dan lihat strukturnya.

data(tips)

str(tips)
## 'data.frame':    244 obs. of  7 variables:
##  $ total_bill: num  17 10.3 21 23.7 24.6 ...
##  $ tip       : num  1.01 1.66 3.5 3.31 3.61 4.71 2 3.12 1.96 3.23 ...
##  $ sex       : Factor w/ 2 levels "Female","Male": 1 2 2 2 1 2 2 2 2 2 ...
##  $ smoker    : Factor w/ 2 levels "No","Yes": 1 1 1 1 1 1 1 1 1 1 ...
##  $ day       : Factor w/ 4 levels "Fri","Sat","Sun",..: 3 3 3 3 3 3 3 3 3 3 ...
##  $ time      : Factor w/ 2 levels "Dinner","Lunch": 1 1 1 1 1 1 1 1 1 1 ...
##  $ size      : int  2 3 3 2 4 4 2 4 2 2 ...
head(tips)
##   total_bill  tip    sex smoker day   time size
## 1      16.99 1.01 Female     No Sun Dinner    2
## 2      10.34 1.66   Male     No Sun Dinner    3
## 3      21.01 3.50   Male     No Sun Dinner    3
## 4      23.68 3.31   Male     No Sun Dinner    2
## 5      24.59 3.61 Female     No Sun Dinner    4
## 6      25.29 4.71   Male     No Sun Dinner    4

Dataset tips memiliki 244 observasi dan 7 peubah.

Peubah Tipe Keterangan
total_bill Numerik Total tagihan restoran
tip Numerik Tip yang diberikan
sex Kategorik Jenis kelamin pembayar
smoker Kategorik Status perokok
day Kategorik Hari kunjungan
time Kategorik Waktu makan
size Numerik Jumlah orang dalam grup

Sebelum lanjut, perhatikan bahwa kita memiliki tiga kemungkinan dasar:

  • numerik vs numerik;
  • numerik vs kategorik; dan
  • kategorik vs kategorik.

Masing-masing membutuhkan cara visualisasi yang berbeda.


3 Bagian 1 — Eksplorasi Hubungan Antar Peubah Secara Visual

3.1 Numeric vs Numeric

Kita mulai dari dua peubah yang sama-sama numerik, yaitu total_bill dan tip.

Untuk pasangan numerik–numerik, yang ingin kita lihat adalah:

  • arah hubungan: positif atau negatif;
  • kekuatan hubungan: lemah atau kuat;
  • bentuk hubungan: linear atau non-linear; dan
  • sebaran titik serta kemungkinan adanya outlier.

3.1.1 Scatter Plot

Scatter plot adalah visualisasi pertama yang paling mudah digunakan untuk melihat hubungan dua peubah numerik.

ggplot(tips, aes(x = total_bill, y = tip)) +
  geom_point(alpha = 0.65, color = "#C85F91") +
  labs(
    title = "Hubungan Total Tagihan dan Tip",
    subtitle = "Setiap titik mewakili satu transaksi",
    x = "Total Tagihan (USD)",
    y = "Tip (USD)"
  ) +
  theme_minimal()

Cara membacanya: lihat arah kumpulan titik. Jika titik-titik cenderung bergerak dari kiri bawah ke kanan atas, hubungan yang terlihat adalah positif.

Interpretasi: pada data ini, semakin besar total_bill, tip juga cenderung semakin besar. Namun, titik-titik tidak tepat berada pada satu garis. Artinya, total tagihan bukan satu-satunya hal yang berkaitan dengan besarnya tip.

3.1.2 Scatter Plot + Garis Tren

Supaya arah pola lebih mudah terlihat, kita dapat menambahkan garis tren.

ggplot(tips, aes(x = total_bill, y = tip)) +
  geom_point(alpha = 0.55, color = "#C85F91") +
  geom_smooth(method = "lm", se = TRUE, color = "#294B67") +
  labs(
    title = "Scatter Plot dengan Garis Tren",
    x = "Total Tagihan (USD)",
    y = "Tip (USD)"
  ) +
  theme_minimal()

Garis tersebut membantu kita melihat kecenderungan rata-rata hubungan. Garis yang naik memperkuat dugaan awal bahwa hubungan keduanya positif.

3.1.3 Hexbin Plot

Kalau observasi sangat banyak, scatter plot dapat menjadi terlalu padat karena titik saling menutupi. Salah satu alternatifnya adalah hexbin plot. Hexbin plot adalah visualisasi yang digunakan untuk melihat kepadatan hubungan antara dua peubah numerik dengan mengelompokkan observasi ke dalam area berbentuk heksagon (segi enam).

Setiap heksagon menunjukkan kumpulan observasi yang berada pada area yang sama. Semakin banyak observasi di dalam suatu heksagon, semakin tinggi kepadatan data pada area tersebut.

Hexbin plot biasanya digunakan ketika jumlah observasi cukup banyak sehingga titik-titik pada scatter plot saling bertumpuk dan sulit dibaca.

Sekarang kita gunakan hexbin plot untuk melihat kepadatan hubungan antara total_bill dan tip.

ggplot(tips, aes(x = total_bill, y = tip)) +
  geom_hex(bins = 20) +
  scale_fill_viridis_c() +
  labs(
    title = "Kepadatan Total Tagihan dan Tip",
    x = "Total Tagihan (USD)",
    y = "Tip (USD)",
    fill = "Jumlah\nObservasi"
  ) +
  theme_minimal()

Interpretasi: Area berwarna kuning hingga hijau menunjukkan jumlah observasi yang lebih banyak. Pada grafik terlihat bahwa sebagian besar transaksi terkonsentrasi pada total_bill sekitar 10–20 USD dengan tip sekitar 1,5–3 USD. Sementara itu, kombinasi total_bill dan tip yang lebih tinggi relatif lebih jarang ditemukan.

3.1.4 Contour Plot

Cara lain melihat kepadatan adalah menggunakan contour plot. Contour plot adalah visualisasi yang digunakan untuk melihat pola kepadatan dari dua peubah numerik. Visualisasi ini menggunakan garis-garis kontur untuk menunjukkan area yang memiliki tingkat kepadatan data yang sama.

Sederhananya, contour plot mirip seperti garis ketinggian pada peta. Semakin rapat garis kontur pada suatu area, semakin banyak observasi yang terkumpul di area tersebut.

Contour plot berguna ketika kita ingin melihat di mana data paling banyak terkonsentrasi tanpa hanya mengandalkan titik-titik pada scatter plot.

Sekarang kita coba membuat contour plot untuk melihat pola kepadatan antara total_bill dan tip.

ggplot(tips, aes(x = total_bill, y = tip)) +
  geom_point(alpha = 0.25, color = "#C85F91") +
  geom_density_2d(color = "#294B67") +
  labs(
    title = "Contour Plot Total Tagihan dan Tip",
    x = "Total Tagihan (USD)",
    y = "Tip (USD)"
  ) +
  theme_minimal()

📝 Latihan 1: buat scatter plot antara size dan total_bill. Bandingkan polanya dengan hubungan total_bill dan tip. Mana yang menurutmu terlihat lebih jelas?


3.2 Numeric vs Categoric

Sekarang salah satu peubah berupa angka dan satu lagi berupa kategori.

Pertanyaannya berubah. Kita bukan lagi mencari arah “naik atau turun”, tetapi ingin membandingkan distribusi peubah numerik antar kelompok.

Kita gunakan total_bill sebagai peubah numerik dan day sebagai peubah kategorik.

3.2.1 Boxplot

Boxplot adalah visualisasi yang digunakan untuk melihat dan membandingkan distribusi data numerik pada beberapa kelompok atau kategori.

Melalui boxplot, kita dapat melihat beberapa informasi penting seperti median, rentang tengah data (IQR), penyebaran data, serta kemungkinan adanya outlier.

Pada boxplot, garis di dalam kotak menunjukkan median, kotak menunjukkan 50% bagian tengah data, sedangkan titik yang berada jauh di luar whisker menunjukkan kemungkinan outlier.

Pada contoh berikut, kita akan membandingkan distribusi total_bill pada setiap day.

ggplot(tips, aes(x = day, y = total_bill, fill = day)) +
  geom_boxplot(alpha = 0.8) +
  labs(
    title = "Sebaran Total Tagihan Menurut Hari",
    x = "Hari",
    y = "Total Tagihan (USD)"
  ) +
  theme_minimal() +
  theme(legend.position = "none")

Interpretasi: Dari boxplot terlihat bahwa median total_bill berbeda antar hari. Sunday (Sun) memiliki median total tagihan yang relatif paling tinggi, diikuti oleh Saturday (Sat), sedangkan Friday (Fri) dan Thursday (Thur) memiliki median yang lebih rendah.

Penyebaran total_bill pada Saturday dan Sunday juga terlihat cukup lebar. Selain itu, terdapat beberapa titik di luar whisker, terutama pada Saturday, Sunday, dan Thursday. Titik-titik tersebut menunjukkan adanya transaksi dengan total tagihan yang relatif jauh lebih tinggi dibandingkan sebagian besar transaksi pada hari yang sama.

Secara keseluruhan, boxplot menunjukkan bahwa distribusi total tagihan tidak sama persis pada setiap hari, baik dari sisi nilai tengah, penyebaran, maupun keberadaan nilai ekstrem.

3.2.2 Violin Plot

Violin plot adalah visualisasi yang digunakan untuk melihat bentuk dan kepadatan distribusi data numerik pada beberapa kelompok atau kategori.

Bentuknya menyerupai biola, di mana bagian yang semakin lebar menunjukkan semakin banyak data yang terkonsentrasi pada rentang nilai tersebut, sedangkan bagian yang semakin sempit menunjukkan data yang relatif lebih sedikit.

Violin plot dapat dikombinasikan dengan boxplot sehingga kita dapat melihat bentuk distribusi sekaligus median dan penyebaran data.

Pada contoh berikut, kita akan membandingkan distribusi total_bill pada setiap day.

ggplot(tips, aes(x = day, y = total_bill, fill = day)) +
  geom_violin(trim = FALSE, alpha = 0.75) +
  geom_boxplot(width = 0.10, fill = "white") +
  labs(
    title = "Distribusi Total Tagihan Menurut Hari",
    x = "Hari",
    y = "Total Tagihan (USD)"
  ) +
  theme_minimal() +
  theme(legend.position = "none")

Interpretasi: Bagian violin yang lebih lebar menunjukkan rentang total_bill dengan kepadatan data yang lebih tinggi. Dari grafik terlihat bahwa pada keempat hari, sebagian besar transaksi terkonsentrasi pada total_bill sekitar 10–20 USD.

Distribusi pada Saturday (Sat) dan Sunday (Sun) terlihat lebih menyebar ke nilai total_bill yang lebih tinggi dibandingkan hari lainnya. Beberapa transaksi pada kedua hari tersebut bahkan berada pada kisaran 40–50 USD.

Boxplot di bagian tengah membantu menunjukkan posisi median dan penyebaran utama data. Median total_bill pada Sunday terlihat relatif lebih tinggi, sedangkan Friday dan Thursday cenderung memiliki median yang lebih rendah.

3.2.3 Strip Plot / Jitter Plot

Strip plot merupakan visualisasi yang menampilkan setiap observasi dalam bentuk titik untuk membandingkan sebaran data numerik pada beberapa kelompok atau kategori.

Ketika terdapat beberapa observasi dengan nilai yang sama atau berdekatan, titik-titik dapat saling menutupi. Oleh karena itu, titik dapat digeser sedikit secara horizontal menggunakan teknik jitter, sehingga setiap observasi lebih mudah terlihat.

Dengan demikian, jitter plot membantu kita melihat data mentah sekaligus membandingkan pola sebaran, kepadatan, dan nilai-nilai ekstrem antar kelompok.

Pada contoh berikut, kita akan melihat sebaran total_bill pada setiap day.

ggplot(tips, aes(x = day, y = total_bill, color = day)) +
  geom_jitter(width = 0.18, alpha = 0.65) +
  labs(
    title = "Data Mentah Total Tagihan Menurut Hari",
    x = "Hari",
    y = "Total Tagihan (USD)"
  ) +
  theme_minimal() +
  theme(legend.position = "none")

Interpretasi: Setiap titik menunjukkan satu transaksi, sedangkan posisi vertikal menunjukkan nilai total_bill. Titik-titik digeser sedikit secara horizontal agar observasi dengan nilai yang sama atau berdekatan tidak saling menutupi.

Dari grafik terlihat bahwa transaksi pada Saturday (Sat) dan Sunday (Sun) memiliki jumlah observasi yang lebih banyak dibandingkan Thursday (Thur) dan Friday (Fri). Nilai total_bill pada Saturday dan Sunday juga tersebar cukup luas, bahkan terdapat beberapa transaksi dengan total tagihan mendekati atau melebihi 50 USD.

Sementara itu, sebagian besar transaksi pada setiap hari tetap terkonsentrasi pada nilai total_bill yang relatif lebih rendah. Dengan jitter plot, kita dapat melihat setiap observasi secara langsung, sehingga pola sebaran dan keberadaan nilai yang jauh dari mayoritas data lebih mudah dikenali.

📝 Latihan 2: ganti day dengan smoker atau time, lalu bandingkan distribusi tip. Kelompok mana yang terlihat memiliki variasi tip lebih besar?


3.3 Categoric vs Categoric

Jika kedua peubah berbentuk kategori, fokus kita adalah frekuensi, proporsi, dan pola kombinasi antar kategori.

Kita gunakan day dan smoker.

3.3.1 Grouped Bar Chart

Grouped bar chart adalah visualisasi yang digunakan untuk membandingkan jumlah atau frekuensi dari dua peubah kategorik secara bersamaan.

Pada grafik ini, batang dari setiap kategori ditempatkan berdampingan, sehingga kita dapat membandingkan jumlah observasi antar kelompok dengan lebih mudah.

Pada contoh berikut, kita akan membandingkan jumlah transaksi berdasarkan day dan smoker.

ggplot(tips, aes(x = day, fill = smoker)) +
  geom_bar(position = "dodge") +
  labs(
    title = "Jumlah Transaksi Menurut Hari dan Status Perokok",
    x = "Hari",
    y = "Jumlah Transaksi",
    fill = "Perokok?"
  ) +
  theme_minimal()

Interpretasi: Tinggi batang menunjukkan jumlah transaksi pada masing-masing kelompok. Dari grafik terlihat bahwa pola jumlah transaksi antara kelompok perokok (Yes) dan non-perokok (No) berbeda pada setiap hari.

Pada Friday (Fri), transaksi dari kelompok perokok lebih banyak dibandingkan non-perokok. Pada Saturday (Sat), jumlah transaksi kedua kelompok relatif hampir sama. Sementara itu, pada Sunday (Sun) dan Thursday (Thur), transaksi dari kelompok non-perokok terlihat jauh lebih banyak dibandingkan kelompok perokok.

Secara keseluruhan, grouped bar chart memudahkan kita membandingkan frekuensi dua kategori secara langsung pada setiap kelompok hari.

3.3.2 Proportion Bar Chart

Proportion bar chart adalah visualisasi yang digunakan untuk membandingkan komposisi atau proporsi kategori pada setiap kelompok.

Berbeda dengan grouped bar chart yang membandingkan jumlah observasi, pada proportion bar chart setiap batang memiliki tinggi yang sama, yaitu 100%. Batang tersebut kemudian dibagi berdasarkan proporsi masing-masing kategori.

Visualisasi ini berguna ketika jumlah observasi pada setiap kelompok berbeda, sehingga perbandingan berdasarkan persentase atau komposisi menjadi lebih informatif daripada hanya membandingkan jumlah.

Pada contoh berikut, kita akan membandingkan proporsi status smoker pada setiap day.

ggplot(tips, aes(x = day, fill = smoker)) +
  geom_bar(position = "fill") +
  labs(
    title = "Proporsi Status Perokok pada Setiap Hari",
    x = "Hari",
    y = "Proporsi",
    fill = "Perokok?"
  ) +
  scale_y_continuous(labels = scales::percent) +
  theme_minimal()

Interpretasi: Setiap batang menunjukkan 100% transaksi pada masing-masing hari, sedangkan warna menunjukkan proporsi kelompok perokok (Yes) dan non-perokok (No).

Dari grafik terlihat bahwa pada Friday (Fri), sebagian besar transaksi berasal dari kelompok perokok, yaitu sekitar 80%. Pada Saturday (Sat), proporsi perokok dan non-perokok relatif seimbang.

Sebaliknya, pada Sunday (Sun) dan Thursday (Thur), kelompok non-perokok lebih dominan. Proporsi perokok hanya sekitar 25% pada Sunday dan 28% pada Thursday.

Dengan demikian, grafik ini menunjukkan bahwa komposisi status perokok berbeda pada setiap hari, tanpa dipengaruhi oleh perbedaan jumlah transaksi antar hari.

3.3.3 Mosaic Plot

Mosaic plot adalah visualisasi yang digunakan untuk melihat hubungan atau asosiasi antara dua peubah kategorik.

Pada mosaic plot, setiap kombinasi kategori ditampilkan dalam bentuk kotak, dengan ukuran kotak yang mengikuti banyaknya observasi pada kombinasi tersebut. Semakin besar kotaknya, semakin banyak observasi pada kombinasi kategori tersebut.

Selain ukuran kotak, warna dapat digunakan untuk menunjukkan apakah jumlah observasi pada suatu kombinasi lebih besar atau lebih kecil daripada yang diharapkan apabila kedua peubah tidak memiliki hubungan.

Pada contoh berikut, kita akan melihat hubungan antara day dan status smoker.

mosaic(
  ~ day + smoker,
  data = tips,
  shade = TRUE,
  main = "Mosaic Plot: Hari vs Status Perokok"
)

Interpretasi: Ukuran setiap kotak menunjukkan banyaknya observasi pada kombinasi day dan smoker. Dari grafik terlihat bahwa pola status perokok tidak sama pada setiap hari.

Pada Friday (Fri), kelompok perokok (Yes) terlihat lebih banyak daripada yang diharapkan jika day dan smoker tidak berasosiasi, sedangkan kelompok non-perokok (No) lebih sedikit daripada yang diharapkan. Hal ini ditunjukkan oleh warna biru dan merah pada bagian Friday.

Sementara itu, kotak pada Saturday, Sunday, dan Thursday sebagian besar berwarna abu-abu, yang menunjukkan bahwa penyimpangannya dari frekuensi yang diharapkan relatif lebih kecil.

Nilai p-value = 1.0568 × 10⁻⁵, yang lebih kecil dari 0,05, memberikan bukti adanya asosiasi yang signifikan secara statistik antara day dan smoker pada data ini.

📝 Latihan 3: buat mosaic plot antara time dan day. Adakah kombinasi hari dan waktu makan yang terlihat jauh lebih dominan?


3.4 Multiple Variables — Lebih dari Dua Peubah

Data nyata biasanya memiliki banyak peubah. Karena itu, kita juga perlu melihat beberapa hubungan secara bersamaan.

3.4.1 Pairplot

Pairplot adalah visualisasi yang digunakan untuk melihat hubungan antara beberapa peubah sekaligus dalam satu tampilan.

Pairplot menyusun setiap peubah dalam bentuk matriks sehingga kita dapat melihat distribusi masing-masing peubah, hubungan antar pasangan peubah, serta membandingkan pola tersebut berdasarkan kelompok tertentu.

Pada contoh berikut, kita menggunakan peubah total_bill, tip, dan size, kemudian membedakan observasi berdasarkan sex.

tips %>%
  select(total_bill, tip, size, sex) %>%
  ggpairs(aes(color = sex, alpha = 0.6))

Cara membaca pairplot:

  • Bagian diagonal menunjukkan distribusi masing-masing peubah.
  • Bagian kiri bawah menunjukkan scatter plot antar pasangan peubah numerik.
  • Bagian kanan atas menunjukkan nilai korelasi antar pasangan peubah numerik.
  • Warna membedakan kelompok berdasarkan sex, yaitu Female dan Male.
  • Pada pasangan peubah numerik dengan sex, boxplot digunakan untuk membandingkan distribusi antar kelompok.

Interpretasi: Pairplot menunjukkan bahwa beberapa peubah numerik pada dataset tips memiliki hubungan positif. Hubungan antara total_bill dan tip memiliki korelasi sekitar 0,676, yang menunjukkan bahwa semakin besar total tagihan, tip cenderung semakin besar.

Hubungan positif juga terlihat antara total_bill dan size dengan korelasi sekitar 0,598, sedangkan hubungan antara tip dan size sekitar 0,489.

Ketika data dibedakan berdasarkan sex, arah hubungan total_bill dan tip tetap positif pada kedua kelompok. Nilai korelasinya juga relatif berdekatan, yaitu sekitar 0,683 pada Female dan 0,670 pada Male.

Dengan demikian, pairplot memberikan gambaran awal mengenai banyak hubungan sekaligus sebelum kita memilih pasangan peubah tertentu untuk dianalisis lebih lanjut. ### Correlation Matrix

Correlation matrix atau matriks korelasi adalah tabel yang digunakan untuk melihat arah dan kekuatan hubungan linear antara beberapa peubah numerik secara sekaligus.

Setiap sel pada matriks berisi nilai koefisien korelasi antara dua peubah. Nilainya berada pada rentang -1 sampai 1:

  • nilai mendekati +1 menunjukkan hubungan linear positif yang semakin kuat;
  • nilai mendekati -1 menunjukkan hubungan linear negatif yang semakin kuat;
  • nilai mendekati 0 menunjukkan hubungan linear yang semakin lemah.

Pada contoh berikut, kita akan melihat korelasi antara total_bill, tip, dan size.

num_vars <- tips %>%
  select(total_bill, tip, size)

corr_matrix <- cor(num_vars)

round(corr_matrix, 3)
##            total_bill   tip  size
## total_bill      1.000 0.676 0.598
## tip             0.676 1.000 0.489
## size            0.598 0.489 1.000

Cara membaca matriks: Nilai pada diagonal selalu 1, karena setiap peubah dikorelasikan dengan dirinya sendiri. Matriks juga bersifat simetris, sehingga korelasi total_bill dengan tip sama dengan korelasi tip dengan total_bill.

Dari hasil tersebut, diperoleh korelasi total_bill dengan tip sebesar 0,676, total_bill dengan size sebesar 0,598, dan tip dengan size sebesar 0,489. Seluruh nilai bernilai positif, sehingga ketiga pasangan peubah menunjukkan arah hubungan linear yang positif.

Agar pola korelasi lebih mudah dilihat, matriks tersebut selanjutnya kita tampilkan dalam bentuk visual menggunakan corrplot().

corrplot(
  corr_matrix,
  method = "color",
  type = "upper",
  addCoef.col = "black",
  tl.col = "black",
  title = "Correlation Matrix",
  mar = c(0, 0, 1, 0)
)

Interpretasi: Visualisasi menunjukkan bahwa seluruh pasangan peubah memiliki korelasi positif. Hubungan linear yang paling kuat di antara pasangan yang ditampilkan terdapat antara total_bill dan tip dengan nilai korelasi sekitar 0,68.

Selanjutnya, korelasi antara total_bill dan size sebesar 0,60, sedangkan tip dan size memiliki korelasi sekitar 0,49.

Artinya, pada data ini, transaksi dengan total tagihan yang lebih besar cenderung diikuti oleh tip yang lebih besar dan jumlah orang dalam grup yang lebih banyak. Namun, korelasi hanya menunjukkan hubungan atau kecenderungan, bukan hubungan sebab-akibat.

3.4.2 Facet Plot

Facet plot adalah visualisasi yang digunakan untuk menampilkan grafik yang sama pada beberapa kelompok atau kategori secara terpisah dalam bentuk panel-panel kecil.

Dengan facet plot, kita dapat melihat apakah pola hubungan antar peubah tetap sama atau berbeda pada setiap kelompok, tanpa mencampurkan seluruh observasi dalam satu grafik.

Pada contoh berikut, hubungan antara total_bill dan tip akan dipisahkan berdasarkan sex dan time. Dengan demikian, kita dapat membandingkan pola hubungan tersebut pada kelompok Female–Dinner, Female–Lunch, Male–Dinner, dan Male–Lunch.

ggplot(tips, aes(x = total_bill, y = tip)) +
  geom_point(alpha = 0.6, color = "#C85F91") +
  facet_grid(sex ~ time) +
  labs(
    title = "Hubungan Total Tagihan dan Tip menurut Kelompok",
    x = "Total Tagihan (USD)",
    y = "Tip (USD)"
  ) +
  theme_minimal()

Interpretasi: Setiap panel menunjukkan hubungan antara total_bill dan tip pada kombinasi kelompok sex dan time yang berbeda.

Secara umum, pada keempat kelompok terlihat kecenderungan bahwa semakin besar total_bill, nilai tip juga cenderung meningkat. Namun, jumlah observasi dan penyebaran data pada setiap kelompok berbeda.

Panel Dinner memiliki observasi yang lebih banyak dan sebaran total_bill yang lebih luas dibandingkan Lunch, terutama pada kelompok Male. Sementara itu, observasi pada kelompok Lunch relatif lebih sedikit.

Dengan facet plot, pola hubungan total_bill dan tip dapat dibandingkan antar kelompok dengan lebih mudah karena setiap kelompok ditampilkan pada panel yang terpisah.

3.4.3 Parallel Coordinates

Parallel coordinates plot adalah visualisasi yang digunakan untuk melihat pola beberapa peubah numerik secara bersamaan.

Pada grafik ini, setiap peubah ditampilkan sebagai sumbu yang sejajar, sedangkan setiap garis mewakili satu observasi. Garis tersebut menghubungkan nilai satu observasi pada seluruh peubah yang ditampilkan.

Karena setiap peubah dapat memiliki satuan dan rentang yang berbeda, nilainya dapat diskalakan terlebih dahulu agar dapat dibandingkan dalam satu grafik.

Pada contoh berikut, kita akan melihat pola total_bill, tip, dan size, serta membedakan setiap observasi berdasarkan sex.

tips %>%
  select(total_bill, tip, size, sex) %>%
  ggparcoord(
    columns = 1:3,
    groupColumn = "sex",
    scale = "uniminmax"
  ) +
  labs(
    title = "Parallel Coordinates: total_bill, tip, size"
  ) +
  theme_minimal()

Cara membaca: Setiap garis mewakili satu transaksi. Posisi garis pada masing-masing sumbu menunjukkan nilai relatif transaksi tersebut untuk total_bill, tip, dan size. Pada grafik ini, nilai telah diskalakan ke rentang 0–1, sehingga angka pada sumbu bukan lagi nilai asli dalam USD atau jumlah orang.

Interpretasi: Sebagian besar garis terkonsentrasi pada bagian bawah hingga tengah grafik. Hal ini menunjukkan bahwa sebagian besar transaksi memiliki nilai total_bill, tip, dan size yang relatif rendah hingga sedang dibandingkan nilai maksimum masing-masing peubah.

Beberapa garis mencapai bagian atas pada total_bill atau tip, yang menunjukkan adanya transaksi dengan nilai relatif tinggi. Pada peubah size, garis terlihat terkonsentrasi pada beberapa tingkat tertentu karena size merupakan jumlah orang dalam grup dan nilainya bersifat diskret.

Warna membedakan kelompok Female dan Male. Kedua warna terlihat cukup banyak saling tumpang tindih, sehingga dari visualisasi ini belum terlihat pemisahan pola yang sangat jelas antara kedua kelompok.

📝 Latihan 4: dari pairplot, correlation matrix, facet plot, dan parallel coordinates, mana yang menurutmu paling mudah digunakan untuk menjelaskan hubungan total_bill, tip, dan size? Jelaskan alasannya.


4 Bagian 2 — Mengukur Kekuatan Hubungan dengan Korelasi

Visualisasi membantu kita melihat pola. Tetapi sekarang kita ingin menjawab pertanyaan yang lebih spesifik:

Seberapa kuat hubungan tersebut, dan ke arah mana hubungannya?

Koefisien korelasi memberi nilai numerik untuk merangkum hubungan antar peubah.

Kondisi data Ukuran yang dapat digunakan
Dua peubah numerik kontinu dengan hubungan linear Pearson
Data ordinal / hubungan monoton / Pearson kurang sesuai Spearman
Data ordinal dan ingin ukuran berbasis pasangan ranking Kendall

⚠️ Ingat: korelasi menunjukkan hubungan/asosiasi. Korelasi tidak otomatis berarti sebab-akibat.

4.1 Korelasi Pearson

Pearson mengukur arah dan keeratan hubungan linear antara dua peubah numerik.

Nilainya berada pada rentang -1 sampai 1:

  • mendekati +1 → hubungan linear positif semakin kuat;
  • mendekati 0 → hubungan linear semakin lemah;
  • mendekati -1 → hubungan linear negatif semakin kuat.

Kita hitung hubungan total_bill dan tip.

cor.test(
  tips$total_bill,
  tips$tip,
  method = "pearson"
)
## 
##  Pearson's product-moment correlation
## 
## data:  tips$total_bill and tips$tip
## t = 14.26, df = 242, p-value < 2.2e-16
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
##  0.6011647 0.7386372
## sample estimates:
##       cor 
## 0.6757341

Fokus pada dua bagian output:

  1. cor → besar dan arah koefisien korelasi;
  2. p-value → bukti statistik terhadap hipotesis tidak adanya korelasi linear pada populasi.

Pada data ini, nilai korelasi sekitar 0,676, sehingga total_bill dan tip menunjukkan hubungan linear positif. Nilai p-value yang sangat kecil menunjukkan bahwa hubungan linear tersebut signifikan secara statistik pada taraf 5%.

🗣️ Kalimat siap pakai: “Terdapat hubungan linear positif antara total tagihan dan tip. Artinya, transaksi dengan total tagihan yang lebih tinggi cenderung diikuti tip yang lebih tinggi.”

4.1.1 Hal yang perlu diperiksa sebelum Pearson

Sebelum menggunakan Pearson, jangan hanya melihat p-value. Perhatikan juga:

  • kedua peubah berupa numerik;
  • pola hubungan kira-kira linear;
  • tidak ada outlier ekstrem yang sangat memengaruhi hasil; dan
  • interpretasi dilakukan sesuai konteks data.

Scatter plot yang kita buat di awal membantu memeriksa hal-hal tersebut.


4.1.2 Korelasi Spearman

Korelasi Spearman adalah ukuran yang digunakan untuk melihat arah dan kekuatan hubungan monoton antara dua peubah berdasarkan peringkat (rank) data.

Berbeda dengan Pearson yang berfokus pada hubungan linear, Spearman tidak mengharuskan hubungan antar peubah membentuk garis lurus. Spearman dapat digunakan ketika data berbentuk ordinal/peringkat, hubungan bersifat monoton, atau ketika asumsi Pearson kurang sesuai.

Hubungan monoton berarti ketika nilai satu peubah meningkat, peubah lainnya cenderung terus meningkat atau terus menurun, meskipun pola hubungannya tidak harus membentuk garis lurus.

Koefisien Spearman dilambangkan dengan rho (ρ) dan memiliki nilai antara -1 sampai 1.

cor.test(
  tips$total_bill,
  tips$tip,
  method = "spearman",
  exact = FALSE
)
## 
##  Spearman's rank correlation rho
## 
## data:  tips$total_bill and tips$tip
## S = 777247, p-value < 2.2e-16
## alternative hypothesis: true rho is not equal to 0
## sample estimates:
##       rho 
## 0.6789681

Cara membaca output: Perhatikan nilai rho sebagai koefisien korelasi Spearman dan p-value untuk melihat signifikansi statistik hubungan.

Interpretasi: Hasil analisis menunjukkan nilai korelasi Spearman (rho) sebesar 0,679 dengan p-value < 2,2 × 10⁻¹⁶.

Nilai rho yang positif menunjukkan bahwa total_bill dan tip memiliki hubungan monoton positif. Artinya, semakin tinggi total_bill, tip juga cenderung semakin tinggi berdasarkan urutan atau peringkat datanya.

Karena p-value < 0,05, terdapat bukti statistik bahwa hubungan monoton antara total_bill dan tip signifikan.

💡 Bedanya: Pearson fokus pada hubungan linear, sedangkan Spearman melihat apakah ketika satu peubah meningkat, peubah lain cenderung ikut meningkat atau menurun secara monoton.


4.1.3 Korelasi Kendall

Korelasi Kendall adalah ukuran korelasi berbasis peringkat (rank) yang digunakan untuk melihat arah dan kekuatan hubungan antara dua peubah.

Kendall bekerja dengan membandingkan pasangan-pasangan observasi. Secara sederhana, dua observasi disebut:

  • Concordant (searah) jika urutan kedua peubah bergerak ke arah yang sama.
  • Discordant (berlawanan arah) jika urutan kedua peubah bergerak ke arah yang berlawanan.

Semakin banyak pasangan yang concordant, hubungan cenderung positif. Sebaliknya, semakin banyak pasangan yang discordant, hubungan cenderung negatif.

Koefisien korelasi Kendall dilambangkan dengan tau (τ) dan memiliki nilai antara -1 sampai 1.

cor.test(
  tips$total_bill,
  tips$tip,
  method = "kendall",
  exact = FALSE
)
## 
##  Kendall's rank correlation tau
## 
## data:  tips$total_bill and tips$tip
## z = 11.839, p-value < 2.2e-16
## alternative hypothesis: true tau is not equal to 0
## sample estimates:
##      tau 
## 0.517181

Cara membaca output: Perhatikan nilai tau sebagai koefisien korelasi Kendall dan p-value untuk melihat signifikansi statistik hubungan.

Interpretasi: Hasil analisis menunjukkan nilai Kendall’s tau (τ) sebesar 0,517 dengan p-value < 2,2 × 10⁻¹⁶.

Nilai tau yang positif menunjukkan bahwa total_bill dan tip memiliki hubungan positif berdasarkan urutan datanya. Artinya, transaksi dengan total_bill yang lebih tinggi cenderung memiliki tip yang lebih tinggi.

Karena p-value < 0,05, terdapat bukti statistik bahwa hubungan antara total_bill dan tip berdasarkan Kendall signifikan.


5 Bagian 3 : Hubungan pada Data Teks

Hubungan antar peubah tidak hanya dapat dipelajari pada data numerik atau kategorik. Pada data teks, kita juga dapat mengeksplorasi hubungan berdasarkan kata-kata yang muncul bersama dalam suatu dokumen, kalimat, atau unit teks tertentu.

Salah satu pendekatan sederhana yang dapat digunakan adalah co-occurrence analysis atau analisis kemunculan bersama.

Co-occurrence analysis digunakan untuk melihat kata-kata yang sering muncul bersama dalam unit teks yang sama. Semakin sering dua kata muncul bersama, semakin kuat keterkaitan keduanya berdasarkan pola kemunculan dalam data teks tersebut.

Sebagai contoh, jika kata data dan analisis sering muncul dalam kalimat yang sama, kedua kata tersebut akan memiliki nilai co-occurrence yang lebih tinggi.

Pada bagian ini, kita akan mempelajari prosesnya secara sederhana mulai dari menyiapkan data teks → tokenisasi → membentuk pasangan kata → menghitung frekuensi kemunculan bersama → memvisualisasikan hubungan antar kata.

library(tidytext)
library(tidyr)
library(widyr)

5.1 Menyiapkan Data Teks

Pertama, kita membuat contoh data sederhana yang terdiri dari tiga kalimat. Setiap kalimat diberikan id yang berbeda agar kita dapat mengetahui kata-kata mana yang muncul bersama dalam kalimat yang sama.

teks_contoh <- data.frame(
  id = 1:3,
  kalimat = c(
    "sains data membantu memahami hubungan antar peubah",
    "hubungan antar peubah penting untuk feature engineering",
    "feature engineering membantu meningkatkan performa model"
  )
)

teks_contoh
##   id                                                  kalimat
## 1  1       sains data membantu memahami hubungan antar peubah
## 2  2  hubungan antar peubah penting untuk feature engineering
## 3  3 feature engineering membantu meningkatkan performa model

5.2 Tokenisasi Teks

Sebelum hubungan antar kata dapat dihitung, teks perlu dipecah menjadi unit yang lebih kecil. Proses ini disebut tokenisasi.

Pada contoh ini, setiap kalimat akan dipecah menjadi kata-kata individual (token). Dengan demikian, satu kalimat yang sebelumnya berada dalam satu baris akan berubah menjadi beberapa baris, dengan satu kata pada setiap baris.

kata <- teks_contoh %>%
  unnest_tokens(word, kalimat)

head(kata)
##   id     word
## 1  1    sains
## 2  1     data
## 3  1 membantu
## 4  1 memahami
## 5  1 hubungan
## 6  1    antar

5.2.1 Menghitung Co-occurrence Antar Kata

Setelah teks diubah menjadi token, langkah berikutnya adalah menghitung pasangan kata yang muncul bersama dalam kalimat yang sama.

Fungsi pairwise_count() akan membentuk pasangan antar kata berdasarkan id kalimat, kemudian menghitung berapa kali setiap pasangan tersebut muncul bersama.

Pada output yang dihasilkan:

  • item1 = kata pertama dalam pasangan,
  • item2 = kata kedua dalam pasangan,
  • n = berapa kali kedua kata tersebut muncul bersama dalam kalimat yang sama.

Semakin besar nilai n, semakin sering pasangan kata tersebut muncul bersama.

cooc <- kata %>%
  pairwise_count(word, id, sort = TRUE)

head(cooc, 10)
## # A tibble: 10 × 3
##    item1       item2           n
##    <chr>       <chr>       <dbl>
##  1 antar       hubungan        2
##  2 peubah      hubungan        2
##  3 hubungan    antar           2
##  4 peubah      antar           2
##  5 hubungan    peubah          2
##  6 antar       peubah          2
##  7 engineering feature         2
##  8 feature     engineering     2
##  9 data        sains           1
## 10 membantu    sains           1

Interpretasi: Hasil menunjukkan beberapa pasangan kata memiliki nilai n = 2, misalnya antar–hubungan, peubah–hubungan, dan feature–engineering. Artinya, masing-masing pasangan kata tersebut ditemukan bersama pada dua kalimat dalam data contoh.

Sementara itu, pasangan seperti data–sains memiliki nilai n = 1, yang berarti kedua kata tersebut hanya ditemukan bersama pada satu kalimat.

Dengan demikian, semakin besar nilai n, semakin sering dua kata muncul bersama dalam unit teks yang sama. Nilai ini dapat digunakan sebagai ukuran sederhana untuk mengeksplorasi keterkaitan berdasarkan kemunculan bersama antar kata.

Bagian ini hanya pengantar. Analisis teks yang lebih lanjut dapat dikembangkan menjadi network kata atau pendekatan NLP lainnya.


6 Ringkasan Praktikum

Sampai di sini, alur berpikir kita sebenarnya sederhana:

1. Kenali tipe peubah → 2. Pilih visualisasi → 3. Lihat pola → 4. Jika sesuai, ukur hubungan → 5. Interpretasikan dalam konteks.

Tipe hubungan Visualisasi yang dapat digunakan
Numerik vs Numerik Scatter plot, hexbin, contour
Numerik vs Kategorik Boxplot, violin plot, jitter
Kategorik vs Kategorik Grouped bar chart, proportion bar, mosaic
Banyak peubah Pairplot, correlation matrix, facet, parallel coordinates

Untuk hubungan numerik, korelasi membantu kita mengukur arah dan kekuatan hubungan, tetapi visualisasi tetap penting karena satu angka korelasi tidak menceritakan seluruh bentuk data.


7 Kaitan dengan Proyek Kelompok

Materi hari ini dapat langsung digunakan ketika kelompok mulai mengeksplorasi dataset hasil scraping.

Urutan yang dapat digunakan:

  1. tentukan peubah yang ingin dibandingkan;
  2. identifikasi tipe masing-masing peubah;
  3. pilih visualisasi yang sesuai;
  4. tuliskan pola yang terlihat;
  5. jika dua peubah numerik, pertimbangkan analisis korelasi yang sesuai; dan
  6. pilih visualisasi yang paling informatif untuk dimasukkan ke infografis.

📝 Pertanyaan penutup: “Dari seluruh grafik hari ini, grafik mana yang paling cocok untuk data proyek kelompok kalian, dan hubungan antar peubah apa yang ingin kalian tunjukkan?”


8 Referensi

Materi praktikum ini disusun dengan mengacu pada bahan Praktikum 5 yang membahas eksplorasi hubungan antar peubah secara visual, korelasi Pearson, Spearman, Kendall, serta pengantar hubungan pada data teks.