Email:
RPubs: https://rpubs.com/sianadputrii/


Data visualization teknik mengambil informasi dari data menjadi visual seperti bagan, grafik, dan peta. Data Visualization, yang mungkin untuk menangani hal kecil dan sebuah data besar agar lebih mudah bagi otak manusia untuk memahami, dan visualisasi juga membuatnya lebih dapat diandalkan untuk mendeteksi pola, tren, dan outlier dalam kelompok data.

R adalah platform yang luat biasa untuk melakukan analisa data, yang mampu membuat hampir semua jenis grafik. Buku ini dapat membantu Anda membuat visualisasi yang paling populer dari plot yang cepat dan berantakan hingga grafik yang siap untuk dipublikasikan. Disini kita akan belajar bagaimana memvisualisasikan data dari univariate, bivariate, dan multivariate. Dari yang paling dasar hingga tingkatan yang lebih sulit, ikuti intruksi setiap langkahnya.

1 Univariate Data

Plot univariat biasanya digunakan untuk melakukan distribusi data dari satu variabel. Variabelnya bisa berupa kategori (misalnya ; Jenis kelamin, Ras, Negara, Kota, dsb) atau kuantitatif (misalnya ; Umur, Berat Badan, Inflasi, Nilai, dsb).

1.1 Categorical

Distribusi variabel kategori tunggal biasanya diplot dengan Bar-Chart, Pie-Chart, or atau yang jarang dipakai yaitu treemap.

1.1.1 Bar Chart

Berikut adalah contoh yang menunjukkan frekuensi tentang Marriage dataset, yang saya kumpulkan dari package mosaicData. Kita menggunakan Bar-Chart untuk menampilkan distribusi dari partisipan pernikahan (Marriage) dengan Zodiac.

library(ggplot2)                                     # untuk visualisasi
#setwd("C:/Users/Siana/Download/")                   # jangan lupa mengatur working directory
Marriage<- read.csv("Marriage.csv")                  # mengambil data dari PC
ggplot(Marriage, aes(x = zodiacs)) +                 # distribusi plot dari `Zodiacs` 
  geom_bar(fill = "cornflowerblue",color= "black")+  # kamu dapat mengatur warnanya
  theme_minimal() +                                  # gunakan tema minimal
  labs(x = "Zodiacs",                                # kamu dapat mengatur label dan judul plotnya
       y = "Frequency", 
       title = "Marriage Participants by Zodiacs")         
Categorical Bar Chart 1

Categorical Bar Chart 1

Bars dapat mewakilkan persentase dibandingkan dengan jumlah. Untuk Bar-Charts (zodiacs), kode aes(x=sign) sebenarnya jalan pintas untuk aes(x = sign, y = ..count..), dimana ..count.. adalah sebuah variabel spesial yang merepresentasikan frekuensi setiap kategorinya. Kita bisa menggunakan ini untuk menghitung persentase, dengan variabel eksplisit y.

Pada R, warna bisa ditentukan berdasarkan namanya (Misal ; col = “red”) seperti yang terlihat pada gambar dibawah ini.

