1 Pendahuluan

Dataset Titanic berisi informasi mengenai penumpang kapal Titanic yang tenggelam pada tahun 1912. Variabel yang tersedia meliputi identitas penumpang, status keselamatan, kelas tiket, nama, jenis kelamin, umur, jumlah saudara/pasangan, jumlah orang tua/anak, nomor tiket, harga tiket, kabin, dan pelabuhan keberangkatan.

Analisis ini bertujuan untuk melakukan eksplorasi data terhadap karakteristik penumpang Titanic, khususnya variabel Age, Sex, dan Survived. Analisis juga mencakup pemeriksaan kualitas data, visualisasi distribusi, uji normalitas, pemeriksaan homogenitas varians, integrasi data, transformasi data kategorik, serta transformasi data numerik.

2 Identifikasi Data

2.1 Memuat Data

library(readxl)
library(dplyr)
library(ggplot2)
library(car)
library(knitr)

data_titanic <- read_excel("data set titanic  ensiklopedia sudah cleaning.xlsx")

dim(data_titanic)
## [1] 891  12
names(data_titanic)
##  [1] "PassengerId" "Survived"    "Pclass"      "Name"        "Sex"        
##  [6] "Age"         "SibSp"       "Parch"       "Ticket"      "Fare"       
## [11] "Cabin"       "Embarked"
head(data_titanic)
## # 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>

Dataset terdiri dari 891 baris dan 12 variabel. Variabel yang tersedia adalah PassengerId, Survived, Pclass, Name, Sex, Age, SibSp, Parch, Ticket, Fare, Cabin, dan Embarked.

2.2 Jenis dan Skala Variabel

Variabel Keterangan Jenis Skala
PassengerId ID penumpang Kualitatif Nominal
Survived Status keselamatan Kualitatif Nominal
Pclass Kelas tiket Kualitatif Ordinal
Name Nama penumpang Kualitatif Nominal
Sex Jenis kelamin Kualitatif Nominal
Age Umur Kuantitatif kontinu Rasio
SibSp Jumlah saudara/pasangan Kuantitatif diskrit Rasio
Parch Jumlah orang tua/anak Kuantitatif diskrit Rasio
Ticket Nomor tiket Kualitatif Nominal
Fare Harga tiket Kuantitatif kontinu Rasio
Cabin Kode kabin Kualitatif Nominal
Embarked Pelabuhan keberangkatan Kualitatif Nominal

3 Pemeriksaan Missing Value

Materi presentasi menjelaskan bahwa pada data sebelum cleaning terdapat 177 missing value pada Age, 687 pada Cabin, dan 2 pada Embarked. Nilai kosong pada Age kemudian dilengkapi menggunakan sumber tambahan dan median.

File Excel yang digunakan pada analisis ini sudah merupakan data hasil cleaning. Oleh karena itu, pemeriksaan pada file saat ini digunakan untuk memastikan kondisi data setelah cleaning.

missing_value <- colSums(is.na(data_titanic))
missing_value
## PassengerId    Survived      Pclass        Name         Sex         Age 
##           0           0           0           0           0           0 
##       SibSp       Parch      Ticket        Fare       Cabin    Embarked 
##           0           0           0           0         687           2

Pada file yang digunakan, Age tidak memiliki missing value. Kolom Cabin masih memiliki nilai kosong dan Embarked juga masih memiliki beberapa nilai kosong. Karena analisis difokuskan pada PassengerId, Survived, Sex, dan Age, kondisi missing pada variabel fokus tidak menghambat analisis.

4 Tujuan Analisis

Analisis difokuskan pada empat variabel utama:

  • PassengerId
  • Survived
  • Sex
  • Age

Tujuan analisis adalah mengeksplorasi distribusi jenis kelamin dan umur, melihat karakteristik umur berdasarkan jenis kelamin, memeriksa normalitas dan homogenitas, mengintegrasikan data karakteristik dengan status keselamatan, serta melakukan transformasi data kategorik dan numerik.

5 Data yang Digunakan

data_variabel <- data_titanic %>%
  select(PassengerId, Survived, Sex, Age)

head(data_variabel)
## # A tibble: 6 × 4
##   PassengerId Survived Sex      Age
##         <dbl>    <dbl> <chr>  <dbl>
## 1           1        0 male      22
## 2           2        1 female    38
## 3           3        1 female    26
## 4           4        1 female    35
## 5           5        0 male      35
## 6           6        0 male      29

