Pengantar

R Markdown adalah alat yang sangat berguna untuk membuat laporan dinamis dan interaktif dengan bahasa pemrograman R. Dengan menggunakan RMarkdown, kita dapat menggabungkan teks, kode R, dan output dari kode tersebut (seperti grafik dan tabel) dalam satu dokumen yang mudah dibaca. Pada latihan sederhana, kita belajar bersama pengantar sederhana tentang bagaimana menggunakan RMarkdown dengan dataset bawaan R, yaitu cars.

1. Membaca Data

Mari kita mulai dengan membuat dokumen RMarkdown. Dalam dokumen ini, kita dapat menjalankan kode R langsung dan menghasilkan outputnya. Misalnya, untuk menampilkan data cars, kita cukup menulis kode berikut:

data(cars)

Selanjutnya, kita eksplorasi sederhana data tersebut. Kita hendak menggunakan fungsi str, summary, head, tail, dim, nrow, ncol, names, glimpse, describe, dfSummary(). Perincian dari masing-masing fungsi secara sekilas adalah sebagai berikut.

  1. head() dan tail()

    head(cars): Menampilkan beberapa baris pertama dari dataset (default 6 baris).

    tail(cars): Menampilkan beberapa baris terakhir dari dataset (default 6 baris).

Fungsi ini membantu untuk mendapatkan gambaran sekilas tentang konten dataset.

head(cars) # Menampilkan beberapa baris pertama dari dataset (default 6 baris).
##   speed dist
## 1     4    2
## 2     4   10
## 3     7    4
## 4     7   22
## 5     8   16
## 6     9   10
tail(cars) # Menampilkan beberapa baris pertama dari dataset (default 6 baris).
##    speed dist
## 45    23   54
## 46    24   70
## 47    24   92
## 48    24   93
## 49    24  120
## 50    25   85
  1. dim()

    dim(cars): Menampilkan dimensi dari dataset, yaitu jumlah baris dan kolom.

dim(cars) #Menampilkan dimensi dari dataset, yaitu jumlah baris dan kolom. 
## [1] 50  2

Fungsi ini membantu mengetahui ukuran dataset secara cepat.

  1. nrow() dan ncol()

    nrow(cars): Menampilkan jumlah baris dalam dataset.

    ncol(cars): Menampilkan jumlah kolom dalam dataset.

nrow(cars) # Menampilkan jumlah baris dalam dataset.
## [1] 50
ncol(cars) # Menampilkan jumlah kolom dalam dataset.
## [1] 2

Berguna untuk mengecek seberapa banyak baris (observasi) dan kolom (variabel) dalam dataset.

nrow(cars)
## [1] 50
ncol(cars)
## [1] 2
  1. names() atau colnames()

    names(cars) atau colnames(cars): Menampilkan nama-nama kolom atau variabel dalam dataset.

names(cars)
## [1] "speed" "dist"
colnames(cars)
## [1] "speed" "dist"

Membantu untuk melihat daftar nama kolom secara langsung.

  1. glimpse() (dari paket dplyr)

    glimpse(cars): Memberikan tampilan struktur data seperti str(), tetapi dengan output yang lebih ringkas dan lebih mudah dibaca. Sering digunakan dalam eksplorasi data.

library(dplyr)
glimpse(cars)
## Rows: 50
## Columns: 2
## $ speed <dbl> 4, 4, 7, 7, 8, 9, 10, 10, 10, 11, 11, 12, 12, 12, 12, 13, 13, 13…
## $ dist  <dbl> 2, 10, 4, 22, 16, 10, 18, 26, 34, 17, 28, 14, 20, 24, 28, 26, 34…
  1. describe() (dari paket Hmisc)

    describe(cars) digunkan untuk menampilkan deskripsi statistik lebih mendalam untuk setiap variabel dalam dataset, termasuk jumlah nilai yang hilang, frekuensi, dan lain-lain. Kelebihan dari fungsi describe() lebih detail dibandingkan summary().