atau Anda dapat memilih warna dengan menggunakan RGB triplet heksadesimal (seperti col = “#FFCC00”) s=Selebihnya. Selain itu, Anda juga dapat menggunakan pilihan warna lain seperti yang diambil dari RColorBrewer package. Selebihnya dan package grDevices (Anda mungkin sudah memuat paket ini) yang berisi sejumlah palet, ketik ?rainbow di Rconsole Anda. Mari kita perhatikan grafik berikut :

library(ggplot2)                                     # Untuk visualisasi
ggplot(Marriage, 
   aes(x = zodiacs, 
       y = ..count.. / sum(..count..))) + 
  geom_bar(fill = rainbow(12), color= "azure4") +
  theme_minimal() +                                  # Gunakan tema minimal
  labs(x = "Zodiacs", 
       y = "Percent", 
  title  = "Marriage Participants in Percent") +
  scale_y_continuous(labels = scales::percent)       # tambahkan simbol % untuk di label y-axis  
 Categorical Bar Chart 2

Categorical Bar Chart 2

Mengurutkan bar berdasarkan frekuensi sering kali membantu. Pada kode dibawah ini, frekuensi dihitung secara eksplisit. Kemudian fungsi reorder digunakan untuk mengurutkan kategori berdasarkan frekuensinya. Opsi stat="identity" memberi tahu plot untuk tidak menghitung jumlahnya, karena mereka diberikan secara langsung..

library(dplyr)                                       # Untuk memanipulasi data
library(ggplot2)                                     # Untuk Visualisasi
plotdata <- Marriage %>%                             # Memuat dataset
 count(zodiacs)                                      # Menghitung partisipan di setiap `zodiac`
# Bar plot dalam urutan naik
ggplot(plotdata,                                     
       aes(x = reorder(zodiacs, n), 
           y = n)) + 
  geom_bar(stat = "identity",
           fill = rainbow(12), 
           color= "azure4") +
   theme_minimal() +                                  # Gunakan tema minimal
  labs(x = "Zodiacs", 
       y = "Frequency", 
  title  = "Sorting Categories")
Categorical Bar Chart 3

Categorical Bar Chart 3

Jika Anda mungkin ingin memberi label pada setiap Bar dengan nilai numerik, periksa kode berikut :

library(dplyr)                                       # Untuk manipulasi data
library(ggplot2)                                     # Untuk visualisasi
library(scales)                                      # Otomatis menentukan break/labels
plotdata <- Marriage %>%
  count(zodiacs) %>%
  mutate(pct = n / sum(n),
         pctlabel = paste0(round(pct*100), "%"))
# Bar plot dengan persentase, dengan urutan menurun menggunakan bar labels
ggplot(plotdata, 
       aes(x = reorder(zodiacs, -pct),
           y = pct)) + 
  geom_bar(stat = "identity", 
           fill = rainbow(12), 
          color = "azure4") +
  geom_text(aes(label = pctlabel), 
            vjust = -0.25) +
  theme_minimal() +                                  # Gunakan tema minimal
  scale_y_continuous(labels = percent) +
  labs(x = "Zodiacs", 
       y = "Percent", 
       title  = "Labeling Bars")
Categorical Bar Chart 4

Categorical Bar Chart 4

Terkadang label kategori mungkin tumpang tindih, itu akan sangat mengganggu bukan ? Jadi, Anda bisa memutar axis label.

library(ggplot2)                                     # Untuk visualisasi
library(scales)                                      # Otomatis menentukan break/labels
# Bar plot dengan presentase 
# Dengan urutan menurun dengan bar labels
ggplot(plotdata, 
       aes(x = reorder(zodiacs, -pct),
           y = pct)) + 
  geom_bar(stat = "identity", 
           fill = rainbow(12), 
           color = "azure4") +
  geom_text(aes(label = pctlabel), 
            vjust = -0.25) +
  scale_y_continuous(labels = percent) +
  theme_minimal() +                                  # Gunakan tema minimal
  labs(x = "Zodiacs", 
       y = "Percent", 
       title  = "Overlapping Labels")+
  theme(axis.text.x = element_text(angle = 25, hjust = 1))
Categorical Bar Chart 5

Categorical Bar Chart 5

Sebagai alternatif, Anda dapat menangani situasi ini dengan membalik sumbu x dan y.

library(ggplot2)                                     # Untuk visualisasi
library(scales)                                      # Otomatis menentukan break/labels
# Bar plot dengan persentase, 
# Dalam urutan menurun dengan bar labels
ggplot(plotdata, 
       aes(x = reorder(zodiacs, -pct),
           y = pct)) + 
  geom_bar(stat = "identity", 
           fill = rainbow(12), 
           color = "azure4") +
  geom_text(aes(label = pctlabel), 
            hjust = -0.10) +
  scale_y_continuous(labels = percent) +
  theme_minimal() +                                  # Gunakan tema minimal
  labs(x = "Zodiacs", 
       y = "Percent", 
       title  = "Overlapping Labels")+
  coord_flip()
Categorical Bar Chart 6

Categorical Bar Chart 6

1.1.2 Pie Chart

Pie charts adalah hal yang kontroversial dalam statistik. Jika tujuan Anda adalah membandingkan frekuensi kategori, Anda lebih baik menggunakan diagram batang (Manusia lebih baik dalam menilai Bar Chart dibanding Pie Chart). Jika tujuan Anda adalah membandingkan setiap kategori dengan keseluruhan (misalnya, berapa bagian peserta yang merupakan Hispanik dibandingkan dengan semua peserta), dan jumlah kategori yang kecil, maka Pie Chart mungkin cocok untukmu. Dibutuhkan lebih banyak kode untuk membuat Pie Chart yang menarik di R.

Ini adalah contoh untuk membuat Pie Chart ggplot2 :

library(dplyr)                                       # Untuk data manipulasi
library(ggplot2)                                     # Untuk visualisasi
library(scales)                                      # Otomatis menentukan break/labels
# Persiapan Data
plotdata <- Marriage %>%
  count(race) %>%
  arrange(desc(race)) %>%
  mutate(prop = round(n*100/sum(n), 1),
         lab.ypos = cumsum(prop) - 0.5*prop)
# Membuat Pie Chart
mycols <- c("#0073C2FF", "#EFC000FF", "#868686FF", "#CD534CFF")
ggplot(plotdata, aes(x = "", y = prop, fill = race)) +
  geom_bar(width = 1, stat = "identity", color = "white") +
  coord_polar("y", start = 0)+
  geom_text(aes(y = lab.ypos, label = prop), color = "white")+
  scale_fill_manual(values = mycols) +
  theme_void()+
  labs(title = "Marriage Participants by Race")
Categorical Pie Chart

Categorical Pie Chart

Donut chart adalah pie chart sederhana dengan lubang di dalamnya. Satu-satunya perbedaan antara kode di Pie Chart adalah kita menetapkan : x = 2 dan xlim = c(0.5, 2.5) untuk membuat lubang di dalam pie chart. Selain itu, argumen width didalam fungsi geom_bar() tidak diperlukan lagi.

library(ggplot2)                                     # Untuk visualisasi
library(scales)                                      # Otomatis menentukan break/labels
# Membuat Donut chart
ggplot(plotdata, aes(x = 2, y = prop, fill = race)) +
  geom_bar(stat = "identity", color = "white") +
  coord_polar(theta = "y", start = 0)+
  geom_text(aes(y = lab.ypos, label = prop), color = "white")+
  scale_fill_manual(values = mycols) +
  theme_void()+
  xlim(0.5, 2.5)+
  labs(title = "Marriage Participants by Race")
Categorical Donut Chart 1

Categorical Donut Chart 1

Sekarang mari kita berangan-angan dan menambahkan label, sambil menghilangkan tulisan.

library(ggplot2)                                     # Untuk visualisasi
library(scales)                                      # Otomatis menentukan break/labels
# Tambahkan persentase label
plotdata$percent <- paste0(plotdata$race, "\n",
                         round(plotdata$prop), "%")
# Membuat Donut chart dalam persentase
ggplot(plotdata, aes(x = 2, y = prop, fill = race)) +
  geom_bar(stat = "identity", color = "white") +
  coord_polar(theta = "y", start = 0)+
  geom_text(aes(y = lab.ypos, label = percent), color = "white")+
  scale_fill_manual(values = mycols) +
  theme_void()+
  xlim(0.5, 2.5)+
  labs(title = "Marriage Participants by Race")
Categorical Donut Chart 2

Categorical Donut Chart 2

  #theme(legend.position = "FALSE")

1.1.3 Tree Map

Sebuah alternatif untuk pie chart adalah treemap. Tidak seperti pie charts, Treemap dapat mengatasi variabel kategori yang memiliki banyak tingkatan/level.

library(ggplot2)                                     # Untuk visualisasi
library(treemapify)                                  # Untuk visualisasi
## Warning: package 'treemapify' was built under R version 4.0.3
library(scales)                                      # Otomatis menentukan break/labels
plotdata <- Marriage %>%
  count(officialTitle)
ggplot(plotdata, 
       aes(fill = officialTitle, 
           area = n)) +
  geom_treemap() + 
  labs(title = "Marriage Participants by Officiate")
Categorical Tree Map 1

Categorical Tree Map 1

Berikut ini adalah versi yang lebih berguna dengan label :

ggplot(plotdata, 
       aes(fill = officialTitle, 
           area = n, 
           label = officialTitle)) +
  geom_treemap() + 
  geom_treemap_text(colour = "white", 
                    place = "centre") +
  labs(title = "Marriage Participants by Officiate") +
  theme(legend.position = "none")
Categorical Tree Map 2

Categorical Tree Map 2

1.2 Continuous

istribusi variabel kuantitatif tunggal biasanya diplot dengan histogram, plot kernel density, atau plot titik.

1.2.1 Histogram

Menggunakan data Pernikahan, mari kita gambarkan usia peserta yang menghadiri pernikahan.

library(ggplot2)                                     # Untuk visualisasi
ggplot(Marriage, aes(x = age)) +
  geom_histogram(fill = "cornflowerblue", 
                 color = "white",bins = 20) + 
  theme_minimal() +                                  # Gunakan tema minimal
  labs(title="Marriage Participants by age (Basic)",
       x = "Age")
Quantitative Histogram

Quantitative Histogram

Sebagian besar peserta tampaknya berusia di awal 20-an dengan kelompok lain berusia sekitar 40-an, dan kelompok yang jauh lebih kecil berusia 60-an dan awal 70-an. Ini akan menjadi distribusi multimoda. Warna histogram dapat dimodifikasi menggunakan dua pilihan :

  • Isi - warna isian untuk Bars (batang)
  • Warna - warna pembatas di sekeliling Bars (batang)

Cara lainnya, Anda dapat menentukan binwidth, lebar bin yang diwakili oleh Bars (batang).

library(ggplot2)                                     # Untuk visualisasi
library(scales)                                      # Ototmatis menentukan break/labels
ggplot(Marriage, 
       aes(x = age, 
           y= ..count.. / sum(..count..))) +
  geom_histogram(fill = "cornflowerblue", 
                 color = "white", 
                 binwidth = 5) +
  theme_minimal() +                                  # Gunakan tema minimal
  labs(title="Marriage Participants by age (Alternative Bins and bandwidths)", 
       y = "Percent",
       x = "Age") +
  scale_y_continuous(labels = percent)
Quantitative Histogram 2

Quantitative Histogram 2

Seperti bar charts, y-axis dapat mewakili hitungan atau persen dari total.

library(ggplot2)                                     # Untuk visualisasi
library(scales)                                      # Otomatis menentukan break/labels
ggplot(Marriage, 
       aes(x = age, 
           y= ..count.. / sum(..count..))) +
  geom_histogram(fill = "cornflowerblue", 
                 color = "white", 
                 binwidth = 5) +
  theme_minimal() +                                  # Gunakan tema minimal
  labs(title="Marriage Participants by age (Percent)", 
       y = "Percent",
       x = "Age") +
  scale_y_continuous(labels = percent)
Quantitative Histogram 3

Quantitative Histogram 3

1.2.2 Kernel Density Plot

Alternatif untuk histogram adalah kernel density plot. Secara teknis, estimasi kepadatan kernel adalah metode non-parametrik untuk memperkirakan fungsi kepadatan probabilitas dari variabel acak kontinu. Pada dasarnya, kami mencoba menggambar histogram halus (Smoothed Histogram), di mana area di bawah kurva sama dengan satu.

library(ggplot2)                                     # Untuk visualisasi
ggplot(Marriage, aes(x = age)) +
  geom_density(fill = "indianred3") +
  theme_minimal() +                                  # Gunakan tema minimal
  labs(title = "Marriage Participants by age")
Quantitative Kenel Density Plot

Quantitative Kenel Density Plot

Grafik diatas menunjukkan distribusi atas skor. Misalnya, proporsi kasus antara 20 dan 40 tahun akan diwakili oleh area di bawah kurva antara 20 dan 40 pada sumbu x. Seperti Chart sebelumnya, kita juga dapat menggunakan isian dan warna untuk menentukan isian dan warna batasnya.

1.2.3 Smoothing Parameter

ingkat kehalusan dikontrol oleh parameter bandwidth bw. Untuk menemukan nilai awal untuk variabel tertentu, gunakan fungsi bw.nrd0. Nilai yang lebih besar akan menghasilkan kehalusan yang lebih banyak, sedangkan nilai yang lebih kecil akan menghasilkan kehalusan yang lebih sedikit.

library(ggplot2)                                     # Untuk visualisasi
bw.nrd0(Marriage$age)                                # Bandwidth default untuk variabel usia
## [1] 5.181946
ggplot(Marriage, aes(x = age)) +
  geom_density(fill = "deepskyblue", 
               bw = 1) +
  theme_minimal() +                                  # Gunakan tema minimal
  labs(title = "Participants by age",
       subtitle = "bandwidth = 1")
Smoothing Parameter Plot

Smoothing Parameter Plot

Kernel density plots memungkinkan Anda dengan mudah melihat skor mana yang paling sering dan mana yang relatif jarang. Namun sulit untuk menjelaskan arti sumbu y kepada seorang non-ahli statistik. (Tapi itu akan membuatmu terlihat sangat pintar di pesta! hahaha).

1.2.4 Dot Chart

Alternatif lain untuk histogram adalah Dot Chart. ekali lagi, variabel kuantitatif dibagi menjadi beberapa kelompok, tetapi bukan ringkasan Bars, setiap pengamatan diwakili oleh sebuah titik. Secara default, lebar sebuah titik sama dengan lebar bin, dan titik-titik bertumpuk, dimana setiap titik mewakili satu observasi. Ini dapat bekerja dengan baik jika jumlah observasi kecil (katakanlah, kurang dari 150). Opsi isian dan warna dapat digunakan untuk menentukan isian dan batas warna masing-masing titik.

library(ggplot2)                                     # Untuk visualisasi
ggplot(Marriage, aes(x = age)) +
  geom_dotplot(fill = "gold", 
               color = "azure4",
               binwidth = 2) +
  theme_minimal() +                                  # Gunakan tema minimal
  labs(title = "Participants by age",
       y = "Proportion",
       x = "Age")
Dot Chart

Dot Chart

Masih banyak pilihan yang tersedia. Klik disini untuk penjelasan dan contohnya.

2 Bivariate Data

Grafik bivariat menampilkan hubungan antara dua variabel. Jenis grafik akan tergantung pada tingkat pengukuran variabel (kategorikal atau kuantitatif).

2.1 Categorical vs. Categorical

2.1.1 Stacked Bar Chart

Mari kita buat plot hubungan antara kelas mobil dan jenis penggerak (roda depan, roda belakang, atau 4 roda) untuk mobil di Kumpulan data ekonomi bahan bakar.

library(ggplot2)                                     # Untuk visualisasi
mpg$drv<-factor(mpg$drv, 
                levels = c("f", "r", "4"),
                labels = c("front-wheel", "rear-wheel", "4-wheel"))
# Diagram batang bertumpuk
ggplot(mpg, 
       aes(x = class, 
           fill = drv)) + 
  geom_bar(position = "fill") +
  theme_minimal() +                                  # Gunakan tema minimal
  labs(y = "Proportion")
Stacked Bar Chart

Stacked Bar Chart

2.1.2 Grouped Bar Chart

Bar charts yang dikelompokkan ditempatkan batang untuk variabel kategori kedua secara berdampingan. Untuk membuat plot Bars yang dikelompokkan, gunakan opsi position =" single ". Perhatikan bahwa opsi ini hanya tersedia di versi pengembangan terbaru ggplot2, tetapi akan segera tersedia secara umum.

library(ggplot2)                                     # Untuk visualisasi
ggplot(mpg, aes(x = class, fill = drv)) +
  theme_minimal() +                                  # Gunakan tema minimal
  geom_bar(position = position_dodge(preserve = "single"))
Grouped Bar Chart

Grouped Bar Chart

2.1.3 Segmented Bar Chart

Bar Plot tersegmentasi adalah Bar Plot bertumpuk dimana setiap batang mewakili 100 persen. Anda dapat membuat diagram batang tersegmentasi menggunakan opsi position = "filled". Jenis plot ini sangat berguna jika tujuannya adalah untuk membandingkan persentase kategori dalam satu variabel di setiap tingkat variabel lain. Misalnya, proporsi mobil dengan roda depan meningkat saat Anda beralih dari kompak, ke menengah, ke minivan.

library(dplyr)                                       # Untuk manipulasi data
library(ggplot2)                                     # Untuk visualisasi
library(scales)                                      # Otomatis menentukan break/labels
# Memuat ringkasan dataset (Manipulasi Data)
plotdata <- mpg %>%
  group_by(class, drv) %>%
  dplyr::summarize(n = n()) %>%
  mutate(pct = n/sum(n),
         lbl = scales::percent(pct))
# Memuat segmented bar chart
# Menambahkan label untuk setiap segmen
ggplot(plotdata, 
       aes(x = factor(class),
           y = pct,
        fill = factor(drv))) +
  geom_bar(stat = "identity",
           position = "fill") +
  scale_y_continuous(breaks = seq(0, 1, .2), 
                     label = percent)+
  geom_text(aes(label = lbl),
            size = 3,
            position = position_stack(vjust = 0.5)) +
  scale_fill_brewer(palette = "Set2") +
  theme_minimal() +                                  # Gunakan tema minimal
  labs(y = "Percent",
       fill = "Drive Train",
       x = "Class",
       title = "Automobile Drive by Class") +
  theme_minimal()
Segmented Bar Chart

Segmented Bar Chart

Catatan: Anda dapat menggunakan opsi tambahan untuk menambahkan/meningkatkan warna dan pelabelan. Seperti grafik di bawah ini :

  • factor mengubah urutan kategori untuk variabel kelas dan kedua urutan, serta *label untuk variabel drive.
  • scale_y_continuous mengubah label tanda centang sumbu y.
  • labs memberikan judul dan mengubah label untuk sumbu x dan y serta legenda.
  • scale_fill_brewer mengubah skema warna isian.
  • theme_minimal menghapus latar belakang abu-abu dan mengubah warna pinggiran.

Fungsi lainnya dibahas lebih lengkap pada bagian pada Bab Visualisasi Data Lanjutan.

2.1.4 Mosaic Plots

Mosaic Charts dapat menampilkan hubungan antara variabel kategori menggunakan persegi panjang yang luasnya mewakili proporsi kasus untuk kombinasi level tertentu. Warna ubin juga dapat menunjukkan hubungan derajat antar variabel.

Meskipun Mosaic Charts bisa dibuat dengan ggplot2 menggunakan package ggmosaic, Saya sarankan untuk menggunakan vcd package sebagai gantinya. Meskipun tidak akan membuat grafik ggplot2, package tersebut memberikan pendekatan yang lebih komprehensif untuk memvisualisasikan data kategorikal.

Orang-orang terpesona dengan Titanic (atau apakah dengan Leo? Hahaha). Dalam tragedi Titanic, peran apa yang dimainkan berdasarkan jenis kelamin dan kelas dalam bertahan hidup? Kita dapat memvisualisasikan hubungan antara ketiga variabel kategori ini dengan menggunakan kode di bawah ini.

# Membuat tabel
tbl <- xtabs(Freq ~ Survived +Class + Sex, Titanic)
ftable(tbl)
##                Sex Male Female
## Survived Class                
## No       1st        118      4
##          2nd        154     13
##          3rd        422    106
##          Crew       670      3
## Yes      1st         62    141
##          2nd         25     93
##          3rd         88     90
##          Crew       192     20
# Membuat mosaic plot dari tabel
library(vcd)
mosaic(tbl, main = "Titanic data")
Basic mosaic plot

Basic mosaic plot

Ukuran ubin sebanding dengan persentase kasus dalam kombinasi tingkat tersebut. Jelas lebih banyak penumpang yang tewas daripada yang selamat. Mereka yang tewas terutama adalah penumpang pria kelas 3 dan awak pria (kelompok terbesar).

Jika kita mengasumsikan bahwa ketiga variabel ini independen, kita dapat memeriksa residual dari model dan memberi warna pada ubin agar sesuai. Pada grafik di bawah ini, biru tua menunjukkan lebih banyak kasus daripada yang diharapkan jika diberikan kebebasan. Merah tua mewakili lebih sedikit kasus dari yang diharapkan jika kemerdekaan berlaku.

mosaic(tbl, 
       shade = TRUE,
       legend = TRUE,
       labeling_args = list(set_varnames = c(Sex = "Gender",
                                             Survived = "Survived",
                                             Class = "Passenger Class")),
       set_labels = list(Survived = c("No", "Yes"),
                         Class = c("1st", "2nd", "3rd", "Crew"),
                         Sex = c("F", "M")),
       main = "Titanic data")
Mosaic plot with shading

Mosaic plot with shading

Kita dapat melihat bahwa jika kelas, jenis kelamin, dan kelangsungan hidup yang independen, kita melihat lebih banyak awak laki-laki yang tewas, dan perempuan kelas 1, 2 dan 3 bertahan hidup daripada seperti yang diharapkan. Sebaliknya, jauh lebih sedikit penumpang kelas satu (pria dan wanita) yang meninggal daripada yang diperkirakan secara kebetulan. Dengan demikian asumsi kemerdekaan ditolak. (Spoiler Alert : Leo tidak berhasil.)

2.2 Continuous vs. Continuous

Hubungan antara dua variabel kuantitatif biasanya ditampilkan menggunakan Scatterplot dan grafik garis.

2.2.1 Scatterplot

Scatterplot dibuat untuk mempelajari hubungan antara 2 variabel. Sehingga seringkali disertai dengan perhitungan koefisien korelasi, yang biasanya mencoba mengukur hubungan linier. Namun jenis hubungan lain dapat dideteksi menggunakan scatterplot, dan tugas umumnya menyesuaikan model yang menjelaskan Y dalam fungsi X. Berikut adalah beberapa pola yang dapat Anda deteksi saat membuat Scatterplot.

library(ggplot2)                                   # Data visualisasi
library(hrbrthemes)                                # Untuk `theme_ipsum()` dan tulisan
# Membuat data
d1 <- data.frame(x=seq(1,100), 
                 y=rnorm(100), 
                 name="No trend")
d2 <- d1 %>% 
mutate(y=x*10 + rnorm(100,sd=60)) %>%
mutate(name="Linear relationship")
d3 <- d1 %>%
mutate(y=x^2 + rnorm(100,sd=140)) %>%
mutate(name="Square")
d4 <- data.frame( x=seq(1,10,0.1), 
                  y=sin(seq(1,10,0.1)) + 
                    rnorm(91,sd=0.6)) %>% 
mutate(name="Sin")
don <- do.call(rbind, list(d1, d2, d3, d4))
# Plot
don %>%
  ggplot(aes(x=x, y=y)) +
    geom_point(color="#69b3a2", alpha=0.8) +
    theme_ipsum() +
    facet_wrap(~name, scale="free")
relationship scatterplots

relationship scatterplots

Tampilan paling sederhana dari dua variabel kuantitatif adalah Scatterplot, dengan setiap variabel diwakili pada sumbu. Misalnya, dengan menggunakan kumpulan Data Gaji, kita dapat membuat plot pengalaman (yrs.since.phd) vs. gaji akademik (gaji) untuk Profesor perguruan tinggi.

library(ggplot2)                                     # Untuk visualisasi
library(scales)                                      # Otomatis menentukan break/labels
data(Salaries, package="carData")
# Menambahkan scatter plot
ggplot(Salaries, 
       aes(x = yrs.since.phd, 
           y = salary)) +
  geom_point(color="cornflowerblue", 
             size = 2, 
             alpha=.8) +
  scale_y_continuous(label = scales::dollar, 
                     limits = c(50000, 250000)) +
  scale_x_continuous(breaks = seq(0, 60, 10), 
                     limits=c(0, 60)) +
  theme_minimal() +                                  # Gunakan tema minimal
  labs(x = "Years Since PhD",
       y = "",
       title = "Experience vs. Salary",
       subtitle = "9-month salary for 2008-2009")
Scatterplot 1

Scatterplot 1

Catatan : Opsi geom_point dapat digunakan untuk mengubah :

  • color - Warna titik,
  • size - Ukuran titik,
  • shape - Bentuk titik,
  • alpha - Transparansi titik. Transparansi berkisar dari 0 (transparan) hingga 1 (buram), dan merupakan parameter yang berguna saat titik tumpang tindih.

Fungsi scale_x_continuous danscale_y_continuous mengontrol penskalaan masing-masing pada sumbu x dan y. Kita dapat menggunakan opsi dan fungsi ini untuk membuat Scatterplot yang lebih menarik.

2.2.2 Scatterplot Fit Lines

Seringkali berguna untuk meringkas hubungan yang ditampilkan di Scatterplot, menggunakan garis yang paling pas. Banyak jenis garis yang didukung, termasuk linier, polinomial, dan nonparametrik (loess). Secara default, batas kepercayaan 95% untuk garis-garis ini ditampilkan.

library(ggplot2)                                     # Untuk visualisasi
ggplot(Salaries,
       aes(x = yrs.since.phd, 
           y = salary)) +
  geom_point(color= "cornflowerblue") +
  geom_smooth(method = "lm", color = "brown1")+
  theme_minimal() +                                  # Gunakan tema minimal
  labs(x = "Years Since PhD",
       y = "",
       title = "Experience vs. Salary",
       subtitle = "9-month salary for 2008-2009")
Scatterplot Linear

Scatterplot Linear

Dengan jelas, gaji meningkat seiring pengalaman. Namun, tampaknya ada penurunan di ujung kanan - profesor dengan pengalaman signifikan, mendapatkan gaji lebih rendah. Garis lurus tidak menangkap efek non-linier ini. Garis dengan lengkungan akan lebih pas di sini.

Garis regresi polinomial memberikan garis kesesuaian dari form

\[\begin{equation} \label{eq:1} \hat{y}=\beta_0+\beta_1x+\beta_2x^2+\cdots+\beta_nx^2 \end{equation}\]

Biasanya garis kuadrat (satu tikungan), atau kubik (dua tikungan) digunakan. Sangat jarang perlu menggunakan urutan yang lebih tinggi \(( >3 )\) polynomials. Menerapkan kesesuaian kuadrat ke dataset gaji menghasilkan hasil sebagai berikut :

library(ggplot2)                                     # Untuk visualisasi
ggplot(Salaries, 
       aes(x = yrs.since.phd, 
           y = salary)) +
  geom_point(color= "cornflowerblue") +
  geom_smooth(method = "lm", 
              formula = y ~ poly(x, 2), 
              color = "yellow")+
  theme_minimal() +                                  # Gunakan tema minimal
  labs(x = "Years Since PhD",
       y = "",
       title = "Experience vs. Salary",
       subtitle = "9-month salary for 2008-2009")
Scatterplot Quadratic

Scatterplot Quadratic

Akhirnya, garis kesesuaian nonparametrik yang diperhalus sering kali dapat memberikan gambaran yang baik tentang hubungan tersebut. Default di ggplot2 adalah garis loess yang merupakan singkatan dari penghalusan scatterplot berbobot lokal.

library(ggplot2)                                     # Untuk visualisasi
ggplot(Salaries, 
       aes(x = yrs.since.phd, 
           y = salary)) +
  geom_point(color="cornflowerblue", 
             size = 2, 
             alpha = 1) +
  geom_smooth(size = 1,
              color = "green") +
  scale_y_continuous(label = scales::dollar, 
                     limits = c(50000, 250000)) +
  scale_x_continuous(breaks = seq(0, 60, 10), 
                     limits = c(0, 60)) +
  theme_minimal() +                                  # Gunakan tema minimal
  labs(x = "Years Since PhD",
       y = "",
       title = "Experience vs. Salary",
       subtitle = "9-month salary for 2008-2009") +
  theme_minimal()
Scatterplot Smoothed Nonparametric

Scatterplot Smoothed Nonparametric

2.3 Categorical vs. Continuous

Saat membuat plot hubungan antara variabel kategori dan variabel kuantitatif, tersedia banyak jenis grafik. Ini termasuk diagram batang yang menggunakan ringkasan statistik, Kernel Density plot yang dikelompokkan, Side-By-Side Box plot, Side-By-Side Violin plot, Mean/Sem plot, Ridgeline plot, dan Cleveland plot.

2.3.1 Bar Chart

Di bagian sebelumnya, Bar Charts digunakan untuk menampilkan jumlah kasus berdasarkan kategori untuk satu variabel atau dua variabel. Anda juga dapat menggunakan diagram batang untuk menampilkan ringkasan statistik lainnya (misalnya, mean atau median) pada variabel kuantitatif untuk setiap tingkat variabel kategori.

Misalnya, grafik berikut menampilkan gaji rata-rata untuk sampel profesor universitas menurut peringkat akademis mereka.

library(dplyr)                                       # Untuk manipulasi data
library(ggplot2)                                     # Untuk visualisasi
library(scales)                                      # Otomatis menentukan break/label
data(Salaries, package="carData")
# Menghitung rata - rata gaji untuk setiap peringkat
plotdata <- Salaries %>%
  group_by(rank) %>%
  dplyr::summarize(mean_salary = mean(salary))
# Plot rata - rata gaji dengan cara yang lebih menarik
mycols <- c("#CD534CFF", "#EFC000FF", "#0073C2FF")
ggplot(plotdata, 
       aes(x = factor(rank,
                      labels = c("Assistant\nProfessor",
                                 "Associate\nProfessor",
                                 "Full\nProfessor")), 
                      y = mean_salary)) +
  geom_bar(stat = "identity", 
           fill = mycols) +
  geom_text(aes(label = dollar(mean_salary)), 
            vjust = -0.25) +
  scale_y_continuous(breaks = seq(0, 130000, 20000), 
                     label = dollar) +
  theme_minimal() +                                  # Gunakan tema minimal
  labs(title = "Mean Salary by Rank", 
       subtitle = "9-month academic salary for 2008-2009",
       x = "",
       y = "")
Bar Chart (Summary statistics)

Bar Chart (Summary statistics)

2.3.2 Grouped Kernel Density Plots

Seseorang dapat membandingkan grup pada variabel numerik dengan meletakkan plot Kernel Density dalam satu grafik. Mari kita buat plot distribusi gaji dengan peringkat menggunakan Kernel Density plot.

ggplot(Salaries, 
       aes(x = salary, 
           fill = rank)) +
  geom_density(alpha = 0.4) +
  theme_minimal() +
  labs(title = "Salary distribution by rank")
Grouped Kernel Density Plots

Grouped Kernel Density Plots

Opsi alpha membuat Kernel Density plot transparan sebagian, sehingga kita dapat melihat apa yang terjadi di bawah area yang tumpang tindih. Nilai alfa berkisar dari 0 (transparan) hingga 1 (buram). Grafik tersebut menjelaskan bahwa, secara umum, gaji naik sesuai pangkat. Namun, kisaran gaji untuk profesor sangat luas.

2.3.3 Box Plots

Box Plot menampilkan \(25^{th}\) persentil, median, dan \(75^{th}\) persentil dari sebuah distribusi. The Whiskers (garis vertikal) menangkap sekitar 99% dari distribusi normal, dan pengamatan di luar rentang ini diplot sebagai titik yang mewakili outlier (lihat gambar di bawah) :

Box Plots

Box Plots

Side-by-side box plots sangat berguna untuk membandingkan grup (yaitu, level variabel kategori) pada variabel numerik. Mari kita buat plot distribusi gaji dengan peringkat menggunakan Box-Plots. Notched Box-Plots memberikan metode perkiraan untuk memvisualisasikan apakah kelompok berbeda. Meskipun bukan tes formal, jika notches dari two Box-Plots tidak tumpang tindih, ada bukti kuat (kepercayaan 95%) bahwa median dari kedua kelompok berbeda.

mycols <- c("#CD534CFF", "#EFC000FF", "#0073C2FF")
ggplot(Salaries, aes(x = rank, 
                     y = salary)) +
  geom_boxplot(notch = TRUE, 
               fill = mycols, 
               alpha = .7) +
  theme_minimal() +
  labs(title = "Salary Distribution by rank")
Box Plots

Box Plots

Dalam contoh di atas, ketiga kelompok tersebut tampak berbeda. Salah satu keuntungan dari Box-Plots adalah lebar yang biasanya tidak berarti. Ini memungkinkan Anda membandingkan distribusi banyak grup dalam satu grafik.

2.3.4 Violin Plots

Violin Plots mirip dengan plot kernel density tetapi dicerminkan dan diputar \(90^0\). Mari kita plot distribusi gaji dengan peringkat menggunakan Violin Plots.

ggplot(Salaries, 
       aes(x = rank, 
           y = salary)) +
  geom_violin(fill = "azure1") +
  geom_boxplot(width = .2, 
               fill = mycols,
               outlier.color = "red",
               outlier.size = 2) + 
  theme_minimal() +
  labs(title = "Salary distribution by rank")
Violin Plots

Violin Plots

2.3.5 Ridgeline Plots

Ridgeline Plot (Disebut juga Joy Plot) menampilkan distribusi variabel kuantitatif untuk beberapa kelompok. Mereka mirip dengan plot kernel density dengan vertikal faceting, tetapi memakan lebih sedikit ruang. Plot ridgeline dibuat dengan package ggridges.

Menggunakan dataset Fuel economy, mari kita buat plot distribusi mil perjalanan kota per galon menurut kelas mobil.

library(dplyr)                                       # Untuk manipulasi data
library(ggplot2)                                     # Untuk visualisasi
library(ggridges)                                    # untuk menangani visualisasi yang tumpang tindih
## Warning: package 'ggridges' was built under R version 4.0.3
ggplot(mpg, 
       aes(x = cty, 
           y = class, 
           fill = class)) +
  geom_density_ridges(alpha = 0.7) + 
  theme_ridges() +
  labs("Highway mileage by auto class") +
  theme(legend.position = "none")
Ridgeline Plots

Ridgeline Plots

Saya telah menyembunyikan tulisan di sini karena itu berlebihan (distribusinya sudah diberi label pada sumbu y). Tidak heran, truk pick up memiliki jarak tempuh yang paling rendah, sementara subcompact dan compact cenderung mencapai peringkat. Namun, ada rentang skor jarak tempuh yang sangat luas untuk mobil - mobil kecil ini.

Perhatikan kemungkinan tumpang tindih distribusi adalah trade-off untuk grafik yang lebih kompak. Anda dapat menambahkan transparansi jika tumpang tindih cukup parah menggunakan geom_density_ridges(alpha = n), dengan n berkisar dari 0 (transparan) hingga 1 (buram). Lihat package vingnette untuk lebih jelasnya.

2.3.6 Line Plots

Metode populer untuk membandingkan grup pada variabel numerik adalah plot rata-rata dengan Error Bar. Error bar dapat mewakili deviasi standar, error standar mean, atau interval kepercayaan. Di bagian ini, kami akan buat plot mean dan standard errors. Kita dapat menggunakan teknik yang sama untuk membandingkan gaji berdasarkan pangkat dan jenis kelamin. (Secara teknis, ini bukan bivariat karena kita plotting pangkat, jenis kelamin, dan gaji, tetapi tampaknya cocok di sini).

library(dplyr)                                       # Untuk manipulasi data
library(ggplot2)                                     # Untuk visualisasi
library(ggridges)                                    # Untuk menangani visualisasi yang tumpang tindih
# Menghitung mean, standar deviasi,
# Standar error, dan tingkat kepercayaan 95%
# Interval menurut peringkat
plotdata <- Salaries %>%
  group_by(rank, sex) %>%
  dplyr::summarize(n = n(),
            mean = mean(salary),
            sd = sd(salary),
            se = sd/sqrt(n),
            ci = qt(0.975, df = n - 1) * sd / sqrt(n))
# Peningkatan plot means/standard error
pd <- position_dodge(0.2)
ggplot(plotdata, 
       aes(x = factor(rank, 
                      labels = c("Assistant\nProfessor",
                                 "Associate\nProfessor",
                                 "Full\nProfessor")), 
           y = mean, 
           group=sex, 
           color=sex)) +
  geom_point(position=pd, 
             size = 3) +
  geom_line(position = pd, 
            size = 1) +
  geom_errorbar(aes(ymin = mean - se, 
                    ymax = mean + se), 
                width = .1, 
                position = pd, 
                size = 1) +
  scale_y_continuous(label = scales::dollar) +
  scale_color_brewer(palette="Set1") +
  theme_minimal() +
  labs(title = "Mean salary by rank and sex",
       subtitle = "(mean +/- standard error)",
       x = "", 
       y = "",
       color = "Gender")
Line Plots

Line Plots

2.3.7 Strip Plots

Hubungan antara variabel pengelompokan dan variabel numerik dapat ditampilkan dengan Scatter Plot. Misalnya, plot distribusi gaji menurut peringkat menggunakan Strip Plot. Scatter Plot satu dimensi disebut dengan Strip Plot. Sayangnya, pencetakan poin yang berlebihan membuat interpretasi menjadi sulit. Hubungannya lebih mudah dilihat jika titik-titiknya goyah. Pada dasarnya nomor acak kecil ditambahkan ke setiap koordinat y. Juga lebih mudah untuk membandingkan kelompok jika kita menggunakan warna.

library(ggplot2)                                     # Untuk visualisasi
library(scales)                                      # Infrastruktur penskalaan
ggplot(Salaries, 
       aes(y = factor(rank,
                      labels = c("Assistant\nProfessor",
                                 "Associate\nProfessor",
                                 "Full\nProfessor")), 
           x = salary, 
           color = rank)) +
  geom_jitter(alpha = 0.7,
              size = 1.5) + 
  scale_x_continuous(label = dollar) +
  labs(title = "Academic Salary by Rank", 
       subtitle = "9-month salary for 2008-2009",
       x = "",
       y = "") +
  theme_minimal() +
  theme(legend.position = "none")
Strip Plots

Strip Plots

Opsi legend.position =" none " digunakan untuk menyembunyikan tulisan (yang tidak diperlukan di sini). Jittered Plot bekerja dengan baik jika jumlah poin tidak terlalu besar.

2.3.8 Jitter and Boxplots

Mungkin lebih mudah untuk memvisualisasikan distribusi jika kita menambahkan boxplots untuk plot jitter. Beberapa opsi ditambahkan untuk membuat plot ini :

  • Untuk the boxplot:
    • size = 1 membuat garis lebih tebal.
    • outlier.color =" black " membuat outlier menjadi hitam.
    • outlier.shape = 1 menentukan lingkaran untuk outlier.
    • outlier.size = 3 meningkatkan ukuran outlier.
  • Untuk jitter:
    • alpha = 0.5 membuat poin lebih transparan.
    • width = .2 mengurangi jumlah jitter (.4 adalah defaultnya).

Sehingga, sumbu \(x\) and \(y\) diputar menggunakan fungsi coord_flip (Yaitu, grafik diputar pada sisinya).

library(ggplot2)                                     # Untuk visualisasi
library(scales)                                      # Infrastruktur penskalaan
ggplot(Salaries, 
       aes(x = factor(rank,
                      labels = c("Assistant\nProfessor",
                                 "Associate\nProfessor",
                                 "Full\nProfessor")), 
           y = salary, 
           color = rank)) +
  geom_boxplot(size=1,
               outlier.shape = 1,
               outlier.color = "black",
               outlier.size  = 3) +
  geom_jitter(alpha = 0.5, 
              width=.2) + 
  scale_y_continuous(label = dollar) +
  labs(title = "Academic Salary by Rank", 
       subtitle = "9-month salary for 2008-2009",
       x = "",
       y = "") +
  theme_minimal() +
  theme(legend.position = "none") +
  coord_flip()
Combining Jitter and Boxplots 1

Combining Jitter and Boxplots 1

Sebelum melanjutkan, ada baiknya memanggil fungsi geom_boxjitter yang disediakan di package ggpol. Ini membuat hybrid boxplot - setengah boxplot, setengah scatterplot.

library(ggplot2)                                     # Untuk visualiasai
library(scales)                                      # Infrastruktur Penskalaan
library(ggpol)                                       # hybrid boxplot - setengah scatterplot
## Warning: package 'ggpol' was built under R version 4.0.3
ggplot(Salaries, 
       aes(x = factor(rank,
                      labels = c("Assistant\nProfessor",
                                 "Associate\nProfessor",
                                 "Full\nProfessor")), 
           y = salary, 
           fill=rank)) +
  geom_boxjitter(color="black",
                 jitter.color = "darkgrey",
                 errorbar.draw = TRUE) +
  scale_y_continuous(label = dollar) +
  labs(title = "Academic Salary by Rank", 
       subtitle = "9-month salary for 2008-2009",
       x = "",
       y = "") +
  theme_minimal() +
  theme(legend.position = "none")
Combining Jitter and Boxplots 2

Combining Jitter and Boxplots 2

2.3.9 Beeswarm Plots

Beeswarm Plot (disebut juga violin scatter plot) mirip dengan jittered scatterplots, bahwa mereka menampilkan distribusi variabel kuantitatif dengan memplot poin dengan cara yang mengurangi tumpang tindih. Selain itu, mereka juga membantu menampilkan kepadatan data di setiap titik (dengan cara yang mirip dengan violin plot). Melanjutkan contoh sebelumnya :

library(ggplot2)                                     # Untuk visualisasi
library(scales)                                      # Infrastruktur penskalaan
library(ggbeeswarm)                                  # Mengurangi tumpang tindih
## Warning: package 'ggbeeswarm' was built under R version 4.0.3
ggplot(Salaries, 
       aes(x = factor(rank,
                      labels = c("Assistant\nProfessor",
                                 "Associate\nProfessor",
                                 "Full\nProfessor")), 
           y = salary, 
           color = rank)) +
  geom_quasirandom(alpha = 0.7,
                   size = 1.5) + 
  scale_y_continuous(label = dollar) +
  labs(title = "Academic Salary by Rank", 
       subtitle = "9-month salary for 2008-2009",
       x = "",
       y = "") +
  theme_minimal() +
  theme(legend.position = "none")
Beeswarm Plots

Beeswarm Plots

Plot dibuat menggunakan fungsi geom_quasirandom. Plot ini bisa lebih mudah dibaca daripada jittered strip plot. TUntuk mempelajari lebih lanjut tentang plot ini, lihat Beeswarm-Style Plot dengan ggplot2.

2.3.10 Cleveland Dot Charts

Cleveland plots berguna saat Anda ingin membandingkan statistik numerik untuk grup dalam jumlah besar. Misalnya, Anda ingin membandingkan angka harapan hidup tahun 2007 untuk negara Asia menggunakan dataset gapminder.

library(dplyr)                                       # Untuk manipulasi data
library(ggplot2)                                     # Untuk visualisasi
library(scales)                                      # Infrastruktur Penskalaan
library(ggbeeswarm)                                  # Mengurangi tumpang tindih
library(gapminder)                                   # Untuk dataset `gapminder`
## Warning: package 'gapminder' was built under R version 4.0.3
data(gapminder, package="gapminder")                 # Memuat dataset `gapminder` 
# Membagi negara Asia di 2007
library(dplyr)
plotdata <- gapminder %>%
  filter(continent == "Asia" & 
         year == 2007)
# Membuat Cleveland plot yang lebih bagus
ggplot(plotdata, 
       aes(x=lifeExp, 
           y=reorder(country, lifeExp))) +
  geom_point(color="blue", 
             size = 2) +
  geom_segment(aes(x = 40, 
               xend = lifeExp, 
               y = reorder(country, lifeExp), 
               yend = reorder(country, lifeExp)),
               color = "azure3") +
  labs (x = "Life Expectancy (years)",
        y = "",
        title = "Life Expectancy by Country",
        subtitle = "GapMinder data for Asia - 2007") +
  theme_minimal() + 
  theme(panel.grid.major = element_blank(),
        panel.grid.minor = element_blank())
Beeswarm Plots

Beeswarm Plots

Jepang jelas memiliki angka harapan hidup tertinggi, sedangkan Afghanistan sejauh ini paling rendah. Plot terakhir ini disebut juga grafik lollipop.

3 Multivariate Data

Grafik multivariasi menampilkan hubungan antara tiga variabel atau lebih. Ada dua metode umum untuk mengakomodasi banyak variabel : pengelompokan dan faceting.

3.1 Grouping

Dalam pengelompokan, nilai dari dua variabel pertama dipetakan ke sumbu x dan y. Kemudian variabel tambahan dipetakan ke karakteristik visual lainnya seperti warna, bentuk, ukuran, jenis garis, dan transparansi. Pengelompokan memungkinkan Anda untuk membuat plot data beberapa grup dalam satu grafik. Menggunakan dataset Salaries, Mari kita tampilkan hubungan antara yrs.since.phd dan gaji.

library(carData)                                     # Untuk dataset
library(ggplot2)                                     # Untuk visualisasi
data(Salaries, package="carData")
ggplot(Salaries, aes(x = yrs.since.phd, 
                     y = salary, 
                     color=rank)) +
  geom_point() +
  theme_minimal() +
  labs(title = "Academic salary by rank and years since degree")
Multivariate Grouping Plot 1

Multivariate Grouping Plot 1

Selanjutnya, tambahkan jenis kelamin profesor, menggunakan bentuk titik untuk menunjukkan jenis kelamin. Kita akan meningkatkan ukuran poin dan menambahkan transparansi untuk memperjelas poin individu.

library(carData)                                     # Untuk dataset
library(ggplot2)                                     # Untuk visualisasi
ggplot(Salaries, 
       aes(x = yrs.since.phd, 
           y = salary, 
           color = rank, 
           shape = sex)) +
  geom_point(size = 3, alpha = .6) +
  theme_minimal() +
  labs(title = "Academic salary by rank, sex, and years since degree")
Multivariate Grouping Plot 2

Multivariate Grouping Plot 2

Kita tidak bisa mengatakan bahwa ini adalah grafik yang baik. Ini sangat padat, dan mungkin sulit untuk membedakan antara profesor pria dari wanita. Faceting (dijelaskan di bagian selanjutnya) mungkin akan menjadi pendekatan yang lebih baik.

Perhatikan perbedaan antara menetapkan nilai konstan (seperti size = 3) dan pemetaan variabel ke karakteristik visual (misalnya, color = rank). Pemetaan selalu ditempatkan di dalam fungsi aes, sedangkan penetapan nilai konstanta selalu muncul di luar fungsi aes.

Berikut adalah contoh yang lebih jelas. Kami akan membuat grafik hubungan antara tahun sejak Ph.D. dan gaji yang menggunakan ukuran poin untuk menunjukkan masa kerja. Ini disebut bubble plot.

library(carData)                                     # Untuk dataset
library(ggplot2)                                     # Untuk visualisasi
ggplot(Salaries, 
       aes(x = yrs.since.phd, 
           y = salary, 
           color = rank, 
           size = yrs.service)) +
  geom_point(alpha = .8) +
  theme_minimal() +
  labs(title = "Academic salary by rank, years of service, and years since degree")
Multivariate Grouping Plot 3

Multivariate Grouping Plot 3

Terlihat jelas ada hubungan positif yang kuat antara tahun-tahun sejak Ph.D. dan tahun layanan. Asisten Profesor jatuh dalam 0-11 tahun sejak Ph.D. dan layanan jangkauan 0-10 tahun. Profesional yang jelas sangat berpengalaman tidak hanya berada di level Asisten Profesor (mereka mungkin dipromosikan atau keluar dari Universitas). Kita tidak menemukan batasan waktu yang sama antara Associate dan Full Professor. Bubble plots dijelaskan lebih detail di bab selanjutnya.

Sebagai contoh terakhir, mari kita lihat yrs.since.phd vs gaji dan tambahkan jenis kelamin menggunakan warna dan quadratic best fit lines.

library(carData)                                     # Untuk dataset
library(ggplot2)                                     # Untuk visualisasi
ggplot(Salaries, 
       aes(x = yrs.since.phd, 
           y = salary, 
           color = sex)) +
  geom_point(alpha = .4, 
             size = 3) +
  geom_smooth(se=FALSE, 
              method = "lm", 
              formula = y~poly(x,2), 
              size = 1.5) +
  labs(x = "Years Since Ph.D.",
       title = "Academic Salary by Sex and Years Experience",
       subtitle = "9-month salary for 2008-2009",
       y = "",
       color = "Sex") +
  scale_y_continuous(label = scales::dollar) +
  scale_color_brewer(palette = "Set1") +
  theme_minimal()
Multivariate Grouping Plot 4

Multivariate Grouping Plot 4

3.2 Faceting

3.2.1 Faceting 1

Pengelompokan memungkinkan Anda untuk membuat plot beberapa variabel dalam satu grafik, menggunakan karakteristik visual seperti warna, bentuk, dan ukuran. Dalam faceting, grafik terdiri dari beberapa plot terpisah atau kelipatan kecil, satu untuk setiap tingkat variabel ketiga, atau kombinasi variabel. Akan mudah untuk memahami ini dengan sebuah contoh.

library(carData)                                     # Untuk dataset
library(ggplot2)                                     # Untuk visualisasi
ggplot(Salaries, aes(x = salary)) +
  geom_histogram(fill = "cornflowerblue",
                 color = "white") +
  facet_wrap(~rank, ncol = 1) +
  theme_minimal() +
  labs(title = "Salary histograms by rank")
Multivariate Faceting 1

Multivariate Faceting 1

Fungsi facet_wrap untuk membuat grafik terpisah untuk setiap tingkat peringkat. Opsi ncol untuk mengontrol jumlah kolom. Di contoh berikutnya, dua variabel digunakan untuk mendefinisikan faceting.

3.2.2 Faceting 2

Di sini, fungsi menetapkan jenis kelamin ke baris dan peringkat ke kolom, membuat matriks 6 plot dalam satu grafik.

library(carData)                                     # Untuk dataset
library(ggplot2)                                     # Untuk visualisasi
ggplot(Salaries, aes(x = salary / 1000)) +
  geom_histogram(color = "white",
                 fill = "cornflowerblue") +
  facet_grid(sex ~ rank) +
  theme_minimal() +
  labs(title = "Salary histograms by sex and rank",
       x = "Salary ($1000)")
Multivariate Faceting 2

Multivariate Faceting 2

3.2.3 Faceting 3

Kami juga dapat menggabungkan pengelompokan dan faceting. Mari kita gunakan plot Mean / SE dan faceting untuk membandingkan gaji profesor pria dan wanita, dalam pangkat dan disiplin. Kami akan menggunakan warna untuk membedakan jenis kelamin dan faceting untuk membuat plot peringkat berdasarkan kombinasi disiplin.

library(carData)                                     # Untuk dataset
library(ggplot2)                                     # Untuk visualisasi
library(dplyr)                                       # Untuk manipulasi data
# Menghitung mean dan standard error berdasarkan jenis kelamin,
# Peringkat dan kedisiplinan
plotdata <- Salaries %>%
  group_by(sex, rank, discipline) %>%
  dplyr::summarize(n = n(),
            mean = mean(salary),
            sd = sd(salary),
            se = sd / sqrt(n))
# Membuat label yang lebih baik untuk kedisplinan
plotdata$discipline <- factor(plotdata$discipline,
                              labels = c("Theoretical",
                                         "Applied"))
# create plot
ggplot(plotdata, 
       aes(x = sex, 
           y = mean,
           color = sex)) +
  geom_point(size = 3) +
  geom_errorbar(aes(ymin = mean - se, 
                    ymax = mean + se),
                width = .1) +
  scale_y_continuous(breaks = seq(70000, 140000, 10000),
                     label = scales::dollar) +
  facet_grid(. ~ rank + discipline) +
  theme_bw() +
  theme(legend.position = "none",
        panel.grid.major.x = element_blank(),
        panel.grid.minor.y = element_blank()) +
  labs(x="", 
       y="", 
       title="Nine month academic salaries by gender, discipline, and rank",
       subtitle = "(Means and standard errors)") +
  scale_color_brewer(palette="Set1")
Multivariate Faceting 3

Multivariate Faceting 3

Pernyataan facet_grid(. ~ rank + discipline) tidak menentukan variabel baris dan kolom yang ditentukan oleh kombinasi peringkat dan disiplin.

Fungsi theme () membuat tema hitam dan putih dan menghilangkan garis grid vertikal dan garis grid horizontal minor. Fungsi scale_color_brewer () mengubah skema warna untuk titik dan error bar.

Dipenglihatan awal, tampaknya ada perbedaan gender dalam gaji untuk associate dan full profesor waktu di bidang teoritis. Saya berkata “mungkin” karena kita belum melakukan pengujian hipotesis formal (ANCOVA dalam kasus ini). Lihat bagian Customizing untuk mempelajari lebih lanjut tentang bagaimana menyesuaikan tampilan grafik.

3.2.4 Faceting 4

Sebagai contoh terakhir, kita akan beralih ke kumpulan data baru dan memetakan perubahan harapan hidup dari waktu ke waktu untuk negara-negara di “Asia”. Data tersebut berasal dari dataset gapminder dalam package gapminder. Setiap negara muncul dalam fasetnya sendiri. Fungsi tema digunakan untuk menyederhanakan warna latar belakang, memutar teks sumbu x, dan memperkecil ukuran font.

library(gapminder)                                   # Untuk dataset
library(ggplot2)                                     # Untuk visualisasi
library(dplyr)                                       # Untuk data manipulasi
# plot harapan hidup menurut tahun secara terpisah 
# untuk setiap negara di Amerika
data(gapminder, package = "gapminder")

# Pilih data Amerika
plotdata <- dplyr::filter(gapminder, 
                          continent == "Asia")

# plot harapan hidup menurut tahun, untuk setiap negara
ggplot(plotdata, aes(x=year, y = lifeExp)) +
  geom_line(color="grey") +
  geom_point(color="blue") +
  facet_wrap(~country) + 
  theme_minimal(base_size = 9) +
  theme(axis.text.x = element_text(angle = 45, 
                                   hjust = 1)) +
  labs(title = "Changes in Life Expectancy",
       x = "Year",
       y = "Life Expectancy") 
Multivariate Faceting 4

Multivariate Faceting 4