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).
corr_matrix <- cor(data)
kable(round(corr_matrix, 4), caption = "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)
Correlation matrix mengukur kekuatan hubungan linear antara dua variabel dengan skala -1 sampai +1:
Korelasi Kuat:
Korelasi Sedang:
Korelasi Lemah/Negatif:
Dari heatmap terlihat jelas bahwa kotak SystolicBP-DiastolicBP paling biru (korelasi tertinggi).
cov_matrix <- cov(data)
kable(round(cov_matrix, 4), caption = "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 |
Variance-covariance matrix mirip dengan correlation matrix, tapi menggunakan satuan asli data (belum distandarisasi). Matrix ini terdiri dari:
Variance mengukur seberapa besar penyebaran/variasi data dari rata-ratanya:
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.
Contoh:
Catatan: Karena skala setiap variabel berbeda-beda, lebih mudah interpretasi pakai correlation matrix untuk melihat kekuatan hubungan.
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")
| 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 |
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 <- 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")
| 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 |
Eigen values menunjukkan seberapa banyak variance yang dijelaskan oleh setiap komponen utama dalam Principal Component Analysis (PCA).
Dari tabel di atas:
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).
Scree plot menampilkan eigenvalue dari setiap komponen:
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).
Eigen vectors menunjukkan kontribusi setiap variabel asli terhadap komponen utama baru.
Cara membaca:
Interpretasi PC1 (Komponen Pertama):
Melihat kolom PC1:
Artinya: PC1 bisa diinterpretasikan sebagai “Komponen Kesehatan Kardiovaskular & Metabolik” karena didominasi oleh variabel tekanan darah dan gula darah.
Manfaat:
Dari analisis matrix algebra terhadap data Maternal Health Risk, dapat disimpulkan: