title: “Analisis Status Keselamatan Penumpang Berdasarkan Umur dan Jenis Kelamin” author: “Atsilah Tsabitah Zahra” date: “2026-10-04” output: html_document: toc: true toc_float: true theme: cosmo ————
Analisis ini bertujuan untuk mengetahui gambaran status keselamatan
penumpang Titanic berdasarkan umur dan jenis kelamin. Variabel
Survived digunakan untuk menunjukkan status keselamatan
penumpang, sedangkan Age dan Sex digunakan
sebagai karakteristik penumpang yang dianalisis.
Analisis dilakukan melalui statistik deskriptif, tabel frekuensi, visualisasi data, analisis umur berdasarkan status keselamatan, analisis jenis kelamin berdasarkan status keselamatan, serta uji Chi-Square untuk mengetahui hubungan antara jenis kelamin dan status keselamatan.
Pada tahap persiapan, dilakukan pengaturan awal sebelum analisis data dimulai. Tahap ini meliputi pengaturan tampilan hasil R Markdown dan pemanggilan beberapa package yang digunakan untuk membaca, mengolah, menganalisis, serta memvisualisasikan data.
Package yang digunakan dalam analisis ini adalah:
readxl digunakan untuk membaca data dari file
Excel.dplyr digunakan untuk mengolah dan memanipulasi
data.ggplot2 digunakan untuk membuat visualisasi atau
grafik.scales digunakan untuk mengatur format tampilan angka
dan persentase.knitr digunakan untuk menampilkan tabel hasil analisis
dengan lebih rapi.Data yang digunakan adalah dataset Titanic yang telah melalui proses cleaning.
data <- read_excel ("C:/Users/LENOVO/Downloads/data set titanic .xlsx")
head(data)
## # A tibble: 6 × 12
## PassengerId Survived Pclass Name Sex Age SibSp Parch Ticket Fare Cabin
## <dbl> <dbl> <dbl> <chr> <chr> <dbl> <dbl> <dbl> <chr> <dbl> <chr>
## 1 1 0 3 Braund… male 22 1 0 A/5 2… 7.25 <NA>
## 2 2 1 1 Cuming… fema… 38 1 0 PC 17… 71.3 C85
## 3 3 1 3 Heikki… fema… 26 0 0 STON/… 7.92 <NA>
## 4 4 1 1 Futrel… fema… 35 1 0 113803 53.1 C123
## 5 5 0 3 Allen,… male 35 0 0 373450 8.05 <NA>
## 6 6 0 3 Moran,… male 29 0 0 330877 8.46 <NA>
## # ℹ 1 more variable: Embarked <chr>
Struktur data digunakan untuk mengetahui jenis variabel dan bentuk data yang digunakan dalam analisis.
str(data)
## tibble [891 × 12] (S3: tbl_df/tbl/data.frame)
## $ PassengerId: num [1:891] 1 2 3 4 5 6 7 8 9 10 ...
## $ Survived : num [1:891] 0 1 1 1 0 0 0 0 1 1 ...
## $ Pclass : num [1:891] 3 1 3 1 3 3 1 3 3 2 ...
## $ Name : chr [1:891] "Braund, Mr. Owen Harris" "Cumings, Mrs. John Bradley (Florence Briggs Thayer)" "Heikkinen, Miss. Laina" "Futrelle, Mrs. Jacques Heath (Lily May Peel)" ...
## $ Sex : chr [1:891] "male" "female" "female" "female" ...
## $ Age : num [1:891] 22 38 26 35 35 29 54 2 27 14 ...
## $ SibSp : num [1:891] 1 1 0 1 0 0 0 3 0 1 ...
## $ Parch : num [1:891] 0 0 0 0 0 0 0 1 2 0 ...
## $ Ticket : chr [1:891] "A/5 21171" "PC 17599" "STON/O2. 3101282" "113803" ...
## $ Fare : num [1:891] 7.25 71.28 7.92 53.1 8.05 ...
## $ Cabin : chr [1:891] NA "C85" NA "C123" ...
## $ Embarked : chr [1:891] "S" "C" "S" "S" ...
Jumlah baris dan kolom pada dataset dapat dilihat menggunakan:
cat("Jumlah baris :", nrow(data), "\n")
## Jumlah baris : 891
cat("Jumlah kolom :", ncol(data), "\n")
## Jumlah kolom : 12
Analisis difokuskan pada tiga variabel utama:
Age = umur penumpangSex = jenis kelamin penumpangSurvived = status keselamatan penumpangtitanic <- data %>%
select(Age, Sex, Survived)
head(titanic)
## # A tibble: 6 × 3
## Age Sex Survived
## <dbl> <chr> <dbl>
## 1 22 male 0
## 2 38 female 1
## 3 26 female 1
## 4 35 female 1
## 5 35 male 0
## 6 29 male 0
Pemeriksaan nilai missing dilakukan untuk memastikan tidak terdapat data kosong pada variabel yang digunakan.
missing_data <- colSums(is.na(titanic))
missing_data
## Age Sex Survived
## 0 0 0
Pemeriksaan duplikasi dilakukan berdasarkan seluruh data yang
digunakan. Duplikasi pada kombinasi Age, Sex,
dan Survived tidak langsung dianggap sebagai data duplikat
karena beberapa penumpang memang dapat memiliki umur, jenis kelamin, dan
status keselamatan yang sama.
duplikat <- sum(duplicated(data))
cat("Jumlah baris duplikat :", duplikat)
## Jumlah baris duplikat : 0
Karena variabel Age, Sex, dan
Survived merupakan variabel utama dalam analisis, data yang
memiliki nilai kosong pada ketiga variabel tersebut tidak digunakan.
titanic_clean <- titanic %>%
filter(
!is.na(Age),
!is.na(Sex),
!is.na(Survived)
)
cat(
"Jumlah data setelah pemeriksaan :",
nrow(titanic_clean)
)
## Jumlah data setelah pemeriksaan : 891
Statistik deskriptif digunakan untuk melihat jumlah data, nilai minimum, kuartil pertama, median, rata-rata, kuartil ketiga, maksimum, dan standar deviasi umur penumpang.
statistik_umur <- titanic_clean %>%
summarise(
Jumlah = n(),
Minimum = min(Age),
Q1 = quantile(Age, 0.25),
Median = median(Age),
Mean = mean(Age),
Q3 = quantile(Age, 0.75),
Maksimum = max(Age),
SD = sd(Age)
)
kable(
statistik_umur,
digits = 2,
caption = "Statistik Deskriptif Umur Penumpang"
)
| Jumlah | Minimum | Q1 | Median | Mean | Q3 | Maksimum | SD |
|---|---|---|---|---|---|---|---|
| 891 | 0.42 | 20 | 28 | 29.6 | 38 | 80 | 14.15 |
Histogram digunakan untuk melihat penyebaran umur penumpang.
ggplot(titanic_clean, aes(x = Age)) +
geom_histogram(
bins = 20,
color = "white"
) +
labs(
title = "Distribusi Umur Penumpang Titanic",
x = "Umur",
y = "Jumlah Penumpang"
) +
theme_minimal()
Boxplot digunakan untuk melihat median, persebaran, serta kemungkinan adanya nilai ekstrem pada umur penumpang.
ggplot(titanic_clean, aes(y = Age)) +
geom_boxplot() +
labs(
title = "Boxplot Umur Penumpang Titanic",
y = "Umur"
) +
theme_minimal()
Variabel Survived memiliki dua kategori:
0 = Tidak Selamat1 = Selamattabel_survived <- table(titanic_clean$Survived)
tabel_survived
##
## 0 1
## 549 342
persen_survived <- prop.table(tabel_survived) * 100
round(persen_survived, 2)
##
## 0 1
## 61.62 38.38
survived_table <- titanic_clean %>%
mutate(
Status = ifelse(
Survived == 1,
"Selamat",
"Tidak Selamat"
)
) %>%
count(Status) %>%
mutate(
Persentase = n / sum(n) * 100
)
kable(
survived_table,
digits = 2,
col.names = c(
"Status Keselamatan",
"Jumlah",
"Persentase (%)"
),
caption = "Status Keselamatan Penumpang"
)
| Status Keselamatan | Jumlah | Persentase (%) |
|---|---|---|
| Selamat | 342 | 38.38 |
| Tidak Selamat | 549 | 61.62 |
ggplot(survived_table, aes(x = Status, y = n)) +
geom_col() +
geom_text(
aes(label = n),
vjust = -0.3
) +
labs(
title = "Status Keselamatan Penumpang Titanic",
x = "Status Keselamatan",
y = "Jumlah Penumpang"
) +
theme_minimal()
Analisis ini digunakan untuk membandingkan karakteristik umur antara penumpang yang selamat dan tidak selamat.
umur_survived <- titanic_clean %>%
mutate(
Status = ifelse(
Survived == 1,
"Selamat",
"Tidak Selamat"
)
) %>%
group_by(Status) %>%
summarise(
Jumlah = n(),
Rata_rata_Umur = mean(Age),
Median_Umur = median(Age),
Minimum = min(Age),
Maksimum = max(Age),
SD = sd(Age),
.groups = "drop"
)
kable(
umur_survived,
digits = 2,
caption = "Umur Berdasarkan Status Keselamatan"
)
| Status | Jumlah | Rata_rata_Umur | Median_Umur | Minimum | Maksimum | SD |
|---|---|---|---|---|---|---|
| Selamat | 342 | 28.56 | 28 | 0.42 | 80 | 14.61 |
| Tidak Selamat | 549 | 30.25 | 28 | 1.00 | 74 | 13.84 |
ggplot(
titanic_clean,
aes(
x = factor(
Survived,
levels = c(0, 1),
labels = c("Tidak Selamat", "Selamat")
),
y = Age
)
) +
geom_boxplot() +
labs(
title = "Distribusi Umur Berdasarkan Status Keselamatan",
x = "Status Keselamatan",
y = "Umur"
) +
theme_minimal()
ggplot(
titanic_clean,
aes(
x = Age,
fill = factor(
Survived,
levels = c(0, 1),
labels = c("Tidak Selamat", "Selamat")
)
)
) +
geom_histogram(
bins = 20,
alpha = 0.6,
position = "identity"
) +
labs(
title = "Distribusi Umur Berdasarkan Status Keselamatan",
x = "Umur",
y = "Jumlah Penumpang",
fill = "Status"
) +
theme_minimal()
tabel_sex <- table(titanic_clean$Sex)
tabel_sex
##
## female male
## 314 577
persen_sex <- prop.table(tabel_sex) * 100
round(persen_sex, 2)
##
## female male
## 35.24 64.76
sex_table <- titanic_clean %>%
count(Sex) %>%
mutate(
Persentase = n / sum(n) * 100
)
kable(
sex_table,
digits = 2,
col.names = c(
"Jenis Kelamin",
"Jumlah",
"Persentase (%)"
),
caption = "Distribusi Jenis Kelamin Penumpang"
)
| Jenis Kelamin | Jumlah | Persentase (%) |
|---|---|---|
| female | 314 | 35.24 |
| male | 577 | 64.76 |
ggplot(sex_table, aes(x = Sex, y = n)) +
geom_col() +
geom_text(
aes(label = n),
vjust = -0.3
) +
labs(
title = "Distribusi Jenis Kelamin Penumpang Titanic",
x = "Jenis Kelamin",
y = "Jumlah Penumpang"
) +
theme_minimal()
Bagian ini digunakan untuk melihat perbedaan status keselamatan berdasarkan jenis kelamin.
tabel_sex_survived <- table(
titanic_clean$Sex,
titanic_clean$Survived
)
colnames(tabel_sex_survived) <- c(
"Tidak Selamat",
"Selamat"
)
tabel_sex_survived
##
## Tidak Selamat Selamat
## female 81 233
## male 468 109
persen_baris <- prop.table(
tabel_sex_survived,
margin = 1
) * 100
round(persen_baris, 2)
##
## Tidak Selamat Selamat
## female 25.80 74.20
## male 81.11 18.89
ggplot(
titanic_clean,
aes(
x = Sex,
fill = factor(
Survived,
levels = c(0, 1),
labels = c("Tidak Selamat", "Selamat")
)
)
) +
geom_bar(position = "dodge") +
labs(
title = "Status Keselamatan Berdasarkan Jenis Kelamin",
x = "Jenis Kelamin",
y = "Jumlah Penumpang",
fill = "Status Keselamatan"
) +
theme_minimal()
ggplot(
titanic_clean,
aes(
x = Sex,
fill = factor(
Survived,
levels = c(0, 1),
labels = c("Tidak Selamat", "Selamat")
)
)
) +
geom_bar(position = "fill") +
scale_y_continuous(
labels = percent_format()
) +
labs(
title = "Proporsi Status Keselamatan Berdasarkan Jenis Kelamin",
x = "Jenis Kelamin",
y = "Proporsi",
fill = "Status Keselamatan"
) +
theme_minimal()
Uji Chi-Square digunakan untuk mengetahui apakah terdapat hubungan antara jenis kelamin dan status keselamatan penumpang.
H0: Tidak terdapat hubungan antara jenis kelamin dan status keselamatan penumpang Titanic.
H1: Terdapat hubungan antara jenis kelamin dan status keselamatan penumpang Titanic.
Taraf signifikansi yang digunakan adalah 5% atau 0,05.
uji_chi <- chisq.test(tabel_sex_survived)
uji_chi
##
## Pearson's Chi-squared test with Yates' continuity correction
##
## data: tabel_sex_survived
## X-squared = 260.72, df = 1, p-value < 2.2e-16
uji_chi$expected
##
## Tidak Selamat Selamat
## female 193.4747 120.5253
## male 355.5253 221.4747
cat(
"Nilai Chi-Square =",
round(as.numeric(uji_chi$statistic), 3),
"\n"
)
## Nilai Chi-Square = 260.717
cat(
"Derajat bebas =",
as.numeric(uji_chi$parameter),
"\n"
)
## Derajat bebas = 1
cat(
"p-value =",
format.pval(uji_chi$p.value, digits = 5),
"\n"
)
## p-value = < 2.22e-16
alpha <- 0.05
if (uji_chi$p.value < alpha) {
cat("Keputusan: Tolak H0 karena p-value < 0,05.")
} else {
cat("Keputusan: Gagal menolak H0 karena p-value >= 0,05.")
}
## Keputusan: Tolak H0 karena p-value < 0,05.
if (uji_chi$p.value < alpha) {
cat(
"Berdasarkan hasil uji Chi-Square, terdapat hubungan yang signifikan antara jenis kelamin dan status keselamatan penumpang Titanic karena p-value < 0,05."
)
} else {
cat(
"Berdasarkan hasil uji Chi-Square, tidak terdapat hubungan yang signifikan antara jenis kelamin dan status keselamatan penumpang Titanic karena p-value >= 0,05."
)
}
Berdasarkan hasil uji Chi-Square, terdapat hubungan yang signifikan antara jenis kelamin dan status keselamatan penumpang Titanic karena p-value < 0,05.
ringkasan_umur <- titanic_clean %>%
mutate(
Status = ifelse(
Survived == 1,
"Selamat",
"Tidak Selamat"
)
) %>%
group_by(Status) %>%
summarise(
Jumlah = n(),
Rata_rata_Umur = mean(Age),
Median_Umur = median(Age),
.groups = "drop"
)
kable(
ringkasan_umur,
digits = 2,
caption = "Ringkasan Umur Berdasarkan Status Keselamatan"
)
| Status | Jumlah | Rata_rata_Umur | Median_Umur |
|---|---|---|---|
| Selamat | 342 | 28.56 | 28 |
| Tidak Selamat | 549 | 30.25 | 28 |
ringkasan_sex <- titanic_clean %>%
mutate(
Status = ifelse(
Survived == 1,
"Selamat",
"Tidak Selamat"
)
) %>%
group_by(Sex, Status) %>%
summarise(
Jumlah = n(),
.groups = "drop"
)
kable(
ringkasan_sex,
caption = "Ringkasan Jenis Kelamin dan Status Keselamatan"
)
| Sex | Status | Jumlah |
|---|---|---|
| female | Selamat | 233 |
| female | Tidak Selamat | 81 |
| male | Selamat | 109 |
| male | Tidak Selamat | 468 |
Berdasarkan analisis data Titanic, dapat diketahui gambaran status keselamatan penumpang berdasarkan umur dan jenis kelamin.
Analisis umur digunakan untuk melihat distribusi umur penumpang serta membandingkan karakteristik umur antara penumpang yang selamat dan tidak selamat. Sementara itu, analisis jenis kelamin digunakan untuk melihat jumlah dan proporsi penumpang yang selamat berdasarkan jenis kelamin.
Selanjutnya, hubungan antara jenis kelamin dan status keselamatan dianalisis menggunakan uji Chi-Square dengan taraf signifikansi 5%. Keputusan pengujian ditentukan berdasarkan nilai p-value yang diperoleh.
write.csv(
survived_table,
"tabel_status_keselamatan.csv",
row.names = FALSE
)
write.csv(
sex_table,
"tabel_jenis_kelamin.csv",
row.names = FALSE
)
write.csv(
umur_survived,
"tabel_umur_status_keselamatan.csv",
row.names = FALSE
)
write.csv(
ringkasan_sex,
"tabel_ringkasan_jenis_kelamin_keselamatan.csv",
row.names = FALSE
)
cat("File hasil analisis berhasil dibuat.")
## File hasil analisis berhasil dibuat.