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.
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.
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
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.
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
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.
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…
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
## --------------------------------------------------------------------------------
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) : : : .
## : : : : : .
## -------------------------------------------------------------------------------------------------
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)")
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.
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)
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.
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.
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'
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
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")
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.
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.
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.
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")
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")
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
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