Setelah pemilihan variabel, data analisis terdiri dari 891 observasi dengan empat variabel utama. Variabel Age digunakan sebagai variabel numerik utama, sedangkan Sex digunakan sebagai kelompok pembanding dan Survived sebagai informasi status keselamatan.

6 Statistik Deskriptif Age

statistik_age <- data_variabel %>%
  summarise(
    Jumlah = n(),
    Mean = mean(Age),
    Median = median(Age),
    SD = sd(Age),
    Minimum = min(Age),
    Maksimum = max(Age)
  )

kable(statistik_age, digits = 2)
Jumlah Mean Median SD Minimum Maksimum
891 29.6 28 14.15 0.42 80

Berdasarkan hasil statistik deskriptif, terdapat 891 data umur. Rata-rata umur penumpang adalah sekitar 29,60 tahun dengan median 28 tahun. Standar deviasi sebesar 14,15 menunjukkan adanya variasi umur yang cukup besar. Umur penumpang berkisar antara 0,42 sampai 80 tahun.

7 Histogram Age

Histogram digunakan untuk melihat bentuk distribusi umur secara visual.

ggplot(data_variabel, aes(x = Age)) +
  geom_histogram(bins = 30) +
  labs(
    title = "Histogram Usia Penumpang Titanic",
    x = "Age",
    y = "Frekuensi"
  ) +
  theme_minimal()

Distribusi umur menunjukkan konsentrasi data yang cukup besar pada usia muda hingga dewasa dan penyebaran ke arah usia yang lebih tinggi. Bentuk distribusi tidak sepenuhnya simetris.

8 Density Plot Age

ggplot(data_variabel, aes(x = Age)) +
  geom_density() +
  labs(
    title = "Density Plot Usia Penumpang Titanic",
    x = "Age",
    y = "Density"
  ) +
  theme_minimal()

Density plot menunjukkan pola distribusi umur secara lebih halus. Distribusi Age tidak sepenuhnya simetris dan terdapat penyimpangan dari bentuk normal.

9 Q-Q Plot Age

ggplot(data_variabel, aes(sample = Age)) +
  stat_qq() +
  stat_qq_line() +
  labs(
    title = "Q-Q Plot Usia Penumpang Titanic",
    x = "Theoretical Quantiles",
    y = "Sample Quantiles"
  ) +
  theme_minimal()

Pada Q-Q plot, data yang berdistribusi normal cenderung mengikuti garis acuan. Pada variabel Age, titik-titik tidak seluruhnya mengikuti garis, terutama pada bagian ujung distribusi. Hal ini menunjukkan adanya penyimpangan dari distribusi normal.

10 Uji Shapiro-Wilk

Hipotesis yang digunakan:

  • \(H_0\): data Age berdistribusi normal.
  • \(H_1\): data Age tidak berdistribusi normal.
shapiro_result <- shapiro.test(data_variabel$Age)
shapiro_result
## 
##  Shapiro-Wilk normality test
## 
## data:  data_variabel$Age
## W = 0.97916, p-value = 5.666e-10

Hasil uji Shapiro-Wilk memberikan statistik uji sekitar 0,97916 dengan p-value sekitar \(5,666 \times 10^{-10}\). Karena p-value < 0,05, maka \(H_0\) ditolak. Dengan demikian, variabel Age pada 891 data tidak berdistribusi normal.

Hasil ini tidak berarti bahwa data buruk. Dalam analisis eksploratif, distribusi yang tidak normal tetap dapat memberikan informasi mengenai karakteristik data. Normalitas perlu dipertimbangkan sesuai tujuan analisis dan metode statistik yang digunakan.

11 Perbandingan Age Berdasarkan Sex

Selanjutnya, karakteristik umur dibandingkan berdasarkan kelompok jenis kelamin.

karakteristik_sex <- data_variabel %>%
  group_by(Sex) %>%
  summarise(
    Jumlah = n(),
    Mean_Age = mean(Age),
    Median_Age = median(Age),
    Varians = var(Age)
  )

kable(karakteristik_sex, digits = 2)
Sex Jumlah Mean_Age Median_Age Varians
female 314 27.94 27 195.64
male 577 30.51 28 200.88

