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 ————

Pendahuluan

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.

1. Persiapan

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:

2. Memasukkan Data

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>

3. Melihat Struktur Data

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

4. Memilih Variabel

Analisis difokuskan pada tiga variabel utama:

titanic <- 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

5. Pemeriksaan Data

5.1 Pemeriksaan Nilai Missing

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

5.2 Pemeriksaan Duplikasi

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

5.3 Data yang Digunakan

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

6. Analisis Umur Penumpang

6.1 Statistik Deskriptif Umur

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"
)
Statistik Deskriptif Umur Penumpang
Jumlah Minimum Q1 Median Mean Q3 Maksimum SD
891 0.42 20 28 29.6 38 80 14.15

6.2 Histogram Umur

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()

6.3 Boxplot Umur

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()

7. Status Keselamatan Penumpang

Variabel Survived memiliki dua kategori:

7.1 Frekuensi Status Keselamatan

tabel_survived <- table(titanic_clean$Survived)

tabel_survived
## 
##   0   1 
## 549 342

7.2 Persentase Status Keselamatan

persen_survived <- prop.table(tabel_survived) * 100

round(persen_survived, 2)
## 
##     0     1 
## 61.62 38.38

7.3 Tabel Status Keselamatan

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 Penumpang
Status Keselamatan Jumlah Persentase (%)
Selamat 342 38.38
Tidak Selamat 549 61.62

7.4 Grafik Status Keselamatan

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()

8. Umur Berdasarkan Status Keselamatan

8.1 Statistik Umur Berdasarkan Status Keselamatan

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"
)
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

8.2 Boxplot Umur Berdasarkan Status Keselamatan

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()

8.3 Histogram Umur Berdasarkan Status Keselamatan

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()

9. Analisis Jenis Kelamin

9.1 Frekuensi Jenis Kelamin

tabel_sex <- table(titanic_clean$Sex)

tabel_sex
## 
## female   male 
##    314    577

9.2 Persentase Jenis Kelamin

persen_sex <- prop.table(tabel_sex) * 100

round(persen_sex, 2)
## 
## female   male 
##  35.24  64.76

9.3 Tabel Jenis Kelamin

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"
)
Distribusi Jenis Kelamin Penumpang
Jenis Kelamin Jumlah Persentase (%)
female 314 35.24
male 577 64.76

9.4 Grafik Jenis Kelamin

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()

10. Hubungan Jenis Kelamin dengan Status Keselamatan

Bagian ini digunakan untuk melihat perbedaan status keselamatan berdasarkan jenis kelamin.

10.1 Tabel Silang

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

10.2 Persentase Status Keselamatan Berdasarkan Jenis Kelamin

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

10.3 Grafik Jumlah Status Keselamatan

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()

10.4 Grafik Proporsi Status Keselamatan

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()

11. Uji Chi-Square

Uji Chi-Square digunakan untuk mengetahui apakah terdapat hubungan antara jenis kelamin dan status keselamatan penumpang.

11.1 Hipotesis

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.

11.2 Melakukan Uji Chi-Square

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

11.3 Frekuensi Harapan

uji_chi$expected
##         
##          Tidak Selamat  Selamat
##   female      193.4747 120.5253
##   male        355.5253 221.4747

11.4 Nilai Chi-Square dan p-value

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

11.5 Keputusan Uji

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.

11.6 Interpretasi

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.

12. Ringkasan Analisis

12.1 Ringkasan Umur Berdasarkan Status Keselamatan

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"
)
Ringkasan Umur Berdasarkan Status Keselamatan
Status Jumlah Rata_rata_Umur Median_Umur
Selamat 342 28.56 28
Tidak Selamat 549 30.25 28

12.2 Ringkasan Jenis Kelamin dan Keselamatan

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"
)
Ringkasan Jenis Kelamin dan Status Keselamatan
Sex Status Jumlah
female Selamat 233
female Tidak Selamat 81
male Selamat 109
male Tidak Selamat 468

13. Kesimpulan

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.

14. Menyimpan Hasil Analisis

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.