Import Data

library(corrplot)
library(ggplot2)
library(knitr)
data <- read.csv("Maternal Health Risk Data Set.csv")
data <- data[, sapply(data, is.numeric)]
head(data)
##   Age SystolicBP DiastolicBP    BS BodyTemp HeartRate
## 1  25        130          80 15.00       98        86
## 2  35        140          90 13.00       98        70
## 3  29         90          70  8.00      100        80
## 4  30        140          85  7.00       98        70
## 5  35        120          60  6.10       98        76
## 6  23        140          80  7.01       98        70

Dataset Maternal Health Risk ini berisi data kesehatan ibu hamil dengan 6 variabel numerik: Age (umur), SystolicBP (tekanan darah sistolik), DiastolicBP (tekanan darah diastolik), BS (gula darah), BodyTemp (suhu tubuh), dan HeartRate (detak jantung).


Correlation Matrix

corr_matrix <- cor(data)
kable(round(corr_matrix, 4), caption = "Tabel Correlation Matrix")
Tabel Correlation Matrix
Age SystolicBP DiastolicBP BS BodyTemp HeartRate
Age 1.0000 0.4160 0.3980 0.4733 -0.2553 0.0798
SystolicBP 0.4160 1.0000 0.7870 0.4252 -0.2866 -0.0231
DiastolicBP 0.3980 0.7870 1.0000 0.4238 -0.2575 -0.0462
BS 0.4733 0.4252 0.4238 1.0000 -0.1035 0.1429
BodyTemp -0.2553 -0.2866 -0.2575 -0.1035 1.0000 0.0988
HeartRate 0.0798 -0.0231 -0.0462 0.1429 0.0988 1.0000
corrplot(corr_matrix, method = "color", addCoef.col = "black", 
         tl.col = "black", tl.srt = 45)

Penjelasan Correlation Matrix

Correlation matrix mengukur kekuatan hubungan linear antara dua variabel dengan skala -1 sampai +1:

  • +1 = korelasi positif sempurna (kedua variabel naik bareng)
  • -1 = korelasi negatif sempurna (satu naik, yang lain turun)
  • 0 = tidak ada hubungan linear
  • Diagonal selalu 1.0000 karena variabel dikorelasikan dengan dirinya sendiri

Hasil Analisis:

Korelasi Kuat:

  • SystolicBP & DiastolicBP = 0.7870 → Korelasi positif kuat. Ini sangat wajar karena keduanya adalah ukuran tekanan darah. Ketika tekanan sistolik naik, tekanan diastolik juga cenderung naik.

Korelasi Sedang:

  • Age & BS = 0.4733 → Korelasi positif sedang. Artinya semakin tua umur ibu hamil, gula darahnya cenderung lebih tinggi.
  • Age & SystolicBP = 0.4160 → Umur juga berpengaruh ke tekanan darah sistolik.

Korelasi Lemah/Negatif:

  • BodyTemp dengan variabel lain kebanyakan negatif dan nilainya kecil (sekitar -0.25). Artinya suhu tubuh tidak terlalu dipengaruhi oleh variabel lain.

Visualisasi Heatmap:

  • Warna biru tua = korelasi mendekati +1 (positif kuat)
  • Warna merah = korelasi negatif
  • Warna putih/terang = korelasi mendekati 0 (lemah)

Dari heatmap terlihat jelas bahwa kotak SystolicBP-DiastolicBP paling biru (korelasi tertinggi).


Variance-Covariance Matrix

cov_matrix <- cov(data)
kable(round(cov_matrix, 4), caption = "Tabel Variance-Covariance Matrix")
Tabel Variance-Covariance Matrix
Age SystolicBP DiastolicBP BS BodyTemp HeartRate
Age 181.5591 103.1715 74.4717 21.0036 -4.7180 8.6972
SystolicBP 103.1715 338.7040 201.1218 25.7713 -7.2338 -3.4399
DiastolicBP 74.4717 201.1218 192.8153 19.3829 -4.9042 -5.1835
BS 21.0036 25.7713 19.3829 10.8474 -0.4674 3.8060
BodyTemp -4.7180 -7.2338 -4.9042 -0.4674 1.8807 1.0956
HeartRate 8.6972 -3.4399 -5.1835 3.8060 1.0956 65.4271