Penumpang laki-laki berjumlah 577 orang, sedangkan penumpang perempuan berjumlah 314 orang. Rata-rata umur laki-laki sekitar 30,51 tahun dan rata-rata umur perempuan sekitar 27,94 tahun. Dengan demikian, kelompok laki-laki cenderung memiliki rata-rata umur yang lebih tinggi. Varians kedua kelompok relatif berdekatan.

12 Boxplot Age Berdasarkan Sex

ggplot(data_variabel, aes(x = Sex, y = Age)) +
  geom_boxplot() +
  labs(
    title = "Boxplot Usia Berdasarkan Jenis Kelamin",
    x = "Jenis Kelamin",
    y = "Age"
  ) +
  theme_minimal()

Boxplot menunjukkan bahwa penyebaran umur antara kelompok laki-laki dan perempuan relatif mirip. Hal ini menjadi dasar untuk pemeriksaan homogenitas varians.

13 Uji Levene

Hipotesis:

  • \(H_0\): varians umur kelompok laki-laki dan perempuan sama (homogen).
  • \(H_1\): varians umur kelompok laki-laki dan perempuan berbeda (tidak homogen).
levene_result <- leveneTest(Age ~ Sex, data = data_variabel)
levene_result
## Levene's Test for Homogeneity of Variance (center = median)
##        Df F value Pr(>F)
## group   1  0.2307 0.6311
##       889

Hasil uji Levene memberikan \(F = 0,2307\) dan p-value = 0,6311. Karena p-value > 0,05, maka \(H_0\) tidak ditolak. Artinya, tidak terdapat bukti yang cukup bahwa varians umur laki-laki dan perempuan berbeda secara statistik, sehingga varians dapat dianggap homogen.

14 Integrasi Data

Data karakteristik dan data keselamatan diintegrasikan menggunakan PassengerId sebagai key. Pada data yang digunakan, informasi Sex dan Age digabungkan dengan Survived.

data_karakteristik <- data_titanic %>%
  select(PassengerId, Sex, Age)

data_keselamatan <- data_titanic %>%
  select(PassengerId, Survived)

data_integrasi <- left_join(
  data_karakteristik,
  data_keselamatan,
  by = "PassengerId"
)

head(data_integrasi)
## # A tibble: 6 × 4
##   PassengerId Sex      Age Survived
##         <dbl> <chr>  <dbl>    <dbl>
## 1           1 male      22        0
## 2           2 female    38        1
## 3           3 female    26        1
## 4           4 female    35        1
## 5           5 male      35        0
## 6           6 male      29        0
dim(data_integrasi)
## [1] 891   4

left_join() menggunakan PassengerId sebagai kunci penggabungan. Hasilnya merupakan satu dataset yang memuat karakteristik penumpang dan status keselamatan setiap penumpang.

15 Transformasi Data Kategorik: One-Hot Encoding

Variabel Sex pada awalnya berbentuk kategori teks, yaitu male dan female. Untuk mengubah kategori menjadi bentuk numerik, digunakan one-hot encoding.

data_encoding <- data_integrasi %>%
  mutate(
    Sex_male = ifelse(Sex == "male", 1, 0),
    Sex_female = ifelse(Sex == "female", 1, 0)
  )

head(data_encoding)
## # A tibble: 6 × 6
##   PassengerId Sex      Age Survived Sex_male Sex_female
##         <dbl> <chr>  <dbl>    <dbl>    <dbl>      <dbl>
## 1           1 male      22        0        1          0
## 2           2 female    38        1        0          1
## 3           3 female    26        1        0          1
## 4           4 female    35        1        0          1
## 5           5 male      35        0        1          0
## 6           6 male      29        0        1          0

Hasil encoding menghasilkan kolom indikator 0/1. Nilai 1 menunjukkan bahwa penumpang termasuk kategori tersebut, sedangkan nilai 0 menunjukkan bukan kategori tersebut. Transformasi ini membuat variabel kategorik lebih mudah digunakan dalam proses analisis atau pemodelan.

16 Pemeriksaan Statistik Awal untuk Transformasi Numerik

summary(data_variabel$Age)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    0.42   20.00   28.00   29.60   38.00   80.00
sd(data_variabel$Age)
## [1] 14.15357

