knitr::opts_chunk$set(echo = TRUE)
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 |
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")]
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)
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
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.
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.
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.
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.