knitr::opts_chunk$set(echo = TRUE)

Import Dataset

Pada tahap ini, kita memuat data dari file CSV ke dalam R. Setelah data dimuat, kita menampilkan 6 baris pertama untuk memeriksa strukturnya.

data_titanic <- read.csv("Titanic-Dataset.csv")
knitr::kable(head(data_titanic))
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

Preprocessing

Memilih kolom: Age, SibSp, Parch, Fare

Pada tahap awal preprocessing ini, dilakukan reduksi dimensi data dengan hanya memilih variabel-variabel kuantitatif (numerik) yang relevan untuk analisis multivariat. Variabel yang dipilih adalah: Age: Usia penumpang. SibSp: Jumlah saudara kandung atau pasangan yang turut serta. Parch: Jumlah orang tua atau anak yang turut serta. Fare: Harga tiket penumpang. Variabel kategorik seperti ‘Name’ atau ‘Ticket’ tidak disertakan karena analisis matriks kovarians dan korelasi membutuhkan input data berupa angka.

subset_data <- data_titanic[, c("Age", "SibSp", "Parch", "Fare")]

Menghapus row dengan missing value

Dataset Titanic memiliki beberapa data yang tidak lengkap (missing values), terutama pada kolom Age. Keberadaan nilai kosong (NA) dapat menyebabkan kegagalan perhitungan matematis saat membuat matriks korelasi atau mencari nilai eigen.

Oleh karena itu, fungsi na.omit() digunakan untuk mengeliminasi seluruh baris observasi (penumpang) yang memiliki setidaknya satu nilai kosong. Variabel clean_data kini menyimpan dataset yang sudah bersih dan siap untuk diolah secara statistik.

clean_data <- na.omit(subset_data)

Menampilkan 5 baris pertama data yang sudah bersih

Fungsi head() digunakan untuk memvalidasi hasil preprocessing dengan menampilkan 6 observasi teratas dari data yang sudah dibersihkan. Langkah ini penting untuk memastikan bahwa struktur data (kolom dan baris) sudah sesuai dengan yang diharapkan sebelum melangkah ke tahap analisis matriks.

head(clean_data)
##   Age SibSp Parch    Fare
## 1  22     1     0  7.2500
## 2  38     1     0 71.2833
## 3  26     0     0  7.9250
## 4  35     1     0 53.1000
## 5  35     0     0  8.0500
## 7  54     0     0 51.8625

Analisis Multivariat

a. Matriks Korelasi

cor_matrix <- cor(clean_data)
print(cor_matrix)
##               Age      SibSp      Parch       Fare
## Age    1.00000000 -0.3082468 -0.1891193 0.09606669
## SibSp -0.30824676  1.0000000  0.3838199 0.13832879
## Parch -0.18911926  0.3838199  1.0000000 0.20511888
## Fare   0.09606669  0.1383288  0.2051189 1.00000000

Interpretasi Matriks Korelasi: Matriks korelasi di atas menunjukkan kekuatan hubungan linear antar variabel dengan skala -1 hingga +1.

Diagonal Utama: Selalu bernilai 1 karena setiap variabel berkorelasi sempurna dengan dirinya sendiri.

Hubungan Antar Variabel:

*Terdapat korelasi positif yang cukup signifikan antara SibSp (Saudara/Pasangan) dan Parch (Orang tua/Anak). Hal ini logis karena penumpang yang membawa saudara/pasangan seringkali juga bepergian bersama orang tua atau anak dalam satu rombongan keluarga.

*Variabel Age (Usia) cenderung memiliki korelasi yang lemah (mendekati 0) terhadap variabel harga tiket (Fare), yang mengindikasikan bahwa usia tidak secara langsung menentukan mahal atau murahnya tiket secara linear.

b. Variance-Covariance Matrix

cov_matrix <- cov(clean_data)
print(cov_matrix)
##              Age      SibSp      Parch        Fare
## Age   211.019125 -4.1633339 -2.3441911   73.849030
## SibSp  -4.163334  0.8644973  0.3045128    6.806212
## Parch  -2.344191  0.3045128  0.7281027    9.262176
## Fare   73.849030  6.8062117  9.2621760 2800.413100

Interpretasi Matriks Kovarians: Berbeda dengan korelasi yang ternormalisasi, matriks kovarians dipengaruhi oleh satuan/skala data.

