# Import dan tampilkan data
data <- read.csv("Maternal_health.csv")
head(data)
## Age SystolicBP DiastolicBP BS BodyTemp HeartRate RiskLevel
## 1 25 130 80 15.00 98 86 high risk
## 2 35 140 90 13.00 98 70 high risk
## 3 29 90 70 8.00 100 80 high risk
## 4 30 140 85 7.00 98 70 high risk
## 5 35 120 60 6.10 98 76 low risk
## 6 23 140 80 7.01 98 70 high risk
# Mengambil data numerik
data_num <- data[sapply(data, is.numeric)]
Dataset Maternal Health Risk berisi data kondisi kesehatan ibu hamil yang terdiri dari beberapa variabel numerik, yaitu Age, SystolicBP, DiastolicBP, BS, BodyTemp, dan HeartRate. Selain itu, terdapat variabel RiskLevel yang menunjukkan tingkat risiko kesehatan ibu. Dataset ini digunakan untuk menganalisis hubungan dan variasi antar variabel kesehatan ibu hamil.
# Correlation Matrix
cor_matrix <- cor(data_num)
cor_matrix
## Age SystolicBP DiastolicBP BS BodyTemp
## Age 1.00000000 0.41604545 0.39802629 0.4732843 -0.25532314
## SystolicBP 0.41604545 1.00000000 0.78700648 0.4251717 -0.28661552
## DiastolicBP 0.39802629 0.78700648 1.00000000 0.4238241 -0.25753832
## BS 0.47328434 0.42517166 0.42382407 1.0000000 -0.10349336
## BodyTemp -0.25532314 -0.28661552 -0.25753832 -0.1034934 1.00000000
## HeartRate 0.07979763 -0.02310796 -0.04615057 0.1428672 0.09877104
## HeartRate
## Age 0.07979763
## SystolicBP -0.02310796
## DiastolicBP -0.04615057
## BS 0.14286723
## BodyTemp 0.09877104
## HeartRate 1.00000000
Hasil correlation matrix menunjukkan hubungan paling kuat terjadi antara SystolicBP dan DiastolicBP dengan nilai korelasi 0,787, yang berarti terdapat hubungan positif kuat antara tekanan darah sistolik dan diastolik. Variabel Age memiliki korelasi positif sedang dengan BS (0,473), menunjukkan bahwa semakin bertambah usia, kadar gula darah cenderung meningkat. Sebaliknya, BodyTemp memiliki korelasi negatif lemah dengan hampir semua variabel, menandakan bahwa suhu tubuh tidak memiliki hubungan kuat dengan indikator kesehatan lainnya. Variabel HeartRate memiliki korelasi sangat rendah terhadap variabel lain, sehingga pengaruhnya relatif kecil.
library(corrplot)
## corrplot 0.95 loaded
corrplot(cor_matrix,
method = "color",
type = "full",
addCoef.col = "black",
tl.col = "black",
tl.srt = 40,
col = colorRampPalette(c("brown", "white", "darkblue"))(150),
number.cex = 0.4,
tl.cex = 0.6,
title = "Visualisasi Correlation Matrix\nDataset Maternal Health",
mar = c(0,0,3,0))
Dari heatmap di atas, warna biru tua menunjukkan hubungan yang kuat dan searah, sedangkan warna kemerahan menunjukkan hubungan yang berlawanan arah. Semakin gelap warnanya, semakin kuat hubungannya.
Hubungan yang paling jelas terlihat antara SystolicBP dan DiastolicBP dengan nilai korelasi 0,79. Ini berarti kalau tekanan darah sistolik naik, biasanya tekanan darah diastolik juga ikut naik. Hal ini masuk akal karena keduanya sama-sama mengukur tekanan darah.
Variabel Age (usia) terlihat cukup berhubungan dengan BS (gula darah) dan juga tekanan darah. Nilainya sekitar 0,40–0,47, yang berarti hubungannya sedang. Artinya, semakin bertambah usia ibu hamil, ada kecenderungan tekanan darah dan kadar gula darah juga ikut meningkat.
BS (gula darah) juga terlihat cukup berkaitan dengan tekanan darah. Jadi ibu dengan kadar gula darah yang lebih tinggi cenderung memiliki tekanan darah yang lebih tinggi juga, meskipun hubungannya tidak terlalu kuat.
Sementara itu, BodyTemp (suhu tubuh) menunjukkan hubungan negatif lemah dengan sebagian besar variabel lain. Artinya, perubahan suhu tubuh tidak terlalu berkaitan dengan perubahan tekanan darah atau usia dalam data ini.
Untuk HeartRate (detak jantung), warnanya cenderung mendekati putih. Ini menunjukkan bahwa detak jantung hampir tidak memiliki hubungan yang berarti dengan variabel kesehatan lainnya pada dataset ini.
# Variance-Covariance Matrix
cov_matrix <- cov(data_num)
cov_matrix
## Age SystolicBP DiastolicBP BS BodyTemp HeartRate
## Age 181.559065 103.171539 74.471739 21.0035619 -4.7180044 8.697168
## SystolicBP 103.171539 338.704005 201.121845 25.7712999 -7.2338429 -3.439938
## DiastolicBP 74.471739 201.121845 192.815323 19.3828770 -4.9042413 -5.183543
## BS 21.003562 25.771300 19.382877 10.8473512 -0.4674483 3.806040
## BodyTemp -4.718004 -7.233843 -4.904241 -0.4674483 1.8806951 1.095640
## HeartRate 8.697168 -3.439938 -5.183543 3.8060397 1.0956395 65.427104
Variance–covariance matrix menunjukkan bahwa SystolicBP memiliki varians paling besar (338,70), sehingga merupakan variabel dengan penyebaran data tertinggi. Varians DiastolicBP (192,82) dan Age (181,56) juga cukup besar, menunjukkan variasi yang signifikan. Kovarians positif yang besar antara SystolicBP dan DiastolicBP (201,12) menunjukkan kedua variabel meningkat secara bersamaan. Sementara itu, kovarians yang kecil atau mendekati nol pada variabel lain menunjukkan hubungan yang lemah dalam skala aslinya.
library(corrplot)
corrplot(cov_matrix,
method = "color",
type = "full",
is.corr = FALSE,
addCoef.col = "black",
tl.col = "black",
tl.cex = 0.6,
number.cex = 0.4,
col = colorRampPalette(c("brown", "pink", "darkblue"))(200),
title = "Variance-Covariance Matrix - Maternal Health",
mar = c(0,0,3,0))
Pada heatmap ini, warna yang semakin gelap menunjukkan nilai varians atau kovarians yang semakin besar. Berbeda dengan korelasi, di sini angkanya tidak dibatasi antara -1 sampai 1, karena masih dalam satuan asli datanya.
Nilai diagonal (dari kiri atas ke kanan bawah) menunjukkan varians masing-masing variabel. Terlihat bahwa SystolicBP (338,70) memiliki varians paling besar. Artinya, tekanan darah sistolik memiliki penyebaran data paling tinggi dibanding variabel lain. Disusul oleh DiastolicBP (192,82) dan Age (181,56) yang juga memiliki variasi cukup besar. Ini berarti data tekanan darah dan usia cukup beragam di dalam dataset.
Di luar diagonal adalah kovarians, yang menunjukkan apakah dua variabel bergerak bersama atau berlawanan arah.
Nilai kovarians paling besar terlihat antara SystolicBP dan DiastolicBP (201,12). Ini menunjukkan keduanya meningkat secara bersamaan dalam skala aslinya. Hal ini konsisten dengan hasil korelasi sebelumnya bahwa tekanan darah sistolik dan diastolik sangat berkaitan.
Kovarians antara Age dan tekanan darah juga cukup besar dan positif (sekitar 74–103), yang berarti semakin tinggi usia, tekanan darah cenderung ikut meningkat.
Sementara itu, BodyTemp memiliki nilai kovarians kecil dan beberapa bernilai negatif (misalnya dengan SystolicBP -7,23). Ini menunjukkan hubungan yang lemah dan cenderung tidak terlalu berpengaruh terhadap variabel lain.
Untuk HeartRate, variansnya cukup besar (65,43), tetapi kovariansnya dengan variabel lain relatif kecil. Artinya, detak jantung cukup bervariasi, tetapi perubahannya tidak terlalu bergerak searah dengan variabel kesehatan lainnya.
eigen_result <- eigen(cov_matrix)
# Eigen value
eigen_result$values
## [1] 529.521825 136.772898 64.572037 51.358769 7.360073 1.647943
Berdasarkan hasil perhitungan, komponen utama pertama (PC1) memiliki eigen value sebesar 529,52, yang merupakan nilai terbesar dibandingkan komponen lainnya. Hal ini menunjukkan bahwa PC1 menjelaskan variasi data paling besar. Artinya, sebagian besar informasi atau keragaman dalam dataset terkonsentrasi pada komponen pertama.
Komponen kedua dan ketiga memiliki eigen value sebesar 136,77 dan 64,57, yang nilainya jauh lebih kecil dibandingkan komponen pertama. Ini menunjukkan bahwa kontribusi variasi mulai menurun pada komponen-komponen berikutnya. Sementara itu, komponen kelima dan keenam memiliki eigen value yang sangat kecil, sehingga kontribusinya terhadap total variasi data relatif tidak signifikan.
Secara keseluruhan, hasil ini menunjukkan bahwa data dapat direduksi menjadi beberapa komponen utama pertama saja tanpa kehilangan terlalu banyak informasi.
# Eigen vector
eigen_result$vectors
## [,1] [,2] [,3] [,4] [,5]
## [1,] -0.346411189 0.923900546 -0.13192259 0.042731491 0.08198705
## [2,] -0.764857940 -0.293487053 0.14910706 0.553048994 0.02349903
## [3,] -0.537978589 -0.186074547 -0.12389090 -0.811464330 0.04575582
## [4,] -0.072118241 0.069777475 0.04387199 -0.031191932 -0.99247862
## [5,] 0.018657383 -0.008883756 0.01905652 -0.008215683 -0.04608110
## [6,] 0.004638836 0.143880423 0.97094112 -0.181096759 0.05911889
## [,6]
## [1,] 0.021345781
## [2,] 0.014469639
## [3,] 0.006196148
## [4,] -0.044928412
## [5,] 0.998508320
## [6,] -0.016098692
Eigen vector menunjukkan kontribusi masing-masing variabel terhadap setiap komponen utama. Pada komponen utama pertama (PC1), nilai terbesar (dalam nilai absolut) terdapat pada variabel SystolicBP (-0,765) dan DiastolicBP (-0,538), diikuti oleh Age (-0,346). Hal ini menunjukkan bahwa komponen utama pertama terutama merepresentasikan faktor tekanan darah, dengan sedikit pengaruh dari usia.
Sementara itu, variabel BS, BodyTemp, dan HeartRate memiliki nilai koefisien yang relatif kecil pada komponen pertama, sehingga kontribusinya terhadap pembentukan komponen ini tidak terlalu besar.
Dengan demikian, dapat disimpulkan bahwa pola utama dalam data maternal health ini paling banyak dipengaruhi oleh tekanan darah, sedangkan variabel lainnya memiliki peran yang lebih kecil dalam membentuk struktur utama variasi data.