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 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.
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 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 |
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 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
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 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 |
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.