data=read.csv("C:/Users/diyan/Downloads/Titanic-Dataset.csv", header = T, sep = ",")
Dataset Titanic diimpor ke dalam R menggunakan fungsi
read.csv().
Parameter header = TRUE digunakan agar nama kolom terbaca,
sedangkan sep = "," menunjukkan bahwa pemisah data adalah
tanda koma.
head(data)
## PassengerId Survived Pclass
## 1 1 0 3
## 2 2 1 1
## 3 3 1 3
## 4 4 1 1
## 5 5 0 3
## 6 6 0 3
## Name Sex Age SibSp Parch
## 1 Braund, Mr. Owen Harris male 22 1 0
## 2 Cumings, Mrs. John Bradley (Florence Briggs Thayer) female 38 1 0
## 3 Heikkinen, Miss. Laina female 26 0 0
## 4 Futrelle, Mrs. Jacques Heath (Lily May Peel) female 35 1 0
## 5 Allen, Mr. William Henry male 35 0 0
## 6 Moran, Mr. James male NA 0 0
## Ticket Fare Cabin Embarked
## 1 A/5 21171 7.2500 S
## 2 PC 17599 71.2833 C85 C
## 3 STON/O2. 3101282 7.9250 S
## 4 113803 53.1000 C123 S
## 5 373450 8.0500 S
## 6 330877 8.4583 Q
Tabel di atas menampilkan enam baris pertama dari dataset yang telah diinput ke dalam R.
Variabel yang digunakan dalam analisis ini adalah:
Pemilihan dilakukan karena seluruh variabel bersifat numerik dan relevan untuk analisis korelasi dan matriks kovarians.
data_selected=data[, c("Age", "SibSp", "Parch", "Fare")]
data[,] tanda koma berarti semua baris, c(“Age”, “SibSp”, “Parch”, “Fare”) c adalah combine, lalu pilih kolom apa aja yang akan di pilih/di combine yang akan menjadi satu vektor, lalu output yang akan keluar disimpan di variabel “data_selected” yang sudah diinisalisasikan di awal
head(data_selected)
## 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
## 6 NA 0 0 8.4583
Tabel di atas menampilkan 6 baris pertama dari data yang telah dipilih, yaitu variabel Age, SibSp, Parch, dan Fare.
dim(data_selected)
## [1] 891 4
Output menunjukkan bahwa data terdiri dari 891 baris (observasi) dan empat kolom variabel yang dianalisis.
str(data_selected)
## 'data.frame': 891 obs. of 4 variables:
## $ Age : num 22 38 26 35 35 NA 54 2 27 14 ...
## $ SibSp: int 1 1 0 1 0 0 0 3 0 1 ...
## $ Parch: int 0 0 0 0 0 0 0 1 2 0 ...
## $ Fare : num 7.25 71.28 7.92 53.1 8.05 ...
Struktur data menunjukkan bahwa seluruh variabel bertipe numerik, sehingga memenuhi syarat untuk analisis korelasi dan kovarians.
summary(data_selected)
## Age SibSp Parch Fare
## Min. : 0.42 Min. :0.000 Min. :0.0000 Min. : 0.00
## 1st Qu.:20.12 1st Qu.:0.000 1st Qu.:0.0000 1st Qu.: 7.91
## Median :28.00 Median :0.000 Median :0.0000 Median : 14.45
## Mean :29.70 Mean :0.523 Mean :0.3816 Mean : 32.20
## 3rd Qu.:38.00 3rd Qu.:1.000 3rd Qu.:0.0000 3rd Qu.: 31.00
## Max. :80.00 Max. :8.000 Max. :6.0000 Max. :512.33
## NA's :177
Ringkasan statistik menunjukkan nilai minimum, maksimum, median, rata-rata, serta keberadaan missing value pada masing-masing variabel.
data_clean=na.omit(data_selected)
na itu not available, omit itu menghilangkan sehingga na.omit(data_selected) itu menghilangkan data yang memiliki satu nilai NA yang hasilnya akan di simpan ke variabel “data_clean”. langkah ini wajib karena cor(), cov(), dan eigen() tidak bisa bekerja dengan NA
head(data_clean)
## 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
Tabel di atas menampilkan enam observasi pertama dari data yang telah dibersihkan dan tidak lagi mengandung nilai NA.
colSums(is.na(data_clean))
## Age SibSp Parch Fare
## 0 0 0 0
Output menjukkan data tidak lagi mengandung nilai NA.
cor_matrix=cor(data_clean)
cor() untuk menghitung matriks korelasi antar variabel yang menghasilkan nilai antar -1 sampai 1 yang aka disimpan di “cor_matrix”
nilai mendekati 1 berarti hubungan kuat searah, nilai -1 itu berarti hubungan kuat berlawanan arah, nilai mendekari 0 berarti hubungan lemah.
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
variabel dibandingkan dengan dirinya sendiri akan selalu bernilai 1 (Age-Age = 1, SibSp-SibSp = 1, dst), matriks korelasi menunjukkan bahwa variabel SibSp dan Parch memiliki hubungan positif sedang, yang menandakan bahwa penumpang yang membawa saudara atau pasangan cenderung juga membawa orang tua atau anak. Variabel Age memiliki korelasi negatif lemah hingga sedang terhadap SibSp dan Parch, sementara hubungan Age dengan Fare sangat lemah. Secara umum, tidak terdapat hubungan yang sangat kuat antar variabel yang dianalisis.
library(corrplot)
## corrplot 0.95 loaded
corrplot(cor_matrix,
method = "color",
type = "upper",
tl.col = "black",
addCoef.col = "black",
number.cex = 0.8)
Grafik heatmap korelasi menunjukkan kekuatan dan arah hubungan antar
variabel. Warna semakin gelap menandakan korelasi yang semakin kuat,
sedangkan nilai numerik menunjukkan besar koefisien korelasi antar
variabel.
cov_matrix=cov(data_clean)
cov() menghitung varians dan kovarians antar variabel, kalau elemen diagonal (Age-Age, dst) yang dihitung adalah varians masing-masing variabel, kalau elemen non-diagonal yang hitung adalah kovarians antar variabel. hasilnya akan disimpan pada “cov_matrix”.
Varians yang besar maka data menyebar luas, kovarians positif maka variabel naik bersama, kovarians negatif maka satu naik, yang lain turun.
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
Matriks varians-kovarians menunjukkan bahwa variabel Fare memiliki varians paling besar, menandakan harga tiket sangat bervariasi. Kovarians positif antara SibSp dan Parch menunjukkan bahwa penumpang yang membawa saudara atau pasangan cenderung juga membawa orang tua atau anak. Sementara itu, kovarians negatif antara Age dengan SibSp dan Parch menunjukkan bahwa penumpang yang lebih tua cenderung bepergian dengan lebih sedikit anggota keluarga.
eigen_result=eigen(cov_matrix)
eigen() untuk menghitung eigen value dan eigen vector dari matriks kovarians yang disimpan di “eigen_result”.
eigen_value=eigen_result$values
$values dipakai untuk mengambil komponen tertentu dari sebuah list eigen value terbesar merupakan komponen paling penting, digunakan juga pada PCA Eigen value menunjukkan seberapa besar variasi data yang dijelaskan oleh masing-masing komponen utama (principal component)
eigen_value
## [1] 2802.5636587 209.0385659 0.9438783 0.4787214
PC1 sangat dominan, PC1+PC2 sudah cukup untuk mempresentasikan data, PC3 dan PC4 bisa diabaikan karena kontribusinya sangat kecil.
plot(eigen_value,
type = "b",
pch = 19,
xlab = "Principal Component",
ylab = "Eigen Value",
main = "Scree Plot Eigen Value")
Scree plot menunjukkan bahwa eigen value menurun tajam pada komponen
awal. Hal ini menandakan bahwa sebagian besar variasi data dijelaskan
oleh komponen utama pertama dan kedua.
eigen_vector=eigen_result$vectors
Eigen vector menunjukkan arah dan kontribusi variabel dalam setiap komponen. Nilai absolut besar berarti variabelnya dominan, dan tanda (+/-) menunjukkan arah hubungan.
eigen_vector
## [,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
Eigen vector menunjukkan bahwa komponen utama pertama didominasi oleh variabel Fare, sedangkan komponen utama kedua didominasi oleh variabel Age. Komponen ketiga dan keempat lebih merepresentasikan hubungan antara variabel SibSp dan Parch, namun kontribusinya relatif kecil karena memiliki eigen value yang rendah.