Penjelasan Variance-Covariance Matrix

Variance-covariance matrix mirip dengan correlation matrix, tapi menggunakan satuan asli data (belum distandarisasi). Matrix ini terdiri dari:

  • Diagonal = Variance dari setiap variabel
  • Off-diagonal = Covariance antar variabel

Variance (Diagonal):

Variance mengukur seberapa besar penyebaran/variasi data dari rata-ratanya:

  • Age = 161.59 → Penyebaran umur ibu hamil cukup tinggi (umur bervariasi)
  • SystolicBP = 328.70 → Variasi tekanan sistolik PALING BESAR dari semua variabel
  • DiastolicBP = 201.12 → Variasi tekanan diastolik juga tinggi
  • BS = 25.77 → Variasi gula darah sedang
  • BodyTemp = 7.25 → Variasi suhu tubuh PALING KECIL (suhu relatif stabil)
  • HeartRate = 65.43 → Variasi detak jantung sedang

Interpretasi: Variabel dengan variance besar (seperti SystolicBP) berarti datanya lebih menyebar dan bervariasi. Variabel dengan variance kecil (seperti BodyTemp) berarti datanya relatif stabil dan tidak banyak bervariasi.

Covariance (Off-diagonal):

  • Nilai positif = kedua variabel cenderung bergerak searah
  • Nilai negatif = kedua variabel cenderung bergerak berlawanan

Contoh:

  • SystolicBP & DiastolicBP = 201.12 → Covariance positif tinggi (keduanya naik turun bareng)
  • BodyTemp & SystolicBP = -7.25 → Covariance negatif (berlawanan arah)

Catatan: Karena skala setiap variabel berbeda-beda, lebih mudah interpretasi pakai correlation matrix untuk melihat kekuatan hubungan.


Eigen Values dan Eigen Vectors

eigen_result <- eigen(corr_matrix)

eigen_table <- data.frame(
  Komponen = 1:length(eigen_result$values),
  Eigenvalue = round(eigen_result$values, 4),
  Proporsi = round(eigen_result$values/sum(eigen_result$values)*100, 2),
  Kumulatif = round(cumsum(eigen_result$values/sum(eigen_result$values))*100, 2)
)

kable(eigen_table, caption = "Tabel Eigen Values")
Tabel Eigen Values
Komponen Eigenvalue Proporsi Kumulatif
1 2.6079 43.46 43.46
2 1.1444 19.07 62.54
3 0.8370 13.95 76.49
4 0.7063 11.77 88.26
5 0.4925 8.21 96.47
6 0.2118 3.53 100.00

Scree Plot

plot(eigen_result$values, type = "b", main = "Scree Plot", 
     xlab = "Komponen", ylab = "Eigenvalue", 
     col = "darkblue", pch = 19, lwd = 2, cex = 1.5)
abline(h = 1, col = "red", lty = 2, lwd = 2)
text(1:6, eigen_result$values + 0.15, round(eigen_result$values, 2), cex = 0.8)
grid()

Eigen Vectors

eigen_vectors <- as.data.frame(round(eigen_result$vectors, 4))
colnames(eigen_vectors) <- paste0("PC", 1:ncol(eigen_vectors))
rownames(eigen_vectors) <- colnames(data)
kable(eigen_vectors, caption = "Tabel Eigen Vectors")
Tabel Eigen Vectors
PC1 PC2 PC3 PC4 PC5 PC6
Age -0.4361 0.1729 0.2404 -0.5551 0.6432 0.0169
SystolicBP -0.5296 -0.1129 -0.2416 0.3634 0.0939 -0.7124
DiastolicBP -0.5226 -0.1230 -0.2991 0.3544 0.0781 0.7004
BS -0.4255 0.3529 -0.1154 -0.4254 -0.7071 -0.0106
BodyTemp 0.2735 0.4293 -0.8093 -0.1305 0.2607 -0.0291
HeartRate -0.0200 0.7958 0.3550 0.4860 0.0586 0.0240

