Read dataset

Dataset diimpor dari file CSV dan disimpan dalam variabel data untuk digunakan pada tahap analisis selanjutnya.

data <- read.csv("Maternal Health Risk Data Set.csv")

Dataset diimpor dari file CSV dan disimpan dalam variabel data untuk digunakan pada tahap analisis selanjutnya.

Data understanding

Data understanding berguna untuk memahami struktur dan isi dataset sebelum dilakukan analisis lebih lanjut.

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

head(data) digunakan untuk melihat beberapa baris pertama data.

str(data)
## 'data.frame':    1014 obs. of  7 variables:
##  $ Age        : int  25 35 29 30 35 23 23 35 32 42 ...
##  $ SystolicBP : int  130 140 90 140 120 140 130 85 120 130 ...
##  $ DiastolicBP: int  80 90 70 85 60 80 70 60 90 80 ...
##  $ BS         : num  15 13 8 7 6.1 7.01 7.01 11 6.9 18 ...
##  $ BodyTemp   : num  98 98 100 98 98 98 98 102 98 98 ...
##  $ HeartRate  : int  86 70 80 70 76 70 78 86 70 70 ...
##  $ RiskLevel  : chr  "high risk" "high risk" "high risk" "high risk" ...

str(data) untuk melihat struktur dan tipe data setiap variabel.

Seleksi variabel numerik

Analisis yang dilakukan meliputi korelasi, kovarians, dan eigen yang hanya membutuhkan data dalam bentuk numerik agar hubungan dan variasi antar variabel dapat dihitung secara matematis. Oleh karena itu, hanya variabel yang bertipe numerik yang dipilih, sedangkan variabel non-numerik seperti kategori atau teks tidak disertakan dalam perhitungan.

data_num <- data[, sapply(data, is.numeric)]
str(data_num)
## 'data.frame':    1014 obs. of  6 variables:
##  $ Age        : int  25 35 29 30 35 23 23 35 32 42 ...
##  $ SystolicBP : int  130 140 90 140 120 140 130 85 120 130 ...
##  $ DiastolicBP: int  80 90 70 85 60 80 70 60 90 80 ...
##  $ BS         : num  15 13 8 7 6.1 7.01 7.01 11 6.9 18 ...
##  $ BodyTemp   : num  98 98 100 98 98 98 98 102 98 98 ...
##  $ HeartRate  : int  86 70 80 70 76 70 78 86 70 70 ...

Correlation Matrix

Correlation Matrix digunakan untuk mengukur kekuatan dan arah hubungan linear antar variabel numerik dalam suatu dataset. Setiap nilai dalam matriks menunjukkan seberapa kuat dan ke arah mana hubungan antara satu variabel dengan variabel lainnya.

Nilai korelasi berada pada rentang –1 sampai 1.

Nilai mendekati 1 menunjukkan hubungan positif yang kuat, artinya ketika satu variabel meningkat, variabel lain juga ikut meningkat.

Nilai mendekati –1 menunjukkan hubungan negatif yang kuat, artinya ketika satu variabel meningkat, variabel lain menurun.

Nilai mendekati 0 menunjukkan hubungan yang lemah atau hampir tidak ada hubungan linear.

cor_matrix <- cor(data_num)
knitr::kable(head(cor_matrix))
Age SystolicBP DiastolicBP BS BodyTemp HeartRate
Age 1.0000000 0.4160454 0.3980263 0.4732843 -0.2553231 0.0797976
SystolicBP 0.4160454 1.0000000 0.7870065 0.4251717 -0.2866155 -0.0231080
DiastolicBP 0.3980263 0.7870065 1.0000000 0.4238241 -0.2575383 -0.0461506
BS 0.4732843 0.4251717 0.4238241 1.0000000 -0.1034934 0.1428672
BodyTemp -0.2553231 -0.2866155 -0.2575383 -0.1034934 1.0000000 0.0987710
HeartRate 0.0797976 -0.0231080 -0.0461506 0.1428672 0.0987710 1.0000000

Visualisasi Correlation Matrix

library(corrplot)
## corrplot 0.95 loaded
corrplot(cor_matrix,
         method = "color",
         type = "upper",
         tl.col = "black",
         title = "Correlation Matrix of Maternal Health Variables",
         tl.srt = 45,
         addCoef.col = "black",
         number.cex = 0.8,
         mar = c(0,0,2,0))

