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

Dari hasil analisis correlation matrix, terlihat bahwa tekanan darah sistolik dan diastolik memiliki korelasi positif yang sangat kuat yaitu 0.787, ini menunjukkan bahwa kedua variabel ini bergerak bersamaan dan saling mempengaruhi. Kemudian umur ibu hamil menunjukkan korelasi sedang dengan gula darah sebesar 0.473 dan dengan tekanan sistolik sebesar 0.416, yang berarti ibu hamil yang lebih tua cenderung memiliki gula darah dan tekanan darah yang lebih tinggi. Sementara itu, suhu tubuh menunjukkan korelasi negatif kecil dengan hampir semua variabel lainnya sekitar -0.25, mengindikasikan bahwa suhu tubuh relatif independen dan tidak banyak dipengaruhi oleh faktor-faktor kesehatan lainnya. Visualisasi heatmap juga memperjelas temuan ini dengan menampilkan warna biru dominan pada pasangan tekanan darah yang menunjukkan 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

Berdasarkan matrix yang dihasilkan, elemen diagonal menunjukkan variance dari setiap variabel. Tekanan darah sistolik memiliki variance paling besar yaitu 328.70, yang berarti variabilitas pengukuran tekanan darah sistolik paling tinggi antar individu. Sebaliknya, suhu tubuh memiliki variance terkecil yaitu 7.25, mengindikasikan suhu tubuh relatif stabil dan tidak banyak bervariasi antar individu. Variabel lainnya seperti tekanan diastolik (201.12), umur (161.59), detak jantung (65.43), dan gula darah (25.77) menunjukkan tingkat variabilitas yang berada di antara keduanya. Elemen off-diagonal menunjukkan covariance antar variabel, di mana nilai positif seperti covariance antara tekanan sistolik dan diastolik sebesar 201.12 mengindikasikan kedua variabel bergerak searah, sedangkan nilai negatif menunjukkan pergerakan berlawanan.


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

Dari analisis eigen values, komponen pertama memiliki eigenvalue sebesar 2.6079 yang menjelaskan 43.46% dari total varians data, sedangkan komponen kedua memiliki eigenvalue 1.1442 yang menjelaskan 19.07% varians. Ketika digabungkan, kedua komponen pertama ini menjelaskan 62.53% dari total varians, yang sudah cukup signifikan untuk merepresentasikan data. Menggunakan Kaiser Criterion yang menetapkan eigenvalue > 1 sebagai standar signifikansi, hanya dua komponen pertama yang memenuhi kriteria ini, memberikan kesempatan untuk melakukan reduksi dimensi dari 6 variabel asli menjadi hanya 2 komponen utama. Scree plot menunjukkan penurunan yang sangat tajam dari komponen 1 ke 2, kemudian mulai landai setelah itu, yang mengkonfirmasi bahwa komponen 3 sampai 6 memberikan kontribusi yang relatif kecil.

Dari eigen vectors, komponen utama pertama (PC1) didominasi oleh tekanan darah sistolik dan diastolik dengan loading sebesar 0.5096 dan 0.5226, diikuti oleh gula darah (0.4525) dan umur (0.4361), sementara suhu tubuh memberikan kontribusi negatif kecil (-0.2730). Pola loading ini menunjukkan bahwa PC1 dapat diinterpretasikan sebagai dimensi “Kesehatan Kardiovaskular dan Metabolik” karena didominasi oleh variabel tekanan darah dan gula darah. Komponen kedua (PC2) menunjukkan pola yang berbeda dengan umur sebagai variabel dominan yang memiliki loading 0.6893, mencerminkan bahwa PC2 merepresentasikan dimensi usia. Analisis ini memungkinkan peneliti untuk menyederhanakan data kompleks sambil mempertahankan informasi penting, sangat berguna untuk visualisasi data, clustering, atau analisis multivariat lanjutan lainnya.


Kesimpulan

Secara keseluruhan, analisis matrix algebra pada dataset Maternal Health Risk menunjukkan beberapa temuan penting. Correlation matrix mengungkapkan bahwa tekanan darah sistolik dan diastolik memiliki hubungan yang sangat kuat, sementara suhu tubuh cenderung independen dari variabel lain. Variance-covariance matrix mengidentifikasi bahwa tekanan darah sistolik memiliki variabilitas tertinggi dan suhu tubuh memiliki stabilitas paling besar. Melalui eigen analysis, ditemukan bahwa data 6-dimensi dapat secara efektif direduksi menjadi 2 komponen utama yang bersama-sama menjelaskan 62.53% dari total varians, di mana PC1 merepresentasikan aspek kesehatan kardiovaskular-metabolik dan PC2 terkait dengan faktor usia. Hasil analisis ini membuka peluang untuk penerapan teknik-teknik analisis multivariat yang lebih lanjut seperti Principal Component Regression, clustering berbasis komponen utama, atau klasifikasi status risiko kesehatan ibu hamil dengan efisiensi dimensionalitas yang lebih baik.