library("Hmisc")
describe(cars)
## cars 
## 
##  2  Variables      50  Observations
## --------------------------------------------------------------------------------
## speed 
##        n  missing distinct     Info     Mean      Gmd      .05      .10 
##       50        0       19    0.996     15.4    6.077      7.0      8.9 
##      .25      .50      .75      .90      .95 
##     12.0     15.0     19.0     23.1     24.0 
##                                                                            
## Value         4    7    8    9   10   11   12   13   14   15   16   17   18
## Frequency     2    2    1    1    3    2    4    4    4    3    2    3    4
## Proportion 0.04 0.04 0.02 0.02 0.06 0.04 0.08 0.08 0.08 0.06 0.04 0.06 0.08
##                                         
## Value        19   20   22   23   24   25
## Frequency     3    5    1    1    4    1
## Proportion 0.06 0.10 0.02 0.02 0.08 0.02
## 
## For the frequency table, variable is rounded to the nearest 0
## --------------------------------------------------------------------------------
## dist 
##        n  missing distinct     Info     Mean      Gmd      .05      .10 
##       50        0       35    0.999    42.98    28.85    10.00    15.80 
##      .25      .50      .75      .90      .95 
##    26.00    36.00    56.00    80.40    88.85 
## 
## lowest :   2   4  10  14  16, highest:  84  85  92  93 120
## --------------------------------------------------------------------------------
  1. summarytools::dfSummary()

    dfSummary(cars) Menampilkan ringkasan yang sangat mendetail dari dataset, termasuk tipe data, distribusi, frekuensi nilai yang hilang, dan lain-lain dalam bentuk yang mudah dipahami.

library(summarytools)
dfSummary(cars)
## Data Frame Summary  
## cars  
## Dimensions: 50 x 2  
## Duplicates: 1  
## 
## -------------------------------------------------------------------------------------------------
## No   Variable    Stats / Values           Freqs (% of Valid)   Graph         Valid      Missing  
## ---- ----------- ------------------------ -------------------- ------------- ---------- ---------
## 1    speed       Mean (sd) : 15.4 (5.3)   19 distinct values       : :       50         0        
##      [numeric]   min < med < max:                                  : :       (100.0%)   (0.0%)   
##                  4 < 15 < 25                                       : :                           
##                  IQR (CV) : 7 (0.3)                              : : : :                         
##                                                                . : : : :                         
## 
## 2    dist        Mean (sd) : 43 (25.8)    35 distinct values     :           50         0        
##      [numeric]   min < med < max:                                :           (100.0%)   (0.0%)   
##                  2 < 36 < 120                                  : : :                             
##                  IQR (CV) : 30 (0.6)                           : : : .                           
##                                                                : : : : : .                       
## -------------------------------------------------------------------------------------------------

2. Visualisasi Data

  1. Plot Sederhana Kita mulai dengan plot sederhana dari data cars, yaitu hubungan antara kecepatan (speed) dan jarak berhenti (dist).
plot(cars$speed, cars$dist, 
     main = "Kecepatan vs Jarak Berhenti",
     xlab = "Kecepatan (mph)", 
     ylab = "Jarak Berhenti (feet)")

  1. Menambahkan Warna dan Simbol Untuk membuat plot lebih menarik, kita bisa menambahkan warna dan simbol berbeda untuk titik-titik pada plot.
plot(cars$speed, cars$dist, 
     main = "Kecepatan vs Jarak Berhenti",
     xlab = "Kecepatan (mph)", 
     ylab = "Jarak Berhenti (feet)",
     col = "blue", pch = 19)

col = "blue": Menambahkan warna biru pada titik. pch = 19: Mengganti simbol titik menjadi lingkaran solid.

  1. Menambahkan Garis Tren Untuk memberikan lebih banyak informasi, kita bisa menambahkan garis tren menggunakan fungsi abline() setelah melakukan regresi linear.
plot(cars$speed, cars$dist, 
     main = "Kecepatan vs Jarak Berhenti dengan Garis Tren",
     xlab = "Kecepatan (mph)", 
     ylab = "Jarak Berhenti (feet)",
     col = "blue", pch = 19)