Visualisasi correlation matrix menunjukkan hubungan antar variabel numerik dalam dataset Maternal Health Risk. Terlihat bahwa SystolicBP dan DiastolicBP memiliki korelasi positif yang kuat (sekitar 0,79), artinya keduanya cenderung meningkat atau menurun secara bersamaan. Variabel Age memiliki korelasi positif dengan SystolicBP, DiastolicBP, dan BS, menunjukkan bahwa peningkatan usia cenderung diikuti oleh peningkatan tekanan darah dan kadar gula darah. BodyTemp memiliki korelasi negatif lemah dengan Age, SystolicBP, dan DiastolicBP, sedangkan HeartRate menunjukkan korelasi yang sangat lemah dengan seluruh variabel lainnya, yaitu Age, SystolicBP, DiastolicBP, BS, dan BodyTemp.

Variance–Covariance Matrix

Variance–Covariance Matrix berguna untuk melihat bagaimana dua variabel numerik berubah secara bersama-sama. Nilai pada diagonal menunjukkan varians atau seberapa besar penyebaran data pada masing-masing variabel. Sementara, nilai di luar diagonal menunjukkan kovarians antar variabel. Kovarians bernilai positif artinya kedua variabel cenderung meningkat bersama, sedangkan nilai negatif artinya ketika satu variabel meningkat, variabel lain cenderung menurun. Nilai yang mendekati nol menunjukkan hubungan yang lemah.

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

Visualisasi Covariance Matrix

library(corrplot)
corrplot(cov(data_num), 
         method = "color", 
         type = "upper", 
         addCoef.col = "black",
         number.cex = 0.8,      
         tl.col = "black", 
         title = "Covariance Matrix of Maternal Health Variables",
         mar = c(0,0,2,0),
         is.corr = FALSE)

Heatmap Covariance Matrix digunakan untuk memvisualisasikan hubungan perubahan antar variabel numerik. Warna yang lebih gelap menunjukkan nilai kovarians atau varians yang lebih besar, sedangkan warna yang lebih terang menunjukkan nilai yang lebih kecil. Sel diagonal merepresentasikan varians masing-masing variabel dan tampak paling gelap, khususnya pada SystolicBP, yang menunjukkan variasi data yang tinggi. Di luar diagonal, terlihat kovarians positif yang relatif lebih tinggi antara SystolicBP dan DiastolicBP, yang mengindikasikan adanya hubungan yang cukup kuat antara keduanya. Variabel lain seperti Age, BodyTemp, HeartRate, dan BS menunjukkan kovarians yang relatif kecil, sehingga hubungannya terhadap variabel lain cenderung lemah. Interpretasi difokuskan pada pola hubungan antar variabel karena nilai kovarians dipengaruhi oleh satuan pengukuran.

Eigen Value & Eigen Vector

Eigen value menunjukkan seberapa besar variasi data yang bisa dijelaskan oleh setiap komponen utama. Eigen vector menggambarkan arah atau kombinasi variabel yang membentuk komponen itu. Komponen dengan eigen value terbesar berarti menyimpan informasi paling penting dalam data. Oleh karena itu, analisis seperti Principal Component Analysis (PCA) biasanya hanya menggunakan beberapa komponen utama saja, karena sudah dapat mewakili sebagian besar variasi data tanpa menghilangkan banyak informasi.

eigen_result <- eigen(cov_matrix)

# Eigen values
eigen_result$values
## [1] 529.521825 136.772898  64.572037  51.358769   7.360073   1.647943
# Eigen Vectors
knitr::kable(head(eigen_result$vectors))
-0.3464112 0.9239005 -0.1319226 0.0427315 0.0819871 0.0213458
-0.7648579 -0.2934871 0.1491071 0.5530490 0.0234990 0.0144696
-0.5379786 -0.1860745 -0.1238909 -0.8114643 0.0457558 0.0061961
-0.0721182 0.0697775 0.0438720 -0.0311919 -0.9924786 -0.0449284
0.0186574 -0.0088838 0.0190565 -0.0082157 -0.0460811 0.9985083
0.0046388 0.1438804 0.9709411 -0.1810968 0.0591189 -0.0160987

Visualisasi Eigen Value

eigen_values <- eigen_result$values

plot(eigen_values,
     type = "b",
     pch = 19,
     xlab = "Principal Component",
     ylab = "Eigen Value",
     main = "Scree Plot of Eigen Values")

Scree plot memperlihatkan seberapa besar informasi yang dijelaskan oleh setiap komponen utama. Terlihat bahwa komponen pertama memiliki eigen value paling besar, artinya komponen ini paling banyak menjelaskan variasi data. Nilai eigen kemudian turun cukup tajam di komponen berikutnya dan mulai melandai pada komponen selanjutnya. Hal ini menunjukkan bahwa sebagian besar informasi data sudah tertangkap oleh beberapa komponen awal, sehingga tidak perlu menggunakan semua komponen untuk mewakili data.