#1.load dataset 
data <- read.csv("https://raw.githubusercontent.com/datasciencedojo/datasets/master/titanic.csv")


#2A. pilih beberapa row
data_olah1 <- data[, c("Age", "SibSp", "Parch", "Fare")]
head(data_olah1)
##   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
# 2B. hapus missing value
data_misval <- na.omit(data_olah1) 
head(data_misval)
##   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
print(dim(data_olah1))
## [1] 891   4
print(dim(data_misval))
## [1] 714   4
#3Ai. korelasi matrik
  1. matrik corelasi mengidentifikasi seberapa berhubungan antara fitur a dan fitur lainnya

  2. sebagai contoh adalah age dan fare dimana tertulis 0.096(9,6%) menandakan keduanya memiliki hubungan lemah (jadi umur memimiliki pengaruh lemah dalam penentuan tarif(lbh murah/lbh mahal)

cor_mat <- cor(data_misval) 
cor_mat
##               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
#3aii. cor plot
library(corrplot)
corrplot(cor_mat,
         method = "color",
         type = "full",
         tl.col = "black",
         tl.srt = 45,
         title = "Correlation Matrix Heatmap",
         mar = c(0, 0, 2, 0))

#3Bi. varian covarian
  1. Variance mengukur seberapa menyebar data dari rata-ratanya,semakin besar varians semakin menyebar datanya dari mean

  2. Covariance mengukur bagaimana dua variabel berubah bersama

  3. pada varian age terlihat persebaran kecil karena terlihat cukup menumpuk dan tidak jauh dari mean(titik merah),sedangkan pada SibSp sebaliknya

  4. jika pola menyebar acak maka covarian hampir tidak ada(mendekati 0)

  5. coba kita lihat pada age dan sipsb yang korelasinya terendah terlihat cov=-4.1 dan plotnya tidak memiliki ke iringan jelas maka cov mendekati 0 menandakan keduanya tidak memiliki hubungan jelas , Saat Age > mean, Fare juga sering > mean

  6. Saat Age < mean, Fare juga sering < mean 7. jika pola terlihat miring naik maka cov positif,miring turun maka cov negatif coba lihat pada age dan fare terlihat corelasi cukup tinggi dan cov =

cov_mat <- cov(data_misval)
cov_mat
##              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
#3Bii. plot variance covariance all
panel.scatter.mean <- function(x,y,...){ 
  points(x,y,pch = 19,col ="blue") 
  points(mean(y),pch = 19,col = "black",cex = 1.8)
  points(mean(x),pch = 19,col = "red",cex = 1.8) 
}

panel.diag.scatter.mean <- function(x, ...) { 
  points(x, x, col ="blue", pch = 19) 
  points(mean(x), mean(x), col = "red", pch = 19, cex =2)
} 

data_misval_num <- data_misval[, sapply(data_misval, is.numeric)]
par(mar = c(3,3,2,2)) 
pairs(data_misval_num, main = "Scatterplot Matrix",
      lower.panel = panel.scatter.mean, upper.panel = panel.scatter.mean, diag.panel =panel.diag.scatter.mean)

#3Biii.plot variance kovariance fare age
mean_age <- mean(data_misval$Age)
mean_fare <- mean(data_misval$Fare)
plot(data_misval$Age,
  data_misval$Fare,
  main="Age vs Fare ", 
  xlab="Age",
  ylab="Fare",
  pch=19,
  col="blue")
points(mean_age, col = "red", pch = 19, cex = 2)
points(mean_fare, col ="black", pch = 19, cex = 2)

#3Ci.eigen vekcyor dan eigen value

  1. Eigenvector = arah utama penyebaran data Bayangin scatterplot 3D atau banyak variabel:Data tidak menyebar sembarang, tapi biasanya memanjang ke arah tertentu.Nah arah itu = eigenvector
  2. Eigenvector menunjukkan arah pola terbesar dalam data
  3. Eigenvalue = seberapa besar variasi data di arah eigenvector tersebut
  4. Eigenvalue menunjukkan seberapa penting arah itu,Semakin besar eigenvalue mK semakin besar informasi/variasi yang dijelaskan.
  5. Cv = (lamda)v
  6. C = covariance matrix,v = eigenvector,λ = eigenvalue
  7. eigen value terbesar pada pc1,PC1 menjelaskan arah utama variasi data
  8. eigen value digunakan untuk menentukan kita akan pakai berapa pc dan pc mana saja(tergantung threshold)

#ALUR 1. hitung cov matrik 2. dapatkan eigen value dan eigen matrikdari cov matrik tersebut

  1. PCk=a1​Age+a2​SibSp+a3​Parch+a4​Fare
  2. pc1 didominasi fare(0.99),variasi terbesar dipengaruhi harga tiket
  3. pc 2= age, variasi terbesar didominasi perbedaan umur
  4. pc 3 = SibSp (tapi negatif),PC3 menangkap variasi dari ukuran keluarga di kapal.(negatif ga ngaruh ,arahnya bisa dibalik)
  5. pc 4 = parch dan fare tapi berkebalikan tanda artinya banyak SibSp tapi sedikit Parch

Hampir seluruh informasi data ada di PC1 dan PC2

eigen_res <- eigen(cov_mat)
eigen_res[["values"]]
## [1] 2802.5636587  209.0385659    0.9438783    0.4787214
eigen_val <- eigen_res$values
eigen_vec <- eigen_res$vectors

#3Cii. eigen value
print(eigen_val)
## [1] 2802.5636587  209.0385659    0.9438783    0.4787214
#3Ciii. eigen vektor
print(eigen_vec)
##             [,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
  1. arah utama(eigenval) dijelaskan pc1 paling besar,pc 2 ada tapi dikit,pc3,4 cukup mendekati 0 artinya penjelasan variasi cukup lemah
  2. age menjadi eigenvalue terbesar
#3Civ.plot eigen
eigen_val = eigen_res$values
plot(eigen_val, type = "b",
  pch = 19,  
  col = "blue", 
  xlab = "Principal Component", 
  ylab = "Eigenvalue",
  main = "Scree Plot")

  1. jadi gini eigen value adalah arah variasi banyak ditentuin oleh pc1/pc2/pc3/4 sih (eigen value)
  2. nah pada setiap pc itu variasinya ditentuin oleh fitur apa(igen vektor)