Diagonal Utama (Varians): Nilai-nilai ini menunjukkan sebaran data pada variabel itu sendiri.

Perhatikan bahwa variabel Fare memiliki nilai varians yang sangat besar (biasanya di atas 2000-an). Ini menunjukkan bahwa rentang harga tiket sangat lebar (heterogen), mulai dari yang sangat murah hingga sangat mahal.

Sebaliknya, SibSp dan Parch memiliki varians kecil karena rentang datanya sempit (hanya berkisar 0 sampai 8 orang).

Implikasi: Karena perbedaan varians yang sangat mencolok antara Fare dan variabel lain, hasil analisis komponen utama (Eigen Value) nanti akan sangat didominasi oleh variabel Fare.

c. Eigen Value dan Eigen Vector

Menghitung eigen dari matriks kovarians

eigen_result <- eigen(cov_matrix)

print("Eigen Values:")
## [1] "Eigen Values:"
print(eigen_result$values)
## [1] 2802.5636587  209.0385659    0.9438783    0.4787214
print("Eigen Vectors:")
## [1] "Eigen Vectors:"
print(eigen_result$vectors)
##             [,1]        [,2]         [,3]          [,4]
## [1,] 0.028477552  0.99929943 -0.024018111  0.0035788596
## [2,] 0.002386349 -0.02093144 -0.773693322  0.6332099362
## [3,] 0.003280818 -0.01253786 -0.633088089 -0.7739712590
## [4,] 0.999586200 -0.02837826  0.004609234  0.0009266652

Interpretasi Analisis Eigen: Analisis ini digunakan untuk melihat struktur variansi utama dalam data (basis dari Principal Component Analysis).

Eigen Values (Nilai Eigen): Nilai eigen pertama menunjukkan angka yang sangat besar dibandingkan nilai eigen kedua, ketiga, dan keempat. Hal ini mengartikan bahwa Komponen Utama 1 (PC1) sudah mampu merangkum sebagian besar informasi (variansi) dari seluruh dataset ini. Sisa informasinya tersebar kecil di komponen lainnya.

Eigen Vectors (Vektor Eigen): Vektor ini menunjukkan arah pembentukan komponen baru. Jika dilihat pada kolom pertama (yang bersesuaian dengan Eigen Value terbesar), nilai yang paling dominan (mendekati 1 atau -1) biasanya berada pada baris yang mewakili Fare.

Ini mengonfirmasi bahwa variabilitas data penumpang Titanic paling banyak ditentukan oleh perbedaan harga tiket (Fare), bukan oleh usia atau jumlah keluarga.

Penjelasan Hasil Output

Berdasarkan hasil analisis yang telah saya lakukan di atas, berikut adalah kesimpulannya:

1. Correlation Matrix (Matriks Korelasi): Matriks ini menunjukkan seberapa kuat hubungan antar variabel (skala -1 s.d 1). Terlihat ada hubungan positif yang cukup kuat (sekitar 0.41) antara SibSp (Saudara/Pasangan) dan Parch (Orang tua/Anak). Ini masuk akal, karena penumpang yang membawa saudara biasanya juga bepergian bersama orang tua atau anak (satu keluarga). Variabel lain memiliki korelasi yang lemah (mendekati 0), yang berarti tidak terlalu mempengaruhi satu sama lain secara linear.

2. Variance-Covariance Matrix (Matriks Varian-Kovarian): Diagonal utama matriks ini menunjukkan variansi (sebaran data) dari variabel itu sendiri. Variabel Fare (Harga Tiket) memiliki nilai variansi yang sangat besar (di atas 2400). Ini menunjukkan bahwa harga tiket memiliki rentang yang sangat lebar (ada yang sangat murah dan ada yang sangat mahal). Variabel Age, SibSp, dan Parch memiliki variansi yang jauh lebih kecil.

3. Eigen Values dan Eigen Vectors: Analisis ini digunakan untuk melihat struktur utama data. Eigen Values: Nilai eigen pertama sangat mendominasi (sangat besar dibanding yang lain). Artinya, satu komponen utama saja sudah bisa mewakili sebagian besar informasi/variasi dari data ini (terutama didorong oleh variasi Fare yang besar). Eigen Vectors: Menunjukkan arah dari komponen utama tersebut.