ANALISIS DATA TITANIC MENGGUNAKAN STATISTIK DESKRIPTIF, VISUALISASI, KORELASI PEARSON, DAN REGRESI LINIER BERGANDA DI R
NAZWA KHOIRINA
3338240005
Laporan ini Disusun untuk Memenuhi
Tugas Mata Kuliah Pengantar
Data Sains.
PROGRAM STUDI STATISTIKA
FAKULTAS TEKNIK
UNIVERSITAS SULTAN
AGENG TIRTAYASA
2025
Puji syukur penulis panjatkan kepada Tuhan Yang Maha Esa atas rahmat dan kemudahan yang diberikan sehingga laporan analisis data ini dapat diselesaikan dengan baik. Laporan ini disusun sebagai salah satu tugas mata kuliah Pengantar Data Sains yang bertujuan untuk melakukan analisis data menggunakan bahasa pemrograman R.
Dalam laporan ini, penulis melakukan analisis terhadap dataset titanic menggunakan beberapa metode analisis statistik, meliputi statistik deskriptif, visualisasi data, korelasi Pearson, serta regresi linier berganda. Analisis ini diharapkan dapat memberikan gambaran mengenai karakteristik penumpang Titanic serta faktor-faktor yang berpengaruh terhadap variabel tertentu dalam dataset.
Penulis juga mengucapkan terima kasih kepada semua pihak yang telah memberikan dukungan selama proses penyusunan laporan ini.
Semoga laporan ini dapat memberikan manfaat bagi pembaca dan membantu meningkatkan pemahaman dalam melakukan analisis data.
Cilegon, 27 November 2025
Penulis
Abstract:
Titanic adalah kapal penumpang mewah, tenggelam pada 15 April 1912 yang mengakibatkan banyak korban meninggal. Analisis ini bertujuan menganalisis pola dan hubungan dalam dataset Titanic untuk memahami faktor-faktor yang memengaruhi keselamatan penumpang dan harga tiket (Fare). Analisis berbasis data sekunder dilakukan menggunakan statistik deskriptif, visualisasi data, analisis korelasi, dan regresi linear berganda. Hasil analisis menunjukkan mayoritas penumpang berusia muda, sebagian besar berada di kelas tiga, dan penumpang perempuan memiliki tingkat keselamatan lebih tinggi dibanding laki-laki. Kelas tiket berpengaruh kuat terhadap keselamatan dan harga tiket, sedangkan usia dan jenis kelamin memberikan pengaruh tambahan yang lebih kecil. Hasil regresi berganda menunjukkan bahwa sekitar 32% variasi harga tiket dapat dijelaskan oleh variabel-variabel tersebut, menegaskan bahwa kelas tiket merupakan faktor utama penentu harga. Analisis ini memberikan wawasan mengenai bagaimana kelas sosial, jenis kelamin, usia, dan variabel lain berperan dalam peluang keselamatan serta harga tiket penumpang Titanic.
Kata kunci: Titanic, analisis penumpang, keselamatan, harga tiket, regresi, visualisasi data, statistik deskriptif
Titanic adalah sebuah kapal penumpang mewah yang populer dan tenggelam pada tanggal 15 April 1912. Titanic dibangun oleh perusahaan kapal Inggris bernama White Star Line. Pada saat itu, Titanic dianggap sebagai salah satu prestasi teknik yang luar biasa karena merupakan salah satu kapal penumpang terbesar dan termewah pada masanya. Titanic juga dipromosikan sebagai kapal yang “tidak bisa tenggelam”. Banyak orang yang menunggu peluncuran dan pelayaran perdananya dengan antusias”. [1]
Pada tanggal 10 April 1912, Titanic memulai perjalanan perdananya dari Southampton. Kemudian, Titanic sampai di Cherbourg pada hari yang sama dan Queenstown pada keesokan harinya. Titanic dijadwalkan untuk sampai di New York pada 17 April 1912, tetapi kapal tersebut tidak pernah mencapai New York. Titanic merupakan salah satu kejadian paling tragis. Hal ini dikarenakan Titanic telah dipromosikan sebagai kapal yang tidak bisa tenggelam, namun justru tenggelam pada pelayaran perdananya. [2]
Pada tanggal 14 April 1912, bencana Titanic terjadi. Pada saat itu, Titanic menabrak gunung es di Samudra Atlantik Utara sekitar pukul 11:40 malam. Tabrakan tersebut menyebabkan kerusakan pada lambung kapal dan membuka beberapa kompartemen sehingga air masuk ke dalam kapal. Meskipun Titanic dirancang dengan sistem kompartemen yang dapat bertahan jika tergenang air, tabrakan ini melampaui kapasitas yang dapat ditahan kapal.
Pada tanggal 15 April 1912 pukul 2:20 pagi, Titanic tenggelam di Samudra Atlantik Utara. Kurangnya jumlah sekoci penyelamat untuk semua penumpang dan kru menjadi factor yang memperparah situasi. Meskipun usaha penyelamatan dilakukan dan beberapa sekoci penyelamat berhasil diluncurkan, banyak orang terpaksa tinggal di kapal yang tenggelam atau terjatuh ke dalam air yang dingin. [3]
Titanic tetap menjadi topik yang hangat dan menarik minat publik dari dulu sampai sekarang. Salah satu faktor yang mempengaruhi popularitasnya adalah film yang terkenal dengan judul “Titanic” yang dirilis pada tahun 1997. Akibatnya, Titanic terus menjadi objek studi, penelitian, dan perbincangan oleh berbagai kalangan. Dalam berbagai penelitian, para peneliti sering menggunakan data penumpang Titanic sebagai sumber analisis. Salah satu hasil dari penelitian terhadap tenggelamnya Titanic adalah dataset sampel penumpang Titanic. [3]
Dalam dataset Titanic terdapat 12 variabel , yaitu PassengerId, Survived, Pclass, Name, Sex, Age, SibSp, Parch, Ticket, Fare, Cabin, dan Embarked. Seluruh variabel tersebut berisi informasi penting mengenai identitas dan karakteristik penumpang, mulai dari data demografis, kondisi sosial-ekonomi, hingga status keselamatan mereka.
Hasil penelitian sebelumnya menunjukkan bahwa mayoritas penumpang berusia dua puluhan, dengan konsentrasi tertinggi pada kelompok usia tersebut. Selain itu, lebih banyak penumpang yang tidak selamat, terutama laki-laki. Kelas tiket juga berpengaruh terhadap tingkat kelangsungan hidup, dengan penumpang kelas satu memiliki peluang selamat lebih tinggi dibanding kelas dua dan tiga.[1] [4]
Berdasarkan hasil penelitian tersebut, analisis ini bertujuan untuk menganalisis pola dan hubungan dalam dataset Titanic secara lebih menyeluruh. Analisis dilakukan menggunakan statistik deskriptif, visualisasi data, analisis korelasi, dan regresi berganda. Dengan demikian, analisis ini diharapkan memberikan wawasan mengenai bagaimana kelas sosial, jenis kelamin, usia, dan variabel lainnya berperan dalam menentukan peluang keselamatan penumpang, serta faktor-faktor yang memengaruhi harga tiket (Fare).
Analisis ini berbasis data sekunder karena menggunakan dataset Titanic yang telah tersedia secara publik. Metode yang digunakan bersifat kuantitatif dengan fokus pada statistik deskriptif, visualisasi data, analisis korelasi, dan regresi linear berganda untuk memahami karakteristik penumpang Titanic serta faktor-faktor yang memengaruhi harga tiket (Fare) dan keselamatan penumpang. Tahapan analisis dijelaskan sebagai berikut:
titanic.
Struktur data, kolom, dan sampel data diperiksa.NA dan
kolom ini dihapus karena terlalu banyak missing value.Age dan Fare diimputasi
menggunakan median, sedangkan Embarked diisi dengan
kategori terbanyak (‘C’).Pclass, Sex,
SibSp, Parch, Embarked,
Survived) dikonversi menjadi faktor.
Statistik deskriptif digunakan untuk memberikan gambaran awal mengenai karakteristik data.
Analisis dilakukan melalui perhitungan:
Analisis mencakup:
Visualisasi digunakan untuk melihat pola, distribusi, dan hubungan antar variabel. Grafik yang digunakan meliputi:
Analisis korelasi dilakukan untuk mengukur kekuatan dan arah hubungan linear antar variabel numerik menggunakan koefisien korelasi Pearson. Variabel yang dianalisis:
Regresi linear berganda digunakan untuk menganalisis pengaruh beberapa variabel independen terhadap variabel dependen, yaitu Fare.
1. Mempersiapkan Data
# Panggil Library
library(titanic)
# Memuat dataset Titanic
data <- titanic_train
# Melihat 6 baris pertama dataset Titanic
lihat_data1 <- head(data)
library(knitr)
library(kableExtra)
## Warning: package 'kableExtra' was built under R version 4.4.3
kable(lihat_data1,
caption = "6 Baris Pertama Dataset Titanic",
format = "html") %>%
kable_styling(bootstrap_options = c("striped", "hover"),
full_width = FALSE,
position = "center")
| PassengerId | Survived | Pclass | Name | Sex | Age | SibSp | Parch | Ticket | Fare | Cabin | Embarked |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 0 | 3 | Braund, Mr. Owen Harris | male | 22 | 1 | 0 | A/5 21171 | 7.2500 | S | |
| 2 | 1 | 1 | Cumings, Mrs. John Bradley (Florence Briggs Thayer) | female | 38 | 1 | 0 | PC 17599 | 71.2833 | C85 | C |
| 3 | 1 | 3 | Heikkinen, Miss. Laina | female | 26 | 0 | 0 | STON/O2. 3101282 | 7.9250 | S | |
| 4 | 1 | 1 | Futrelle, Mrs. Jacques Heath (Lily May Peel) | female | 35 | 1 | 0 | 113803 | 53.1000 | C123 | S |
| 5 | 0 | 3 | Allen, Mr. William Henry | male | 35 | 0 | 0 | 373450 | 8.0500 | S | |
| 6 | 0 | 3 | Moran, Mr. James | male | NA | 0 | 0 | 330877 | 8.4583 | Q |
# Melihat 6 baris terakhir dataset Titanic
lihat_data2 <- tail(data)
kable(lihat_data2,
caption = "6 Baris Terakhir Dataset Titanic",
format = "html") %>%
kable_styling(bootstrap_options = c("striped", "hover"),
full_width = FALSE,
position = "center")
| PassengerId | Survived | Pclass | Name | Sex | Age | SibSp | Parch | Ticket | Fare | Cabin | Embarked | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 886 | 886 | 0 | 3 | Rice, Mrs. William (Margaret Norton) | female | 39 | 0 | 5 | 382652 | 29.125 | Q | |
| 887 | 887 | 0 | 2 | Montvila, Rev. Juozas | male | 27 | 0 | 0 | 211536 | 13.000 | S | |
| 888 | 888 | 1 | 1 | Graham, Miss. Margaret Edith | female | 19 | 0 | 0 | 112053 | 30.000 | B42 | S |
| 889 | 889 | 0 | 3 | Johnston, Miss. Catherine Helen “Carrie” | female | NA | 1 | 2 | W./C. 6607 | 23.450 | S | |
| 890 | 890 | 1 | 1 | Behr, Mr. Karl Howell | male | 26 | 0 | 0 | 111369 | 30.000 | C148 | C |
| 891 | 891 | 0 | 3 | Dooley, Mr. Patrick | male | 32 | 0 | 0 | 370376 | 7.750 | Q |
# Melihat nama kolom
nama_kolom <- data.frame(matrix("", nrow = 1, ncol = length(colnames(data))))
colnames(nama_kolom) <- colnames(data)
# Tampilkan tabel
kable(nama_kolom,
caption = "Nama Kolom Dataset Titanic",
format = "html") %>%
kable_styling(bootstrap_options = c("striped", "hover"),
full_width = TRUE,
position = "center")
| PassengerId | Survived | Pclass | Name | Sex | Age | SibSp | Parch | Ticket | Fare | Cabin | Embarked |
|---|---|---|---|---|---|---|---|---|---|---|---|
# Menampilkan dimensi dataset (baris x kolom)
dim(data)
## [1] 891 12
# Menampilkan tipe struktur keseluruhan dataset
str(data)
## 'data.frame': 891 obs. of 12 variables:
## $ PassengerId: int 1 2 3 4 5 6 7 8 9 10 ...
## $ Survived : int 0 1 1 1 0 0 0 0 1 1 ...
## $ Pclass : int 3 1 3 1 3 3 1 3 3 2 ...
## $ Name : chr "Braund, Mr. Owen Harris" "Cumings, Mrs. John Bradley (Florence Briggs Thayer)" "Heikkinen, Miss. Laina" "Futrelle, Mrs. Jacques Heath (Lily May Peel)" ...
## $ Sex : chr "male" "female" "female" "female" ...
## $ Age : num 22 38 26 35 35 NA 54 2 27 14 ...
## $ SibSp : int 1 1 0 1 0 0 0 3 0 1 ...
## $ Parch : int 0 0 0 0 0 0 0 1 2 0 ...
## $ Ticket : chr "A/5 21171" "PC 17599" "STON/O2. 3101282" "113803" ...
## $ Fare : num 7.25 71.28 7.92 53.1 8.05 ...
## $ Cabin : chr "" "C85" "" "C123" ...
## $ Embarked : chr "S" "C" "S" "S" ...
Dataset Titanic mencakup informasi lengkap tentang
penumpang, seperti:
PassengerID : tipe data Integer (ID unik
penumpang),Survived : Tipe data Integer, data
penumpang (Survived = 1) atau tidak (0)Pclass : Tipe data Integer, data kelas
penumpangName : Tipe data Character, data nama
penumpangSex : Tipe data Character, data jenis
kelamin penumpangAge : Tipe data Numeric, data umur
penumpangSibSp : Tipe data Integer, data jumlah
saudara kandung (Siblings) atau pasangan (spouses)Parch : Tipe data Integer, data jumlah
orang tua (parents) atau anak (children)Ticket : Tipe data Character, data
identitas ticket penumpangFare : Tipe data Numeric, data kekayaan
atau status sosial penumpangCabin : Tipe data Character, data
identitas cabinEmbarked : Tipe data Character, data
embarkasi
2. Data Cleansing
Pada kolom Cabin terdapat nilai kosong ““, agar dapat mengetahui jumlah Missing Value (NA) pada data maka dapat dilakukan imputasi dengan mengisikan nilai NA pada data.
# Mengubah nilai kosong "" pada Cabin menjadi NA
data$Cabin[data$Cabin == ""] <- NA
# Mengetahui jumlah missing value tiap kolom
colSums(is.na(data))
## PassengerId Survived Pclass Name Sex Age
## 0 0 0 0 0 177
## SibSp Parch Ticket Fare Cabin Embarked
## 0 0 0 0 687 0
# Menghapus kolom Cabin (karena terlalu banyak missing value)
data <- subset(data, select = -c(Cabin))
Dari hasil diatas diketahui bahwa, bahwa kolom Age terdapat banyak nilai NA ada 177, maka akan diimputasi menggunakan median karena median lebih tahan terhadap nilai ekstrem (outlier) dibandingkan mean. Dengan demikian, nilai imputasi menjadi lebih stabil dan tidak bias, sehingga distribusi usia tetap mencerminkan kondisi mayoritas penumpang dan Cabin sebesar 687 yang akan dihilangkan, karena informasi yang tersisa sudah tidak cukup kuat untuk dijadikan dasar analisis.
3. Imputasi Missing Value (Age, Fare, Embarked)
# Menghitung median Age
median(data$Age, na.rm = TRUE)
## [1] 28
# Menghitung median Fare
median(data$Fare, na.rm = TRUE)
## [1] 14.4542
# Mengisi missing Age dengan median
data$Age[is.na(data$Age)] <- 28
# Mengisi missing Fare dengan median
data$Fare[is.na(data$Fare)] <- 14.454
# Mengubah Embarked kosong menjadi 'C'
data$Embarked[data$Embarked == ""] <- "C"
4. Cek Struktur Setelah Pembersihan
str(data)
## 'data.frame': 891 obs. of 11 variables:
## $ PassengerId: int 1 2 3 4 5 6 7 8 9 10 ...
## $ Survived : int 0 1 1 1 0 0 0 0 1 1 ...
## $ Pclass : int 3 1 3 1 3 3 1 3 3 2 ...
## $ Name : chr "Braund, Mr. Owen Harris" "Cumings, Mrs. John Bradley (Florence Briggs Thayer)" "Heikkinen, Miss. Laina" "Futrelle, Mrs. Jacques Heath (Lily May Peel)" ...
## $ Sex : chr "male" "female" "female" "female" ...
## $ Age : num 22 38 26 35 35 28 54 2 27 14 ...
## $ SibSp : int 1 1 0 1 0 0 0 3 0 1 ...
## $ Parch : int 0 0 0 0 0 0 0 1 2 0 ...
## $ Ticket : chr "A/5 21171" "PC 17599" "STON/O2. 3101282" "113803" ...
## $ Fare : num 7.25 71.28 7.92 53.1 8.05 ...
## $ Embarked : chr "S" "C" "S" "S" ...
5. Konversi Variabel Kategorik Menjadi Faktor
# Konversi kolom kategorik menjadi faktor
data[, c("Pclass","Sex","SibSp","Parch","Embarked","Survived")] <- lapply(
data[, c("Pclass","Sex","SibSp","Parch","Embarked","Survived")], as.factor)
Kolom Pclass, Sex, SibSp, Parch, Embarked, dan Survived diubah jadi faktor karena semuanya adalah data kategori, bukan angka yang perlu dihitung-hitung. Dengan dijadikan faktor, R jadi paham bahwa nilai-nilai itu adalah kelompok, bukan angka yang bisa dijumlah atau dirata-ratakan.
# Cek ulang struktur dataset
str(data)
## 'data.frame': 891 obs. of 11 variables:
## $ PassengerId: int 1 2 3 4 5 6 7 8 9 10 ...
## $ Survived : Factor w/ 2 levels "0","1": 1 2 2 2 1 1 1 1 2 2 ...
## $ Pclass : Factor w/ 3 levels "1","2","3": 3 1 3 1 3 3 1 3 3 2 ...
## $ Name : chr "Braund, Mr. Owen Harris" "Cumings, Mrs. John Bradley (Florence Briggs Thayer)" "Heikkinen, Miss. Laina" "Futrelle, Mrs. Jacques Heath (Lily May Peel)" ...
## $ Sex : Factor w/ 2 levels "female","male": 2 1 1 1 2 2 2 2 1 1 ...
## $ Age : num 22 38 26 35 35 28 54 2 27 14 ...
## $ SibSp : Factor w/ 7 levels "0","1","2","3",..: 2 2 1 2 1 1 1 4 1 2 ...
## $ Parch : Factor w/ 7 levels "0","1","2","3",..: 1 1 1 1 1 1 1 2 3 1 ...
## $ Ticket : chr "A/5 21171" "PC 17599" "STON/O2. 3101282" "113803" ...
## $ Fare : num 7.25 71.28 7.92 53.1 8.05 ...
## $ Embarked : Factor w/ 3 levels "C","Q","S": 3 1 3 3 3 2 3 3 3 1 ...
6. Ringkasan Statistik
# Menampilkan ringkasan statistik dataset yang sudah dibersihkan
summary(data)
## PassengerId Survived Pclass Name Sex
## Min. : 1.0 0:549 1:216 Length:891 female:314
## 1st Qu.:223.5 1:342 2:184 Class :character male :577
## Median :446.0 3:491 Mode :character
## Mean :446.0
## 3rd Qu.:668.5
## Max. :891.0
##
## Age SibSp Parch Ticket Fare Embarked
## Min. : 0.42 0:608 0:678 Length:891 Min. : 0.00 C:170
## 1st Qu.:22.00 1:209 1:118 Class :character 1st Qu.: 7.91 Q: 77
## Median :28.00 2: 28 2: 80 Mode :character Median : 14.45 S:644
## Mean :29.36 3: 16 3: 5 Mean : 32.20
## 3rd Qu.:35.00 4: 18 4: 4 3rd Qu.: 31.00
## Max. :80.00 5: 5 5: 5 Max. :512.33
## 8: 7 6: 1
Variabel Numerik
Hasil
# -----------------------------
# 1. Hitung Statistik Deskriptif
# -----------------------------
# Menghitung Statistik Age
mean_age <- mean(data$Age)
median_age <- median(data$Age)
sd_age <- sd(data$Age)
# Menghitung Statistik Fare
mean_fare <- mean(data$Fare)
median_fare <- median(data$Fare)
sd_fare <- sd(data$Fare)
# Menampilkan Output
library(kableExtra)
library(knitr)
tabel_statistik <- data.frame(
Variabel = c(
"Age", "Age", "Age",
"Fare", "Fare", "Fare"
),
Statistik = c(
"Mean", "Median", "Standar Deviasi",
"Mean", "Median", "Standar Deviasi"
),
Nilai = c(
mean_age, median_age, sd_age,
mean_fare, median_fare, sd_fare
)
)
kable(tabel_statistik,
caption = "Statistik Deskriptif Variabel Age dan Fare",
align = "c",
booktabs = TRUE) %>%
kable_styling(full_width = FALSE,
bootstrap_options = c("striped", "hover", "condensed"),
position = "center",
font_size = 14,
latex_options = "striped") %>%
row_spec(0, bold = TRUE, background = "#457b9d", color = "white") %>%
row_spec(1:nrow(tabel_statistik),
background = "#e8f1fa", color = "black",
extra_css = "border: 1px solid #003049;")
| Variabel | Statistik | Nilai |
|---|---|---|
| Age | Mean | 29.36158 |
| Age | Median | 28.00000 |
| Age | Standar Deviasi | 13.01970 |
| Fare | Mean | 32.20421 |
| Fare | Median | 14.45420 |
| Fare | Standar Deviasi | 49.69343 |
Pembahasan
Variabel Kategorik
Hasil
# Hitung frekuensi
freq_survived <- table(data$Survived)
# Hitung persentase
percent_survived <- round(prop.table(freq_survived) * 100, 2)
# Menampilkan Output
tabel_survived <- data.frame(
Survived = c("0", "1"),
Frekuensi = freq_survived,
Persentase = percent_survived
)
# Tampilkan
knitr::kable(tabel_survived, caption = "Distribusi Variabel Survived")
| Survived | Frekuensi | Persentase |
|---|---|---|
| 0 | 549 | 61.62 |
| 1 | 342 | 38.38 |
# Menghitung frekuensi kelas penumpang
freq_pclass <-table(data$Pclass)
# Menghitung persentase tiap kelas
percent_pclass <- prop.table(table(data$Pclass)) * 100
freq_pclass <- data.frame(
Pclass = names(table(data$Pclass)),
Frekuensi = as.vector(table(data$Pclass)),
Persentase = paste0(round(prop.table(table(data$Pclass)) * 100, 2), "%")
)
knitr::kable(freq_pclass, caption = "Frekuensi dan Persentase Pclass")
| Pclass | Frekuensi | Persentase |
|---|---|---|
| 1 | 216 | 24.24% |
| 2 | 184 | 20.65% |
| 3 | 491 | 55.11% |
Pembahasan
Survived
Berdasarkan hasil analisis terhadap variabel Survived, diketahui bahwa kategori “0” sebagai penumpang yang tidak selamat, sedangkan kategori “1” sebagai penumpang yang selamat dari peristiwa tenggelamnya kapal Titanic. Dari total data, terdapat 549 penumpang (61,62%) yang termasuk kategori 0 (tidak selamat), sementara 342 penumpang (38,38%) termasuk kategori 1 (selamat). Hal ini menunjukkan bahwa sebagian besar penumpang Titanic tidak berhasil selamat, karena proporsi korban meninggal jauh lebih besar dibandingkan yang selamat.
PClass
Variabel Pclass menunjukkan kelas tiket penumpang Titanic, yaitu kelas 1, 2, dan 3. Berdasarkan hasil analisis, jumlah penumpang di masing-masing kelas adalah:
Hasil
Bar Chart
Distribusi Survived: Menunjukkan jumlah penumpang yang selamat dan meninggal. Survived berdasarkan Sex: Menampilkan perbandingan keselamatan antara laki-laki dan perempuan. Survived berdasarkan Pclass: Memperlihatkan kelas tiket mana yang memiliki tingkat keselamatan lebih tinggi.
library(ggplot2)
Distribusi Survived
# Bar Chart Survived
# Grafik ini menampilkan jumlah penumpang yang selamat (1) dan tidak selamat (0)
p1 <- ggplot(data, aes(x = Survived, fill = Survived)) +
geom_bar() +
labs(title = "Distribusi Penumpang Berdasarkan Status Keselamatan",
x = "Survived (0 = Tidak Selamat, 1 = Selamat)",
y = "Jumlah Penumpang") +
scale_fill_manual(values = c("0" = "#E63946",
"1" = "#457B9D"))
Survived berdasarkan Sex
# Bar Chart Survived berdasarkan jenis kelamin
# Grafik ini menunjukkan perbedaan jumlah yang selamat antara laki-laki dan perempuan
p2 <- ggplot(data, aes(x = Sex, fill = Survived)) +
geom_bar(position = "dodge") +
labs(title = "Status Keselamatan Berdasarkan Jenis Kelamin",
x = "Jenis Kelamin",
y = "Jumlah Penumpang",
fill = "Survived") +
scale_fill_manual(values = c("0" = "#2a9d8f",
"1" = "#e9c46a"))
Survived berdasarkan Pclass
# Bar Chart Survived berdasarkan kelas tiket
# Grafik ini menampilkan kelas mana yang memiliki jumlah penumpang selamat lebih banyak
p3 <- ggplot(data, aes(x = Pclass, fill = Survived)) +
geom_bar(position = "dodge") +
labs(title = "Status Keselamatan Berdasarkan Kelas Tiket",
x = "Kelas Tiket",
y = "Jumlah Penumpang",
fill = "Survived") +
scale_fill_manual(values = c("0" = "#9b5de5",
"1" = "#f15bb5"))
p1
p2
p3
Histogram Untuk menggambarkan pola penyebaran variabel Age dan Fare
Histogram Age
# Histogram Age
# Grafik ini digunakan untuk melihat bagaimana data usia penumpang tersebar,
# apakah lebih banyak di usia muda, dewasa, atau tua.
library(ggplot2)
hist1 <- ggplot(data, aes(x = Age)) +
geom_histogram(binwidth = 5, fill = "#4cc9f0", color = "black") +
labs(title = "Histogram Usia (Age) Penumpang Titanic",
x = "Usia Penumpang",
y = "Frekuensi")
Histogram Fare
# Histogram Fare
# Tujuan histogram ini adalah untuk melihat pola sebaran harga tiket,
# apakah data condong ke harga murah atau ada variasi harga yang sangat besar.
hist2 <- ggplot(data, aes(x = Fare)) +
geom_histogram(binwidth = 10, fill = "#f72585", color = "black") +
labs(title = "Histogram Harga Tiket (Fare) Penumpang Titanic",
x = "Harga Tiket",
y = "Frekuensi")
# Menampilkan Output
print(hist1)
print(hist2)
BoxPlot Untuk membandingkan distribusi Fare berdasarkan kategori, misalnya Pclass dan Sex
BoxPlot PClass
# Boxplot Fare berdasarkan kelas tiket
boxplot_pclass <- ggplot(data, aes(x = Pclass, y = Fare, fill = Pclass)) +
geom_boxplot() +
labs(title = "Boxplot Fare Berdasarkan Pclass",
x = "Kelas Tiket (Pclass)",
y = "Harga Tiket (Fare)") +
scale_fill_manual(values = c("1" = "#ffafcc",
"2" = "#bde0fe",
"3" = "#cdb4db"))
BoxPlot Sex
# Boxplot Fare berdasarkan jenis kelamin
boxplot_sex <- ggplot(data, aes(x = Sex, y = Fare, fill = Sex)) +
geom_boxplot() +
labs(title = "Boxplot Fare Berdasarkan Jenis Kelamin",
x = "Jenis Kelamin",
y = "Harga Tiket (Fare)") +
scale_fill_manual(values = c("female" = "#ffcad4",
"male" = "#90dbf4"))
# Menampilkan Output
print(boxplot_pclass)
print(boxplot_sex)
Scatter Plot Untuk menunjukkan hubungan antar variabel numerik, misalnya Age vs Fare
# Scatter Plot Age vs Fare
# Grafik ini digunakan untuk melihat apakah ada hubungan
# antara usia penumpang (Age) dan harga tiket (Fare).
library(ggplot2)
ggplot(data, aes(x = Age, y = Fare)) +
geom_point(alpha = 0.6, color = "#457b9d") + # titik scatter
geom_smooth(method = "lm", se = TRUE, color = "#e63946") + # garis regresi
labs(title = "Scatter Plot Age vs Fare dengan Garis Regresi",
x = "Usia Penumpang (Age)",
y = "Harga Tiket (Fare)") +
theme_minimal()
## `geom_smooth()` using formula = 'y ~ x'
Pembahasan
Pada Grafik ini menunjukkan jumlah penumpang yang selamat (1) dan tidak selamat (0), terlihat pada grafik bahwa jumlah penumpang yang tidak selamat jauh lebih banyak dibandingkan yang selamat. Tingginya kolom pada kategori Survived = 0 menggambarkan bahwa mayoritas penumpang Titanic tidak selamat atau meninggal dalam peristiwa tenggelamnya kapal. Sementara itu, kelompok penumpang yang survived = 1 jumlahnya relatif lebih sedikit. Hasil ini sejalan dengan penjelasan pada pendahuluan bahwa kapasitas sekoci yang terbatas menyebabkan tingkat keselamatan penumpang rendah secara keseluruhan.
Pada grafik terlihat pola yang sangat jelas bahwa: Penumpang perempuan, jumlah yang selamat jauh lebih besar dibandingkan yang tidak selamat. Sebaliknya, pada penumpang laki-laki, jumlah yang tidak selamat sangat banyak dibandingkan dengan yang selamat.
Dari grafik terlihat bahwa kelas sosial berpengaruh kuat terhadap peluang keselamatan: Penumpang kelas 1 memiliki jumlah yang selamat cukup tinggi dan hampir setara dengan yang tidak selamat. Hal ini menunjukkan bahwa penumpang kelas atas lebih mudah mengakses sekoci. Penumpang kelas 2 memiliki tingkat keselamatan yang seimbang, namun jumlah yang tidak selamat masih lebih besar. Penumpang kelas 3 merupakan kelompok penumpang dengan jumlah tidak selamat paling banyak. Grafik kolom 0 pada kelas 3 jauh lebih tinggi daripada kelas lain, menggambarkan mereka paling terdampak oleh keterbatasan akses menuju sekoci. Kondisi ini mencerminkan ketimpangan akses berdasarkan kelas sosial, di mana penumpang kelas atas lebih diuntungkan dalam proses penyelamatan.
Distribusi usia penumpang terlihat terkonsentrasi pada rentang 20–40 tahun, dengan puncak frekuensi di usia sekitar 25–30 tahun, sehingga menunjukkan bahwa sebagian besar penumpang merupakan dewasa muda. Kelompok usia anak-anak (0–10 tahun) dan lansia di atas 60 tahun ada, tetapi jumlahnya jauh lebih sedikit. Secara umum, pola histogram bersifat right-skewed, karena masih terdapat sebagian kecil penumpang berusia lanjut hingga di atas 70 tahun. Grafik ini menggambarkan bahwa mayoritas penumpang Titanic berada pada usia produktif.
Histogram menunjukkan bahwa mayoritas penumpang Titanic membeli tiket dengan harga rendah, terutama di kisaran $0–$50, menunjukkan banyak penumpang kelas ekonomi. Distribusi harga tiket miring ke kanan (positively skewed) karena sebagian besar data terkonsentrasi pada harga rendah, tetapi terdapat beberapa tiket sangat mahal (outlier) yang bisa melebihi $500, umumnya tiket kelas satu. Variasi harga ini mencerminkan perbedaan kelas penumpang, dari kelas ekonomi hingga premium, dan menunjukkan ketimpangan harga tiket antara penumpang kelas rendah dan tinggi.
Boxplot harga tiket (Fare) menunjukkan bahwa kelas penumpang (Pclass) berpengaruh kuat terhadap harga tiket. Kelas 1 memiliki median tertinggi ($60–$70) dengan variasi paling besar dan outlier mencapai lebih dari $500, sedangkan Kelas 2 median sekitar $20 dengan variasi lebih kecil, dan Kelas 3 median terendah (<$10) dengan sebaran seragam. Data ini menegaskan bahwa semakin tinggi kelasnya, semakin tinggi harga tiket dan variasinya, dengan kesenjangan terbesar antara Kelas 1 dan Kelas 2/3.
Boxplot harga tiket (Fare) berdasarkan jenis kelamin menunjukkan bahwa median perempuan ($25–$30) sedikit lebih tinggi dibanding laki-laki ($10–$15), dengan variasi harga serupa pada kedua kelompok. Kedua kelompok memiliki outlier hingga harga tiket tertinggi ($512), menunjukkan penumpang terkaya tersebar di antara perempuan dan laki-laki. Hal ini menegaskan bahwa jenis kelamin bukan faktor utama penentu harga tiket, dan perbedaan median kemungkinan terkait distribusi kelas tiket (Pclass), di mana perempuan lebih banyak berada di Kelas 1 dan 2.
Scatter plot usia (Age) terhadap harga tiket (Fare) menunjukkan hubungan linier positif yang sangat lemah, di mana penumpang yang lebih tua cenderung membayar sedikit lebih tinggi, tetapi titik-titik data sangat tersebar dan banyak outlier pada harga tinggi menunjukkan bahwa usia bukan faktor utama penentu harga tiket, dan sebagian besar variasi harga tiket tidak dapat dijelaskan oleh usia.
Hasil
# Buat salinan dataset untuk korelasi (agar tidak bentrok dengan fungsi data())
data_corr <- data
# Pilih variabel numerik dan konversi faktor menjadi numeric
numeric_data <- data.frame(
Age = data_corr$Age,
Fare = data_corr$Fare,
SibSp = as.numeric(as.character(data_corr$SibSp)),
Parch = as.numeric(as.character(data_corr$Parch))
)
# Menghitung korelasi Pearson
cor_matrix <- cor(numeric_data, method = "pearson")
# Menampilkan hasil
print(cor_matrix)
## Age Fare SibSp Parch
## Age 1.00000000 0.09668842 -0.2332963 -0.1724820
## Fare 0.09668842 1.00000000 0.1596510 0.2162249
## SibSp -0.23329633 0.15965104 1.0000000 0.4148377
## Parch -0.17248195 0.21622494 0.4148377 1.0000000
Pembahasan
Korelasi Age dengan harga tiket (Fare) sangat lemah, yaitu 0.097, yang menunjukkan bahwa umur penumpang hampir tidak berpengaruh terhadap harga tiket. Hubungan negatif dengan jumlah saudara/pasangan (SibSp = -0.233) dan orang tua/anak (Parch = -0.172) menunjukkan bahwa penumpang yang lebih tua cenderung bepergian sendiri atau membawa anggota keluarga yang lebih sedikit.
Korelasi Fare dengan SibSp (0.160) dan Parch (0.216) lemah positif. Artinya, penumpang yang membawa keluarga cenderung membeli tiket dengan harga sedikit lebih tinggi, mungkin karena membeli beberapa tiket sekaligus atau memilih kelas kabin yang lebih mahal.
Korelasi antara SibSp dan Parch cukup sedang, yaitu 0.415. Hal ini biasanya penumpang yang bepergian dengan saudara atau pasangan biasanya juga membawa orang tua atau anak.
Kesimpulan: Secara umum, sebagian besar variabel numerik memiliki korelasi yang lemah. Hanya hubungan antara jumlah saudara/pasangan dengan orang tua/anak yang cukup terlihat. Hanya hubungan antara jumlah saudara/pasangan dengan orang tua/anak yang terlihat cukup kuat.
Hasil
# Konversi Pclass jadi numeric
data$Pclass_num <- as.numeric(as.character(data$Pclass))
# Buat variabel numerik untuk Sex
data$Sex_num <- ifelse(data$Sex == "male", 1, 0)
# Model regresi linear berganda
model_regresi <- lm(Fare ~ Age + Sex_num + Pclass_num, data = data)
# Ringkasan model
summary(model_regresi)
##
## Call:
## lm(formula = Fare ~ Age + Sex_num + Pclass_num, data = data)
##
## Residuals:
## Min 1Q Median 3Q Max
## -73.00 -18.84 -0.47 5.59 442.00
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 126.4475 6.2186 20.334 < 2e-16 ***
## Age -0.3341 0.1133 -2.948 0.003287 **
## Sex_num -10.4562 2.9289 -3.570 0.000376 ***
## Pclass_num -33.6403 1.7746 -18.956 < 2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 41.02 on 887 degrees of freedom
## Multiple R-squared: 0.3209, Adjusted R-squared: 0.3186
## F-statistic: 139.7 on 3 and 887 DF, p-value: < 2.2e-16
Pembahasan
Berdasarkan hasil regresi linear berganda, diperoleh variabel dependen Fare (harga tiket) dan variabel independen Age (usia penumpang), Sex_num (jenis kelamin, 1 untuk laki-laki dan 0 untuk perempuan), serta Pclass_num (kelas tiket, semakin besar angkanya semakin rendah kelasnya).
Interpretasi tiap koefisien:
Pada output regresi linier berganda Multiple R-squared = 0,3209, yang berarti sekitar 32,09% variasi harga tiket dapat dijelaskan oleh ketiga variabel ini. Adjusted R-squared = 0,3186 memperbaiki estimasi untuk jumlah prediktor dan menunjukkan bahwa 31,86% variasi harga tiket dapat dijelaskan secara nyata. Rata-rata prediksi harga tiket menyimpang sekitar 41 satuan dari harga sebenarnya (Residual standard error = 41,02), deviasi ini relatif besar karena adanya tiket ekstrem (outlier) yang sangat mahal atau sangat murah. Sementara itu, F-statistic = 139,7 dengan p-value < 2,2×10^-16 menunjukkan bahwa regresi secara keseluruhan signifikan secara statistik, artinya variabel Age, Sex_num, dan Pclass_num secara simultan berpengaruh terhadap harga tiket.
Secara keseluruhan, hasil ini menegaskan bahwa kelas tiket adalah faktor utama penentu harga, sementara usia dan jenis kelamin memberikan pengaruh tambahan yang lebih kecil. Masih terdapat faktor lain di luar model yang memengaruhi harga tiket penumpang Titanic.
Analisis data penumpang Titanic berhasil menggambarkan karakteristik penumpang serta pola keselamatan dan harga tiket. Hasil statistik deskriptif dan visualisasi menunjukkan bahwa mayoritas penumpang berada di kelas ekonomi (kelas 3), usia produktif (20–40 tahun), dan bahwa penumpang perempuan memiliki peluang selamat lebih tinggi dibanding laki-laki. Analisis korelasi memperlihatkan hubungan lemah antar variabel numerik, kecuali antara jumlah saudara/pasangan dan orang tua/anak yang cukup kuat. Regresi linear berganda menjelaskan bahwa kelas tiket merupakan faktor utama penentu harga tiket, dengan pengaruh tambahan dari usia dan jenis kelamin.
Hasil regresi linier berganda menunjukkan bahwa signifikan secara statistik (F-statistic = 139,7; p-value < 2,2×10^-16), dengan Multiple R-squared = 0,3209 dan Adjusted R-squared = 0,3186, yang menunjukkan bahwa sekitar 32% variasi harga tiket dapat dijelaskan oleh variabel-variabel tersebut, sedangkan sisanya dipengaruhi oleh faktor lain. Rata-rata deviasi prediksi dari harga aktual sebesar ±41 satuan, relatif besar karena adanya tiket ekstrem (outlier).
Dengan demikian, analisis ini berhasil mencapai tujuan penelitian, yaitu memberikan wawasan mengenai peran kelas sosial, jenis kelamin, usia, dan variabel lain dalam menentukan peluang keselamatan penumpang serta faktor-faktor yang memengaruhi harga tiket Titanic.
Penulis mengucapkan terima kasih kepada berbagai pihak yang telah menyediakan dataset, materi pembelajaran, serta referensi yang menjadi panduan dalam analisis data Titanic ini. Berbagai sumber tersebut membantu pemahaman dan penerapan teknik analisis data serta visualisasi, sehingga analisis ini dapat dilaksanakan dengan baik dan penulis memperoleh pengalaman serta wawasan yang berharga.