Usia penumpang berkisar antara 0,42 hingga 80 tahun dengan rata-rata sekitar 29,60 tahun dan standar deviasi sekitar 14,15. Rentang yang cukup luas menunjukkan bahwa Age dapat digunakan untuk melihat pengaruh beberapa bentuk transformasi numerik.

17 Normalisasi Min-Max

Rumus normalisasi Min-Max:

\[ X' = \frac{X - X_{\min}}{X_{\max} - X_{\min}} \]

data_transformasi <- data_variabel %>%
  mutate(
    Age_minmax = (Age - min(Age)) / (max(Age) - min(Age))
  )

summary(data_transformasi$Age_minmax)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##  0.0000  0.2460  0.3466  0.3667  0.4722  1.0000

Hasil normalisasi mengubah Age ke rentang 0 sampai 1. Nilai minimum menjadi 0 dan nilai maksimum menjadi 1, sedangkan urutan relatif nilai umur tetap dipertahankan.

18 Standarisasi Z-Score

Rumus Z-Score:

\[ Z = \frac{X - \bar{X}}{s} \]

data_transformasi <- data_transformasi %>%
  mutate(
    Age_zscore = (Age - mean(Age)) / sd(Age)
  )

summary(data_transformasi$Age_zscore)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
## -2.0618 -0.6784 -0.1132  0.0000  0.5934  3.5608

Hasil Z-Score memiliki mean yang mendekati 0 dan standar deviasi mendekati 1. Nilai Z positif menunjukkan umur berada di atas rata-rata, sedangkan nilai Z negatif menunjukkan umur berada di bawah rata-rata. Z-Score merupakan ukuran posisi relatif, bukan skala umur baru.

19 Pemeriksaan Keamanan Transformasi Invers

Transformasi invers dapat menghasilkan nilai yang sangat besar jika nilai awal mendekati nol. Oleh karena itu, perlu dipastikan bahwa tidak terdapat nilai Age sama dengan nol.

min(data_variabel$Age)
## [1] 0.42
sum(data_variabel$Age == 0)
## [1] 0

Nilai minimum Age adalah 0,42 dan tidak terdapat nilai Age = 0. Dengan demikian, transformasi invers dapat dilakukan. Meskipun demikian, nilai yang sangat dekat dengan nol tetap dapat menghasilkan nilai transformasi yang besar.

20 Transformasi Inverse Square

Transformasi yang digunakan:

\[ X' = \frac{1}{X^2} \]

data_transformasi <- data_transformasi %>%
  mutate(
    Age_inverse_square = 1 / Age^2
  )

summary(data_transformasi$Age_inverse_square)
##      Min.   1st Qu.    Median      Mean   3rd Qu.      Max. 
## 0.0001562 0.0006925 0.0012755 0.0321395 0.0025000 5.6689342
sd(data_transformasi$Age_inverse_square)
## [1] 0.2507269

Hasil transformasi memiliki nilai minimum sekitar 0,000156, maksimum sekitar 5,67, rata-rata sekitar 0,0321, dan standar deviasi sekitar 0,251. Semakin besar umur, semakin kecil nilai transformasinya. Sebaliknya, umur yang mendekati nol menghasilkan nilai yang lebih besar sehingga transformasi ini lebih sensitif terhadap usia rendah.

21 Transformasi Inverse Cubic

Transformasi yang digunakan:

\[ X' = \frac{1}{X^3} \]

data_transformasi <- data_transformasi %>%
  mutate(
    Age_inverse_cubic = 1 / Age^3
  )

summary(data_transformasi$Age_inverse_cubic)
##      Min.   1st Qu.    Median      Mean   3rd Qu.      Max. 
## 2.000e-06 1.820e-05 4.560e-05 3.964e-02 1.250e-04 1.350e+01
sd(data_transformasi$Age_inverse_cubic)
## [1] 0.4949466

Inverse Cubic menghasilkan perubahan yang lebih tajam dibandingkan Inverse Square. Semakin besar umur, nilai transformasi semakin kecil, sedangkan usia yang rendah menghasilkan nilai yang jauh lebih besar karena menggunakan pangkat tiga.

22 Visualisasi Sebelum Transformasi

ggplot(data_transformasi, aes(x = Age)) +
  geom_histogram(bins = 30) +
  labs(
    title = "Distribusi Age Sebelum Transformasi",
    x = "Age",
    y = "Frekuensi"
  ) +
  theme_minimal()

Visualisasi sebelum transformasi digunakan sebagai dasar untuk membandingkan perubahan skala dan penyebaran data setelah transformasi.

23 Perbandingan Hasil Transformasi

tabel_transformasi <- data.frame(
  Variabel = c(
    "Age",
    "Age Min-Max",
    "Age Z-Score",
    "Age Inverse Square",
    "Age Inverse Cubic"
  ),
  Minimum = c(
    min(data_transformasi$Age),
    min(data_transformasi$Age_minmax),
    min(data_transformasi$Age_zscore),
    min(data_transformasi$Age_inverse_square),
    min(data_transformasi$Age_inverse_cubic)
  ),
  Mean = c(
    mean(data_transformasi$Age),
    mean(data_transformasi$Age_minmax),
    mean(data_transformasi$Age_zscore),
    mean(data_transformasi$Age_inverse_square),
    mean(data_transformasi$Age_inverse_cubic)
  ),
  SD = c(
    sd(data_transformasi$Age),
    sd(data_transformasi$Age_minmax),
    sd(data_transformasi$Age_zscore),
    sd(data_transformasi$Age_inverse_square),
    sd(data_transformasi$Age_inverse_cubic)
  ),
  Maksimum = c(
    max(data_transformasi$Age),
    max(data_transformasi$Age_minmax),
    max(data_transformasi$Age_zscore),
    max(data_transformasi$Age_inverse_square),
    max(data_transformasi$Age_inverse_cubic)
  )
)

kable(tabel_transformasi, digits = 4)
Variabel Minimum Mean SD Maksimum
Age 0.4200 29.6018 14.1536 80.0000
Age Min-Max 0.0000 0.3667 0.1779 1.0000
Age Z-Score -2.0618 0.0000 1.0000 3.5608
Age Inverse Square 0.0002 0.0321 0.2507 5.6689
Age Inverse Cubic 0.0000 0.0396 0.4949 13.4975

Perbandingan menunjukkan bahwa setiap transformasi mengubah skala dan karakteristik penyebaran Age dengan cara yang berbeda. Min-Max membatasi nilai pada 0–1, Z-Score memusatkan data di sekitar rata-rata 0, sedangkan transformasi invers menghasilkan hubungan non-linear dan lebih sensitif terhadap nilai umur yang rendah.

24 Kesimpulan

Berdasarkan analisis eksploratif, dataset Titanic yang digunakan terdiri dari 891 observasi dengan 12 variabel. Analisis difokuskan pada PassengerId, Survived, Sex, dan Age.

Variabel Age memiliki rata-rata 29,60 tahun, median 28 tahun, standar deviasi 14,15 tahun, serta rentang usia 0,42–80 tahun. Histogram, density plot, dan Q-Q plot menunjukkan bahwa distribusi umur tidak sepenuhnya normal. Hasil Shapiro-Wilk juga menunjukkan p-value < 0,05 sehingga data Age tidak berdistribusi normal.

Berdasarkan jenis kelamin, terdapat 314 penumpang perempuan dan 577 penumpang laki-laki. Rata-rata umur laki-laki sekitar 30,51 tahun, sedangkan perempuan sekitar 27,94 tahun. Uji Levene menghasilkan p-value 0,6311 > 0,05 sehingga varians umur berdasarkan jenis kelamin dapat dianggap homogen.

Data karakteristik dan status keselamatan berhasil diintegrasikan menggunakan PassengerId. Variabel Sex kemudian diubah melalui one-hot encoding menjadi indikator numerik 0/1.

Pada transformasi numerik, Min-Max mengubah Age ke rentang 0–1, sedangkan Z-Score menghasilkan mean mendekati 0 dan standar deviasi mendekati 1. Transformasi Inverse Square dan Inverse Cubic menghasilkan hubungan non-linear dan lebih sensitif terhadap usia yang mendekati nol. Tidak terdapat Age = 0, sehingga transformasi invers dapat dilakukan.

Secara keseluruhan, pemilihan transformasi perlu disesuaikan dengan tujuan analisis dan karakteristik data. Transformasi tidak secara otomatis membuat data menjadi normal, tetapi dapat digunakan untuk mengubah skala dan bentuk penyebaran data.