Import Data

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.

Pemilihan Variabel

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.

Menghapus baris yang ada missing value

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.

Correlation Matrix

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.

Variance Covariance Matrix

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 Value dan Eigen Vector

eigen_result=eigen(cov_matrix)

eigen() untuk menghitung eigen value dan eigen vector dari matriks kovarians yang disimpan di “eigen_result”.

A. Eigen Value

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.

B. Eigen Vector

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.