abline(lm(dist ~ speed, data = cars), col = "red", lwd = 2)

  1. Menambahkan Grid Grid membuat plot lebih mudah dibaca, terutama ketika melihat data yang tersebar.
plot(cars$speed, cars$dist, 
     main = "Kecepatan vs Jarak Berhenti dengan Garis Tren dan Grid",
     xlab = "Kecepatan (mph)", 
     ylab = "Jarak Berhenti (feet)",
     col = "blue", pch = 19)
abline(lm(dist ~ speed, data = cars), col = "red", lwd = 2)
grid()

grid(): Menambahkan grid ke plot untuk membantu visualisasi.

  1. Menambahkan Label untuk Titik Data Untuk menambahkan label pada beberapa titik yang menarik, kita bisa menggunakan fungsi text().
plot(cars$speed, cars$dist, 
     main = "Kecepatan vs Jarak Berhenti dengan Label",
     xlab = "Kecepatan (mph)", 
     ylab = "Jarak Berhenti (feet)",
     col = "blue", pch = 19)
abline(lm(dist ~ speed, data = cars), col = "red", lwd = 2)
grid()

# Menambahkan label untuk beberapa titik data
text(cars$speed, cars$dist, labels = rownames(cars), pos = 4, cex = 0.6)

text() : Menambahkan label untuk setiap titik data. pos = 4 : Menempatkan label di sebelah kanan titik. cex = 0.6 : Mengatur ukuran teks label.

  1. Menggunakan ggplot2 untuk Plot yang Lebih Menarik

Untuk membuat plot lebih elegan, kita bisa menggunakan paket ggplot2. Ini memberikan lebih banyak kontrol atas tampilan grafik.

library(ggplot2)
ggplot(cars, aes(x = speed, y = dist)) +
  geom_point(color = "blue", size = 3) + 
  geom_smooth(method = "lm", color = "red", se = FALSE) +
  ggtitle("Kecepatan vs Jarak Berhenti") +
  xlab("Kecepatan (mph)") + 
  ylab("Jarak Berhenti (feet)") +
  theme_minimal()
## `geom_smooth()` using formula = 'y ~ x'

Exploratory Data Analysis

Secara sederhana Exploratory Data Analysis (EDA) adalah proses awal dalam analisis data yang digunakan untuk memahami struktur dataset, menemukan pola, mengidentifikasi outliers, dan menemukan hubungan antar variabel. EDA sangat penting karena memberikan wawasan awal tentang data sebelum analisis yang lebih mendalam atau pemodelan dilakukan

  1. Visualisasi Distribusi Data

Kita dapat memulai dengan memahami distribusi dua variabel utama, yaitu speed (kecepatan) dan dist (jarak berhenti). Kita dapat menggunakan histogram dan density plot untuk memvisualisasikan distribusi data secara visual.

par(mfrow = c(1, 2)) # Membuat plot berdampingan
hist(cars$speed, main = "Distribusi Kecepatan", xlab = "Kecepatan (mph)", col = "skyblue", border = "white")
hist(cars$dist, main = "Distribusi Jarak Berhenti", xlab = "Jarak (feet)", col = "lightgreen", border = "white")

untuk density plot.

plot(density(cars$speed), main = "Density Plot Kecepatan", col = "blue")

plot(density(cars$dist), main = "Density Plot Jarak Berhenti", col = "green")

  1. Scatter Plot dengan Warna dan Ukuran yang Dinamis

Untuk lebih menarik, kita bisa menggunakan scatter plot yang lebih dinamis dengan variasi warna dan ukuran titik berdasarkan nilai variabel lain.

plot(cars$speed, cars$dist, 
     main = "Scatter Plot: Kecepatan vs Jarak Berhenti", 
     xlab = "Kecepatan (mph)", 
     ylab = "Jarak Berhenti (feet)",
     col = rainbow(length(cars$speed)), # Memberikan variasi warna
     pch = 19, cex = cars$speed / max(cars$speed) * 2) # Ukuran titik proporsional kecepatan