Penjelasan Eigen Values dan Eigen Vectors

A. Eigen Values

Eigen values menunjukkan seberapa banyak variance yang dijelaskan oleh setiap komponen utama dalam Principal Component Analysis (PCA).

Dari tabel di atas:

  • Komponen 1: Eigenvalue = 2.6079 → Menjelaskan 43.5% variance
  • Komponen 2: Eigenvalue = 1.1442 → Menjelaskan 19.1% variance
  • Total 2 komponen pertama → Menjelaskan 62.5% variance (lebih dari setengah!)

Kaiser Criterion:

Menurut Kaiser Criterion, komponen yang dianggap signifikan adalah yang eigenvalue-nya > 1.

Dari hasil analisis, ada 2 komponen yang eigenvalue-nya > 1 (Komponen 1 dan 2).

B. Scree Plot

Scree plot menampilkan eigenvalue dari setiap komponen:

  • Garis merah = batas eigenvalue = 1 (Kaiser Criterion)
  • Titik di atas garis merah = komponen yang penting
  • Grafik mulai landai setelah komponen ke-2 → artinya komponen 3-6 tidak terlalu penting

Interpretasi: Cukup ambil 2 komponen pertama saja untuk merepresentasikan data. Ini berarti kita bisa reduksi dimensi dari 6 variabel menjadi hanya 2 komponen utama tanpa kehilangan banyak informasi (masih retain ~62.5% variance).

C. Eigen Vectors

Eigen vectors menunjukkan kontribusi setiap variabel asli terhadap komponen utama baru.

Cara membaca:

  • Setiap kolom = 1 komponen utama (PC1, PC2, dst.)
  • Setiap baris = kontribusi variabel asli
  • Nilai mendekati ±1 = kontribusi besar
  • Nilai mendekati 0 = kontribusi kecil

Interpretasi PC1 (Komponen Pertama):

Melihat kolom PC1:

  • Age = 0.4361 (kontribusi sedang, positif)
  • SystolicBP = 0.5096 (kontribusi tinggi, positif)
  • DiastolicBP = 0.5226 (kontribusi tinggi, positif)
  • BS = 0.4525 (kontribusi sedang, positif)
  • BodyTemp = -0.2730 (kontribusi kecil, negatif)
  • HeartRate = 0.0030 (kontribusi sangat kecil)

Artinya: PC1 bisa diinterpretasikan sebagai “Komponen Kesehatan Kardiovaskular & Metabolik” karena didominasi oleh variabel tekanan darah dan gula darah.

Manfaat:

  1. Reduksi Dimensi - Dari 6 variabel bisa diringkas jadi 2 komponen
  2. Visualisasi - Lebih mudah plot data 2D daripada 6D
  3. Analisis Lanjutan - Bisa digunakan untuk clustering, klasifikasi, dll.

Kesimpulan

Dari analisis matrix algebra terhadap data Maternal Health Risk, dapat disimpulkan:

  1. Correlation Matrix menunjukkan bahwa:
    • Tekanan darah sistolik dan diastolik sangat berkorelasi (0.787)
    • Umur ibu hamil berpengaruh terhadap gula darah (0.473)
    • Suhu tubuh relatif independen dari variabel lain
  2. Variance-Covariance Matrix menunjukkan:
    • Tekanan darah memiliki variasi paling besar
    • Suhu tubuh paling stabil (variance kecil)
  3. Eigen Analysis menunjukkan:
    • 2 komponen utama sudah cukup untuk merepresentasikan ~62.5% variance
    • Bisa dilakukan reduksi dimensi dari 6 variabel → 2 komponen
    • PC1 merepresentasikan “kesehatan kardiovaskular & metabolik”