col = rainbow(): Memberikan variasi warna untuk membuat plot lebih berwarna. cex = cars$speed / max(cars$speed) * 2: Mengatur ukuran titik sesuai proporsi kecepatan.

  1. Menambahkan Garis Tren Non-Linear Alih-alih menggunakan regresi linear, kita bisa juga menambahkan garis tren smoothing yang lebih fleksibel menggunakan loess.
plot(cars$speed, cars$dist, 
     main = "Kecepatan vs Jarak Berhenti dengan LOESS", 
     xlab = "Kecepatan (mph)", 
     ylab = "Jarak Berhenti (feet)",
     col = "blue", pch = 19)
lines(loess.smooth(cars$speed, cars$dist), col = "red", lwd = 2)

lines(loess.smooth()): Menambahkan garis tren non-linear untuk melihat pola hubungan antara variabel.

  1. Boxplot dengan Data Overlay

Boxplot dapat memberikan gambaran visual yang baik tentang distribusi dan outliers. Kita bisa menambahkan titik data pada boxplot untuk menampilkan detail data.

boxplot(cars$dist, main = "Boxplot Jarak Berhenti", ylab = "Jarak Berhenti (feet)", col = "lightgreen", border = "darkgreen")
points(jitter(rep(1, nrow(cars))), cars$dist, col = "red", pch = 19) # Overlay data points

points(jitter()): Menambahkan titik data di atas boxplot dengan sedikit jitter agar tidak tumpang tindih.

Dalam konteks visualisasi data, jitter adalah teknik yang digunakan untuk sedikit menggeser posisi data pada grafik, terutama pada sumbu x atau y, untuk menghindari overlap antar titik data yang memiliki nilai sama atau sangat mirip. Teknik ini sering digunakan pada scatter plot atau boxplot untuk membantu melihat distribusi data dengan lebih jelas, terutama ketika ada banyak titik data yang menumpuk di satu lokasi.

  1. Membuat Pair Plot (Scatterplot Matrix) Jika kita ingin melihat hubungan antar variabel dalam dataset yang lebih besar, kita bisa membuat scatterplot matrix. Pada cars, termasuk pada kategori data yang sederhana karena hanya dua variabel, tetapi tetap bisa dicoba untuk memperjelas hubungan antar variabel.
pairs(cars, main = "Scatterplot Matrix of Cars Dataset")

  1. Heatmap untuk Korelasi Jika dataset memiliki lebih banyak variabel, heatmap correlation bisa digunakan untuk melihat hubungan antar variabel secara keseluruhan. Untuk cars, korelasi sederhana antara speed dan dist dapat ditampilkan.
cor_matrix <- cor(cars)
library(ggplot2)
library(reshape2)
ggplot(melt(cor_matrix), aes(Var1, Var2, fill = value)) +
  geom_tile() +
  scale_fill_gradient2(low = "blue", high = "red", mid = "white", midpoint = 0) +
  theme_minimal() +
  ggtitle("Heatmap Korelasi Cars Dataset")

  1. Outliers Detection dengan Boxplot atau Z-Scores

Menggunakan boxplot atau metode statistik seperti Z-Scores untuk mendeteksi outliers dapat menambah wawasan penting dalam analisis data.

# Menghitung Z-score
z_scores <- (cars$dist - mean(cars$dist)) / sd(cars$dist)
# Menemukan outliers dengan threshold |Z| > 2
outliers <- cars[abs(z_scores) > 2, ]
outliers
##    speed dist
## 49    24  120
  1. Visualisasi Interaktif dengan Plotly

Untuk membuat visualisasi interaktif, kita bisa menggunakan plotly. Plotly memberikan kontrol lebih kepada pengguna untuk mengeksplorasi data secara dinamis.

library(plotly)
p <- plot_ly(data = cars, x = ~speed, y = ~dist, 
             type = 'scatter', mode = 'markers', 
             marker = list(size = 10, color = ~speed, colorscale = 'Viridis')) %>%
  layout(title = "Kecepatan vs Jarak Berhenti (Interaktif)", 
         xaxis = list(title = "Kecepatan (mph)"), 
         yaxis = list(title = "Jarak Berhenti (feet)"))
p