Pada penelitian ini Dataset yang diperoleh dari platform penyedia dataset publik, Kaggle. Dataset yang digunakan berjudul “Water Pollution and Disease” yang mencakup berbagai indikator parameter kualitas air dan hubungannya dengan risiko kesehatan. Dataset Water Pollution and Disease merupakan dataset yang berisi informasi dampak kontaminasi air terhadap kesehatan masyarakat diberbagai wilayah. Dataset Water Pollution and Disease secara keseluruhan terdiri dari 3000 sampel data serta 24 variabel yang mencakup indikator kualitas air serta kesehatan masyarakat. Setiap baris pada dataset tersebut merepresentasikan satu observasi dengan periode data tahun 2000 hingga 2025. Penelitian ini berfokus pada hubungan antara pencemaran air, sanitasi, dan risiko penyakit menular yang berdampak pada angka kematian dan kualitas hidup masyarakat.
Penelitian ini bertujuan untuk mengidentifikasi variabel mana yang memiliki pengaruh paling signifikan terhadap penurunan angka kematian bayi di Indonesia. Dalam penelitian, diterpakan dua metode yaitu Principal Component Analysis (PCA) dan Multiple Linear Regression. Principal Component Analysis merupakan metode statistik multivariat yang bekerja dengan menggabungkan informasi dari beberapa variabel menjadi beberapa komponen utama. Komponen utama tersebut yang akan digunakan dalam proses identifikasi. Multiple Linear Regression merupakan sebuah teknik statiti yang digunakan untuk memodelkan hubungan antara satu variabel dependen dengan lebih dari variabel independen. Kedua metode tersebut digunakan untuk memabntu mengidentifikasi variabel mana yang memiliki pengaruh paling signifikan terhadap penurunan angka kematian bayi di Indonesia.
Dataset asli Water Pollution and Disease yang digunakan untuk penelitian memuat 3000 sampel dan 24 variabel dengan periode data tahun 2000 hingga 2025. Berikut merupakan dataset asli Water Pollution and Disease:
# Import Data
data_asli <- read.csv("C:/Users/Aprilia/Documents/Analisis Multivariat - Semester 4/Analisis Multivariat - Water Pollution disease/water_pollution_disease (1).csv")
Berikut merupakan dimensi dataset asli Water Pollution and Disease:
dim(data_asli)
## [1] 3000 24
Dataset Water Pollution and Disease memiliki jumlah 3000 observasi dan 24 variabel seperti yang telah ditampilkan.
Berikut merupakan 6 baris pertama dari dataset Water Pollution and Disease:
head(data_asli)
## Country Region Year Water.Source.Type Contaminant.Level..ppm. pH.Level
## 1 Mexico North 2015 Lake 6.06 7.12
## 2 Brazil West 2017 Well 5.24 7.84
## 3 Indonesia Central 2022 Pond 0.24 6.43
## 4 Nigeria East 2016 Well 7.91 6.71
## 5 Mexico South 2005 Well 0.12 8.16
## 6 Ethiopia West 2013 Tap 2.93 8.21
## Turbidity..NTU. Dissolved.Oxygen..mg.L. Nitrate.Level..mg.L.
## 1 3.93 4.28 8.28
## 2 4.79 3.86 15.74
## 3 0.79 3.42 36.67
## 4 1.96 3.12 36.92
## 5 4.22 9.15 49.35
## 6 4.03 8.66 31.35
## Lead.Concentration..µg.L. Bacteria.Count..CFU.mL. Water.Treatment.Method
## 1 7.89 3344 Filtration
## 2 14.68 2122 Boiling
## 3 9.96 2330 None
## 4 6.77 3779 Boiling
## 5 12.51 4182 Filtration
## 6 16.74 880 None
## Access.to.Clean.Water....of.Population. Diarrheal.Cases.per.100.000.people
## 1 33.60 472
## 2 89.54 122
## 3 35.29 274
## 4 57.53 3
## 5 36.60 466
## 6 69.48 258
## Cholera.Cases.per.100.000.people Typhoid.Cases.per.100.000.people
## 1 33 44
## 2 27 8
## 3 39 50
## 4 33 13
## 5 31 68
## 6 22 55
## Infant.Mortality.Rate..per.1.000.live.births. GDP.per.Capita..USD.
## 1 76.16 57057
## 2 77.30 17220
## 3 48.45 86022
## 4 95.66 31166
## 5 58.78 25661
## 6 70.13 84334
## Healthcare.Access.Index..0.100. Urbanization.Rate....
## 1 96.92 84.61
## 2 84.73 73.37
## 3 58.37 72.86
## 4 39.07 71.07
## 5 23.03 55.55
## 6 53.45 86.11
## Sanitation.Coverage....of.Population. Rainfall..mm.per.year. Temperature...C.
## 1 63.23 2800 4.94
## 2 29.12 1572 16.93
## 3 93.56 2074 21.73
## 4 94.25 937 3.79
## 5 69.23 2295 31.44
## 6 51.11 2530 8.01
## Population.Density..people.per.km..
## 1 593
## 2 234
## 3 57
## 4 555
## 5 414
## 6 775
Struktur variabel yang terdapat dalam dataset dapat dilihat sebagai berikut:
str(data_asli)
## 'data.frame': 3000 obs. of 24 variables:
## $ Country : chr "Mexico" "Brazil" "Indonesia" "Nigeria" ...
## $ Region : chr "North" "West" "Central" "East" ...
## $ Year : int 2015 2017 2022 2016 2005 2013 2022 2024 2014 2013 ...
## $ Water.Source.Type : chr "Lake" "Well" "Pond" "Well" ...
## $ Contaminant.Level..ppm. : num 6.06 5.24 0.24 7.91 0.12 2.93 0.06 3.76 0.63 9.14 ...
## $ pH.Level : num 7.12 7.84 6.43 6.71 8.16 8.21 6.11 6.42 6.29 6.45 ...
## $ Turbidity..NTU. : num 3.93 4.79 0.79 1.96 4.22 4.03 3.12 1.35 1.42 0.62 ...
## $ Dissolved.Oxygen..mg.L. : num 4.28 3.86 3.42 3.12 9.15 8.66 6.97 9.99 9.67 7.59 ...
## $ Nitrate.Level..mg.L. : num 8.28 15.74 36.67 36.92 49.35 ...
## $ Lead.Concentration..µg.L. : num 7.89 14.68 9.96 6.77 12.51 ...
## $ Bacteria.Count..CFU.mL. : int 3344 2122 2330 3779 4182 880 2977 1172 159 2493 ...
## $ Water.Treatment.Method : chr "Filtration" "Boiling" "None" "Boiling" ...
## $ Access.to.Clean.Water....of.Population. : num 33.6 89.5 35.3 57.5 36.6 ...
## $ Diarrheal.Cases.per.100.000.people : int 472 122 274 3 466 258 208 397 265 261 ...
## $ Cholera.Cases.per.100.000.people : int 33 27 39 33 31 22 23 0 23 2 ...
## $ Typhoid.Cases.per.100.000.people : int 44 8 50 13 68 55 90 10 29 38 ...
## $ Infant.Mortality.Rate..per.1.000.live.births.: num 76.2 77.3 48.5 95.7 58.8 ...
## $ GDP.per.Capita..USD. : int 57057 17220 86022 31166 25661 84334 6726 76593 5470 72858 ...
## $ Healthcare.Access.Index..0.100. : num 96.9 84.7 58.4 39.1 23 ...
## $ Urbanization.Rate.... : num 84.6 73.4 72.9 71.1 55.5 ...
## $ Sanitation.Coverage....of.Population. : num 63.2 29.1 93.6 94.2 69.2 ...
## $ Rainfall..mm.per.year. : int 2800 1572 2074 937 2295 2530 1573 940 2150 2083 ...
## $ Temperature...C. : num 4.94 16.93 21.73 3.79 31.44 ...
## $ Population.Density..people.per.km.. : int 593 234 57 555 414 775 584 111 538 250 ...
Untuk memfokuskan analisis pada wilayah Indonesia, maka penelitian ini menggunakan dataset yang berisi mengenai informasi wilayah Negara Indonesia. Dataset wilayah Indoneisa ini merupakan dataset yang telah dipisah sebelumnya dari dataset asli, pemisahan dilakukan untuk memfokuskan analisis pada wilayah Indonesia. Berikut merupakan Dataset Water Pollution and Disease wilayah negara Indonesia:
data_raw <- read.csv("C:/Users/Aprilia/Documents/Analisis Multivariat - Semester 4/Analisis Multivariat - Water Pollution disease/indonesia_waterpollution.csv")
Berikut merupakan dimensi Dataset Water Pollution and Disease wilayah negara Indonesia:
dim(data_raw)
## [1] 304 24
Dataset Water Pollution and Disease memiliki jumlah 3000 observasi dan 24 variabel seperti yang telah ditampilkan. Sedangkan Dataset Water Pollution and Disasea wilayah Indonesia memiliki jumlah 304 observasi dan 24 variabel.
Berikut merupakan 6 baris pertama dari dataset Water Pollution and Disease:
head(data_raw)
## Country Region Year Water.Source.Type Contaminant.Level..ppm. pH.Level
## 1 Indonesia Central 2022 Pond 0.24 6.43
## 2 Indonesia North 2014 Well 0.63 6.29
## 3 Indonesia West 2021 River 4.59 7.38
## 4 Indonesia West 2002 Pond 3.50 7.17
## 5 Indonesia West 2011 Well 9.06 6.96
## 6 Indonesia West 2001 Well 1.21 8.08
## Turbidity..NTU. Dissolved.Oxygen..mg.L. Nitrate.Level..mg.L.
## 1 0.79 3.42 36.67
## 2 1.42 9.67 28.31
## 3 0.86 4.07 7.74
## 4 2.86 6.61 17.53
## 5 1.94 4.07 21.78
## 6 0.94 6.99 14.58
## Lead.Concentration..µg.L. Bacteria.Count..CFU.mL. Water.Treatment.Method
## 1 9.96 2330
## 2 1.93 159
## 3 2.76 3078 Chlorination
## 4 18.31 2229 Chlorination
## 5 19.26 3385
## 6 18.56 251 Boiling
## Access.to.Clean.Water....of.Population. Diarrheal.Cases.per.100.000.people
## 1 35.29 274
## 2 71.66 265
## 3 79.01 30
## 4 88.58 175
## 5 88.19 237
## 6 99.24 130
## Cholera.Cases.per.100.000.people Typhoid.Cases.per.100.000.people
## 1 39 50
## 2 23 29
## 3 6 23
## 4 9 79
## 5 14 28
## 6 39 86
## Infant.Mortality.Rate..per.1.000.live.births. GDP.per.Capita..USD.
## 1 48.45 86022
## 2 44.32 5470
## 3 96.56 50972
## 4 48.08 35058
## 5 88.95 51718
## 6 43.94 71626
## Healthcare.Access.Index..0.100. Urbanization.Rate....
## 1 58.37 72.86
## 2 47.62 69.40
## 3 7.38 10.10
## 4 48.31 69.03
## 5 6.23 43.69
## 6 40.42 32.40
## Sanitation.Coverage....of.Population. Rainfall..mm.per.year. Temperature...C.
## 1 93.56 2074 21.73
## 2 69.77 2150 36.23
## 3 28.20 1927 21.54
## 4 42.62 1535 39.42
## 5 34.83 2136 37.59
## 6 97.02 2032 19.42
## Population.Density..people.per.km..
## 1 57
## 2 538
## 3 265
## 4 956
## 5 787
## 6 697
Struktur variabel yang terdapat dalam dataset dapat dilihat sebagai berikut:
str(data_raw)
## 'data.frame': 304 obs. of 24 variables:
## $ Country : chr "Indonesia" "Indonesia" "Indonesia" "Indonesia" ...
## $ Region : chr "Central" "North" "West" "West" ...
## $ Year : int 2022 2014 2021 2002 2011 2001 2013 2019 2014 2017 ...
## $ Water.Source.Type : chr "Pond" "Well" "River" "Pond" ...
## $ Contaminant.Level..ppm. : num 0.24 0.63 4.59 3.5 9.06 1.21 2.33 2.13 4.18 2.53 ...
## $ pH.Level : num 6.43 6.29 7.38 7.17 6.96 8.08 6.78 8.17 8.36 8.17 ...
## $ Turbidity..NTU. : num 0.79 1.42 0.86 2.86 1.94 0.94 4.63 0.7 2.49 2.84 ...
## $ Dissolved.Oxygen..mg.L. : num 3.42 9.67 4.07 6.61 4.07 6.99 4.35 5.83 3.08 8.89 ...
## $ Nitrate.Level..mg.L. : num 36.67 28.31 7.74 17.53 21.78 ...
## $ Lead.Concentration..µg.L. : num 9.96 1.93 2.76 18.31 19.26 ...
## $ Bacteria.Count..CFU.mL. : int 2330 159 3078 2229 3385 251 4560 1892 4456 4422 ...
## $ Water.Treatment.Method : chr "" "" "Chlorination" "Chlorination" ...
## $ Access.to.Clean.Water....of.Population. : num 35.3 71.7 79 88.6 88.2 ...
## $ Diarrheal.Cases.per.100.000.people : int 274 265 30 175 237 130 276 78 147 38 ...
## $ Cholera.Cases.per.100.000.people : int 39 23 6 9 14 39 44 32 18 37 ...
## $ Typhoid.Cases.per.100.000.people : int 50 29 23 79 28 86 98 56 67 41 ...
## $ Infant.Mortality.Rate..per.1.000.live.births.: num 48.5 44.3 96.6 48.1 89 ...
## $ GDP.per.Capita..USD. : int 86022 5470 50972 35058 51718 71626 69800 81862 88123 69419 ...
## $ Healthcare.Access.Index..0.100. : num 58.37 47.62 7.38 48.31 6.23 ...
## $ Urbanization.Rate.... : num 72.9 69.4 10.1 69 43.7 ...
## $ Sanitation.Coverage....of.Population. : num 93.6 69.8 28.2 42.6 34.8 ...
## $ Rainfall..mm.per.year. : int 2074 2150 1927 1535 2136 2032 1077 800 955 2743 ...
## $ Temperature...C. : num 21.7 36.2 21.5 39.4 37.6 ...
## $ Population.Density..people.per.km.. : int 57 538 265 956 787 697 515 943 22 829 ...
Bagian ini menyajikan hasil analisis data yang telah dilakukan berdasarkan metode yang dijelaskan sebelumnya. Analisis dimulai dari pemaparan karakteristik data, dilanjutkan dengan pengujian asumsi klasik, penerapan Principal Component Analysis (PCA), serta pemodelan menggunakan Multiple Linear Regression (MLR). Hasil yang diperoleh kemudian diinterpretasikan untuk menjawab tujuan penelitian.
colnames(data_raw) <- c("country","region","year",
"water_source","contaminant",
"ph_level","turbidity","dissolved_oxygen",
"nitrate_level","lead_concetration","bacteria",
"treatment","clean_water",
"diarrhea_case","cholera","typhoid",
"infant_mortality",
"gdp","healthcare_access",
"urbanization_rate","sanitation",
"rainfall")
Pada bagian ini dilakukan perubahan nama kolom fitur pada dataset ‘water pollution’ ini, perubahan ini nama ini dilakukan dengan tujuan memudahkan penulisan nama kolom jika dibutuhkan, serta untuk menghindari R mengubah nama kolom dengan format yang tidak diketahui.
# Eliminasi fitur-fitur yang tidak digunakan
data <- data_raw[, c("contaminant","ph_level","nitrate_level","lead_concetration","bacteria",
"clean_water","diarrhea_case","gdp","healthcare_access",
"urbanization_rate","sanitation","infant_mortality")]
head(data)
## contaminant ph_level nitrate_level lead_concetration bacteria clean_water
## 1 0.24 6.43 36.67 9.96 2330 35.29
## 2 0.63 6.29 28.31 1.93 159 71.66
## 3 4.59 7.38 7.74 2.76 3078 79.01
## 4 3.50 7.17 17.53 18.31 2229 88.58
## 5 9.06 6.96 21.78 19.26 3385 88.19
## 6 1.21 8.08 14.58 18.56 251 99.24
## diarrhea_case gdp healthcare_access urbanization_rate sanitation
## 1 274 86022 58.37 72.86 93.56
## 2 265 5470 47.62 69.40 69.77
## 3 30 50972 7.38 10.10 28.20
## 4 175 35058 48.31 69.03 42.62
## 5 237 51718 6.23 43.69 34.83
## 6 130 71626 40.42 32.40 97.02
## infant_mortality
## 1 48.45
## 2 44.32
## 3 96.56
## 4 48.08
## 5 88.95
## 6 43.94
Setelah itu dilakukan eliminasi terhadap fitur-fitur yang tidak digunakan dalam analisis ini.
fitur_independen <- data[, c("contaminant","ph_level","nitrate_level","lead_concetration","bacteria",
"clean_water","diarrhea_case","gdp","healthcare_access",
"urbanization_rate","sanitation")]
fitur_dependen <- data$infant_mortality
Pemisahan fitur menjadi fitur independen dan fitur dependen dilakukan untuk mendukung analisis dengan metode MLR, dimana untuk analisis PCA fitur dependen tidak diperlukan.
# Normalisasi skala data
data_filter <- scale(fitur_independen)
data_filter <- as.data.frame(data_filter)
Pada dataset ‘water pollution’ untuk negara Indonesia terdapat kolom GDP atau rata-rata pendapatan masyarakat di daerah tersebut, kolom GDP ini memiliki risiko penyebab terjadinya bias dikarenakan angka numeriknya memiliki skala paling tinggi. Oleh karena itu normalisasi dilakukan untuk menjaga keseimbangan dataset sebelum dilakukan analisis.
# Statistika Deskriptif Standar
summary(data)
## contaminant ph_level nitrate_level lead_concetration
## Min. :0.150 Min. :6.030 Min. : 0.06 Min. : 0.030
## 1st Qu.:2.047 1st Qu.:6.668 1st Qu.:12.69 1st Qu.: 5.133
## Median :4.620 Median :7.270 Median :24.62 Median : 9.995
## Mean :4.649 Mean :7.272 Mean :24.57 Mean :10.117
## 3rd Qu.:7.020 3rd Qu.:7.907 3rd Qu.:36.33 3rd Qu.:15.322
## Max. :9.990 Max. :8.490 Max. :49.87 Max. :19.860
## bacteria clean_water diarrhea_case gdp
## Min. : 76 Min. :30.65 Min. : 0.0 Min. : 876
## 1st Qu.:1280 1st Qu.:48.55 1st Qu.:129.8 1st Qu.:26912
## Median :2653 Median :66.53 Median :244.5 Median :50969
## Mean :2532 Mean :65.70 Mean :248.2 Mean :51554
## 3rd Qu.:3828 3rd Qu.:83.90 3rd Qu.:372.2 3rd Qu.:77057
## Max. :4990 Max. :99.24 Max. :499.0 Max. :99947
## healthcare_access urbanization_rate sanitation infant_mortality
## Min. : 0.26 Min. :10.06 Min. :20.03 Min. : 2.30
## 1st Qu.:24.67 1st Qu.:30.03 1st Qu.:39.57 1st Qu.:26.65
## Median :51.25 Median :50.83 Median :59.15 Median :49.20
## Mean :50.39 Mean :50.68 Mean :60.15 Mean :51.06
## 3rd Qu.:77.36 3rd Qu.:70.49 3rd Qu.:80.82 3rd Qu.:76.73
## Max. :99.55 Max. :89.88 Max. :99.83 Max. :99.88
Berdasarkan hasil statistik deskriptif menggunakan fungsi summary() pada Rstudio, ditemukan beberapa pola yang menjelaskan ketimpangan antar region atau daerah. Ketimpangan ini terlihat dari hasil minimum dan maximum yang dihasilkan dari fungsi summary() dimana rentang antar keduanya begitu jauh yang menandakan adanya ketimpangan yang terjadi. Rentang yang lebar diketahui pada di beberapa variabel seperti GPD (Rata-rata pendapatan), sebaran bakteri, cangkupan sanitasi, dan akses layanan kesehatan. Rentangan tersebut memperlihatkan perbedaan kontras antar daerah yang menandakan adanya ketidakseimbangan fasilitas kesehatan, akses air bersih, dan juga ekonomi. Ketidakseimbangan tersebut memberikan hubungan sebab-akibat terhadap kasus diare dan juga kematian bayi. Hasil statistik deskriptif ini juga memperlihat skalabilitas antar fitur yang berbeda sehingga membutuhkan normalisasi atau scaling untuk menyeimbangkan skala antar fitur agar tidak terjadi bias pada analisis yang akan dilakukan.
# Visualisasi Heatmap Korelasi
library(ggplot2)
library(ggcorrplot)
corr_mat <-cor(data, use = "complete.obs")
ggcorrplot(corr_mat,
hc.order = TRUE,
type = "lower",
lab = TRUE,
colors = c("#E4672E", "white", "#6D9EC1"),
ggtheme = theme_minimal(),
title = "Heatmap Korelasi Kualitas Air di Indonesia")
## Warning: `aes_string()` was deprecated in ggplot2 3.0.0.
## ℹ Please use tidy evaluation idioms with `aes()`.
## ℹ See also `vignette("ggplot2-in-packages")` for more information.
## ℹ The deprecated feature was likely used in the ggcorrplot package.
## Please report the issue at <https://github.com/kassambara/ggcorrplot/issues>.
## This warning is displayed once per session.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
Penggunaan visualisasi dengan jenis heatmap correlation dipilih untuk
menjelaskan karakteristik data menggunakan pola hubungan antar variabel
dengan menggunakan skala warna yang dihubungkan dengan koefisien pearson
dengan indikator warna merah sebagai hubungan positif dan warna biru
untuk hubungan negatif. Pola yang ditemukan pada heatmap tersebut adalah
pola positif (jika variabel independen naik, maka variabel dependen juga
naik) seperti halnya variabel polutan pencemar air yakni bakteri,
nitrat, dan timbal dengan angka kematian bayi, juga pola negatif (jika
variabel independen turun, maka variabel dependen akan naik) seperti
halnya pada variabel infrastruktur dan ekonomi yakni GDP, akses layanan
kesehatan, dan fasilitas sanitasi air dengan angka kematian bayi. Hal
ini menunjukan bahwa pemerintah perlu fokus pada dua jenis variabel
tersebut untuk menurunkan angka kematian bayi, terutama pada daerah 3T
yang sangat tertinggal dalam segi fasilitas dan layanan lainnya. ## B.
Asumsi ### Asumsi Principal Component Analysis (PCA) Dalam penelitian
ini Principal Component Analysis digunakan untuk mereduksi dimensi data
dengan tetap mempertahankan sebagian besar variasi informasi dari
variabel asli. Metode Principal Component Analysis mentransformasikan
variabel yang saling berkorelasi menjadi sejumlah komponen utama.
Sebelum melakukan uji asumsi Principal Component Analysis dilakukan tahap Eksplorasi Struktur data untuk melihat apakah data telah memenuhi syarat untuk dilakukan uji asumsi Principal Component Analysis
str(fitur_independen)
## 'data.frame': 304 obs. of 11 variables:
## $ contaminant : num 0.24 0.63 4.59 3.5 9.06 1.21 2.33 2.13 4.18 2.53 ...
## $ ph_level : num 6.43 6.29 7.38 7.17 6.96 8.08 6.78 8.17 8.36 8.17 ...
## $ nitrate_level : num 36.67 28.31 7.74 17.53 21.78 ...
## $ lead_concetration: num 9.96 1.93 2.76 18.31 19.26 ...
## $ bacteria : int 2330 159 3078 2229 3385 251 4560 1892 4456 4422 ...
## $ clean_water : num 35.3 71.7 79 88.6 88.2 ...
## $ diarrhea_case : int 274 265 30 175 237 130 276 78 147 38 ...
## $ gdp : int 86022 5470 50972 35058 51718 71626 69800 81862 88123 69419 ...
## $ healthcare_access: num 58.37 47.62 7.38 48.31 6.23 ...
## $ urbanization_rate: num 72.9 69.4 10.1 69 43.7 ...
## $ sanitation : num 93.6 69.8 28.2 42.6 34.8 ...
Berdasarkan struktur data, seluruh variabel independen bertipe numerik sehingga memenuhi syarat untuk dilakukan uji asumsi Principal Component Analysis.
Selanjutnya, dilakukan Uji Kelayakan Principal Component Analysis dengan menggunakan dua pengujian yaitu, Pengujian Bartlett’s Test of Sphericity dan Pengujian KMO (Kaiser-Meyer-Olkin)
Pengujian Bartkett’s Test digunakan untuk memeriksa korelasi data apakah memiliki hubungan satu sama lain. Sementara itu, Pengujian KMO dilakukanuntuk memastikan bahwa informais yang ada pada variabel-variabel tersebut sudah cukup untuk diekstraksi menjadi komponen baru.
library(psych)
##
## Attaching package: 'psych'
## The following objects are masked from 'package:ggplot2':
##
## %+%, alpha
cortest.bartlett(fitur_independen)
## R was not square, finding R from data
## $chisq
## [1] 67.09255
##
## $p.value
## [1] 0.1270543
##
## $df
## [1] 55
Hasil uji Bartlett menunjukkan nilai p-value sebesar 0.127. Meskipun nilai p-value menunjukkan lebih besar dari 0.05 dimana nilai tersebut menunjukkan korelasi antar variabel tidak terlalu kuat secara statistik, analisis tetap dilanjutkan dengan melihat hasil pengujian KMO.
library(psych)
KMO(fitur_independen)
## Kaiser-Meyer-Olkin factor adequacy
## Call: KMO(r = fitur_independen)
## Overall MSA = 0.52
## MSA for each item =
## contaminant ph_level nitrate_level lead_concetration
## 0.46 0.55 0.49 0.55
## bacteria clean_water diarrhea_case gdp
## 0.63 0.47 0.49 0.58
## healthcare_access urbanization_rate sanitation
## 0.47 0.53 0.45
Hasil pengujian KMO menunjukkan bahwa nilai KMO sebesar 0.52, nilai tersebut menunjukkan kecukupan sampel yang berada pada batas minimal (cukup) untuk dianalisis.Maka, dataset dapat dinyatakan telah memenuhi syarat minimum kecukupan sampel untuk analisis lebih lanjut menggunakan PCA
Sebelum melakukan pengujian menggunakan Multiple Linear Regression, terdapat kriteria yang harus dipenuhi oleh model yang disebut dengan Asumsi Klasik. Terdapat tiga jenis asumsi yang digunakan yaitu, Uji Multikolinearitas (VIF), Uji Normalitas Residual (Shapiro-Wilk), dan Uji Homoskedastisitas (Breusch-Pagan)
Uji Multikolinearitas (VIF) digunakan untuk memastikan tidak ada hubungan linier yang sangat kuat antar variabel independen.Nilai VIF yang kurang dari 5 (< 5) menunjukkan tidak ada multikoliniertias.
# 1 Membuat Model MLR awal
model_awal <- lm(infant_mortality~., data = data)
# 2 Uji Multikolinearitas (VIF)
library(car)
## Loading required package: carData
##
## Attaching package: 'car'
## The following object is masked from 'package:psych':
##
## logit
vif(model_awal)
## contaminant ph_level nitrate_level lead_concetration
## 1.040720 1.055443 1.021052 1.033410
## bacteria clean_water diarrhea_case gdp
## 1.024314 1.046962 1.043445 1.039811
## healthcare_access urbanization_rate sanitation
## 1.040122 1.090420 1.019662
Hasil output menunjukkan bahwa seluruh variabel memiliki nilai VIF yang sangat rendah, yaitu pada rentang 1.01 hingga 1.09. Dikarenakan semua nilai VIF jauh di bawah ambang batas 5 atau 10, maka disimpulkan bahwa tidak terdapat masalah multikolinearitas.
Uji Normalitas Residual (Shapiro-Wilk) digunakan untuk menguji apakah “error” atau residual dari model berdistribusi normal.
# 3 Uji Normalitas Residual
# H0: Residual berdistribusi normal
shapiro.test(residuals(model_awal))
##
## Shapiro-Wilk normality test
##
## data: residuals(model_awal)
## W = 0.96648, p-value = 1.699e-06
Hasil pengujian menunjukkan bahwa nilai P-value 1.699e-06, dikarenakan nilai P-value < 0.05 maka keputusan uji ini adalah Menolak H0. Hal ini menunjukkan bahwa residual tidak berdistribusi normal sehingga Principal Component Analysis dapat digunakan sebagi upaya untuk memperbaiki struktur data dan menyeimbangkan distribusi residual.
# Visualisasi Normalitas menggunakan Q-Q Plot
library(ggplot2)
res <- residuals(model_awal)
df <- data.frame(residuals = res)
ggplot(df, aes(sample = residuals)) +
stat_qq() +
stat_qq_line(color = "red") +
ggtitle("Q-Q Plot Residuals")
Uji Homoskedastisitas (Breusch-Pagan) digunakan untuk memastikan bahwa sebaran dari residual bersifat konstan atau stabil dari suatu observasi ke observasi lainnya.
# 4 Uji Homoskedastisitas (Breush-Pagan)
# H0: Varians residual konstan
library(lmtest)
## Loading required package: zoo
##
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
##
## as.Date, as.Date.numeric
bptest(model_awal)
##
## studentized Breusch-Pagan test
##
## data: model_awal
## BP = 5.0733, df = 11, p-value = 0.9276
Hasil pengujian menunjukkan nilai p-value = 0.926, karena p-value lebih dari 0.05 maka keputusan uji adalah gagal menolak H0 yang artinya, asumsi homoskedastisitas terpenuhi. Model memiliki varians residual yang stabil.
# Visualisasi Residual vs Fitted
# Hitung fitted values dan residuals
library(ggplot2)
# Hitung fitted values dan residuals
fitted_vals <- fitted(model_awal)
residual_vals <- residuals(model_awal)
df_res <- data.frame(Fitted = fitted_vals, Residuals = residual_vals)
# Plot residual vs fitted
ggplot(df_res, aes(x = Fitted, y = Residuals)) +
geom_point(color = "blue") +
geom_hline(yintercept = 0, color = "red", linetype = "dashed", size = 1) +
labs(title = "Residuals vs Fitted",
x = "Fitted Values",
y = "Residuals") +
theme_minimal()
## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
## ℹ Please use `linewidth` instead.
## This warning is displayed once per session.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
# Ekstraksi PCA
pca_data <- prcomp(fitur_independen, center = TRUE, scale. = TRUE)
Pada bagian ini, digunakan fungsi prcomp() untuk membuat
komponen-komponen yang berisikan ringkasan fitur-fitur independen yang
akan digunakan. Fungsi prcomp() merupakan fungsi bawaan
dari R yang digunakan untuk melakukan PCA, pemilihan fungsi prcomp ini
didasari atas cara kerjanya yang menggunakan metode Singular Value
Decomposition (SVD), SVD tidak melakukan pembulatan terhadap data yang
digunakan sehingga komputer dapat melakukan perhitungan tanpa kehilangan
akurasi angka, komputer memiliki batas kemampuan untuk menghitung angka
dengan akurat terutama pada data dengan data yang sangat kecil dan yang
sangat besar. Oleh karena itu penggunaan fungsi prcomp()
merupakan pilihan yang lebih masuk akal. Parameter yang digunakan dalam
fungsi prcomp() adalah parameter center = TRUE. Fungsi
parameter center adalah untuk memusatkan setiap variabel agar memiliki
rata-rata 0.
pca_data
## Standard deviations (1, .., p=11):
## [1] 1.1907827 1.1081874 1.0763286 1.0439867 1.0173254 0.9849086 0.9637363
## [8] 0.9454400 0.9039320 0.8609075 0.8483343
##
## Rotation (n x k) = (11 x 11):
## PC1 PC2 PC3 PC4 PC5
## contaminant 0.090136632 -0.34958870 0.51098984 0.16282210 0.46074232
## ph_level 0.445875534 -0.03251881 -0.06351729 0.45194526 -0.25131821
## nitrate_level -0.031918166 -0.36489346 -0.33423213 0.12927510 -0.46948316
## lead_concetration 0.316278144 0.30625349 -0.20628889 0.26425079 0.22307253
## bacteria 0.358564754 -0.17985331 0.08155374 0.04931196 -0.22192326
## clean_water -0.253532429 0.30279825 -0.03546700 0.66151023 0.09977967
## diarrhea_case -0.239406511 -0.41757207 0.11610801 0.48127508 0.03805725
## gdp 0.392608238 0.23322662 -0.27812769 0.03196589 0.18168998
## healthcare_access 0.009406506 -0.46373844 -0.48005794 -0.02785154 0.11725013
## urbanization_rate 0.536054062 -0.20829882 0.24793849 -0.08119349 0.06754531
## sanitation -0.016529968 -0.19635430 -0.43579191 -0.05148638 0.58515331
## PC6 PC7 PC8 PC9 PC10
## contaminant 0.2095590 -0.05592848 0.15198969 0.10951005 -0.45030952
## ph_level 0.1634977 0.05521796 0.09378672 -0.59457680 0.12900334
## nitrate_level 0.4891843 0.16768171 0.00768672 0.46029509 -0.19036421
## lead_concetration -0.2316135 0.40097758 -0.52315333 0.25226468 -0.27722011
## bacteria -0.1870810 -0.74520030 -0.39432113 0.16807576 -0.03864737
## clean_water 0.1877167 -0.23610748 0.10468113 -0.03190533 -0.17204359
## diarrhea_case -0.4179824 0.15009009 -0.01437956 0.23540809 0.51227235
## gdp -0.1187170 -0.18539840 0.64175076 0.42198433 0.15349205
## healthcare_access -0.4307517 0.01172386 0.18962926 -0.29595894 -0.42611870
## urbanization_rate 0.1292098 0.32059423 0.03039199 0.02570498 0.20003910
## sanitation 0.4184798 -0.18448541 -0.28102252 -0.08927118 0.35891752
## PC11
## contaminant 0.29127828
## ph_level 0.34633486
## nitrate_level 0.03753340
## lead_concetration 0.12420260
## bacteria -0.07208638
## clean_water -0.51250899
## diarrhea_case 0.08049825
## gdp 0.13466670
## healthcare_access -0.22150995
## urbanization_rate -0.65996478
## sanitation 0.03573412
Keluaran yang dihasilkan oleh fungsi prcomp() dengan
nama pca_data adalah nilai rata-rata dan standar deviasi dari data
sebelumnya alias data yang belum di transformasi, lalu standar deviasi
setiap komponen (PCi) yang terbentuk, nilai importance setiap komponen,
dan data baru yang berupa skor komponen utama. Berdasarkan hasil
keluaran pca_data terdapat nilai standar deviasi yang telah diurutkan
dari nilai yang paling besar, nilai standar deviasi yang besar ini
merepresentasikan banyaknya varian informasi yang terkandung dalam
komponen tersebut. Berikut merupakan lima hasil nilai standar deviasi
tertinggi (std > 0.9) yang dihasilkan oleh pca_data dan akan
digunakan untuk analisis MLR: PC1 dengan nilai std 1.1908 PC2 dengan
nilai std 1.1082 PC3 dengan nilai std 1.0763 PC4 dengan nilai std
1.04399 PC5 dengan nilai std 1.01733 Keluaran dari pca_data juga
memberikan nilai loadings, nilai loadings digunakan untuk melihat
variabel-variabel utama yang memiliki pengaruh paling kuat dalam
pembuatan komponen PCA.
summary(pca_data)
## Importance of components:
## PC1 PC2 PC3 PC4 PC5 PC6 PC7
## Standard deviation 1.1908 1.1082 1.0763 1.04399 1.01733 0.98491 0.96374
## Proportion of Variance 0.1289 0.1116 0.1053 0.09908 0.09409 0.08819 0.08444
## Cumulative Proportion 0.1289 0.2406 0.3459 0.44495 0.53903 0.62722 0.71166
## PC8 PC9 PC10 PC11
## Standard deviation 0.94544 0.90393 0.86091 0.84833
## Proportion of Variance 0.08126 0.07428 0.06738 0.06542
## Cumulative Proportion 0.79292 0.86720 0.93458 1.00000
Setelah data yang telah dilakukan analisis PCA didapatkan dilakukan
summary() yang fungsinya untuk menghitung persentase
varian, dengan jelas berikut merupakan tiga keluaran yang dihasilkan
yakni standar deviasi, proportion of variance, dan cumulative proportion
yang mengandung informasi mengenai akumulasi persentase informasi. Hasil
utama dari fungsi summary() ini adalah untuk menentukan
komponen-komponen hasil PCA yang mengandung informasi yang penting untuk
dipertahankan kan dan dilanjutkan untuk tahap analisis MLR. Keluaran
yang dihasilkan oleh fungsi summary() di atas menjelaskan
bahwa sebaran informasi dalam dataset ‘waterpollution’ ini tidak hanya
terpusat pada satu atau dua variabel saja namun tersebar luas yang
menyebabkan komponen dengan standar deviasi tinggi dapat memiliki nilai
cumulative proportion yang rendah.
Loading factor
pca_data$rotation
## PC1 PC2 PC3 PC4 PC5
## contaminant 0.090136632 -0.34958870 0.51098984 0.16282210 0.46074232
## ph_level 0.445875534 -0.03251881 -0.06351729 0.45194526 -0.25131821
## nitrate_level -0.031918166 -0.36489346 -0.33423213 0.12927510 -0.46948316
## lead_concetration 0.316278144 0.30625349 -0.20628889 0.26425079 0.22307253
## bacteria 0.358564754 -0.17985331 0.08155374 0.04931196 -0.22192326
## clean_water -0.253532429 0.30279825 -0.03546700 0.66151023 0.09977967
## diarrhea_case -0.239406511 -0.41757207 0.11610801 0.48127508 0.03805725
## gdp 0.392608238 0.23322662 -0.27812769 0.03196589 0.18168998
## healthcare_access 0.009406506 -0.46373844 -0.48005794 -0.02785154 0.11725013
## urbanization_rate 0.536054062 -0.20829882 0.24793849 -0.08119349 0.06754531
## sanitation -0.016529968 -0.19635430 -0.43579191 -0.05148638 0.58515331
## PC6 PC7 PC8 PC9 PC10
## contaminant 0.2095590 -0.05592848 0.15198969 0.10951005 -0.45030952
## ph_level 0.1634977 0.05521796 0.09378672 -0.59457680 0.12900334
## nitrate_level 0.4891843 0.16768171 0.00768672 0.46029509 -0.19036421
## lead_concetration -0.2316135 0.40097758 -0.52315333 0.25226468 -0.27722011
## bacteria -0.1870810 -0.74520030 -0.39432113 0.16807576 -0.03864737
## clean_water 0.1877167 -0.23610748 0.10468113 -0.03190533 -0.17204359
## diarrhea_case -0.4179824 0.15009009 -0.01437956 0.23540809 0.51227235
## gdp -0.1187170 -0.18539840 0.64175076 0.42198433 0.15349205
## healthcare_access -0.4307517 0.01172386 0.18962926 -0.29595894 -0.42611870
## urbanization_rate 0.1292098 0.32059423 0.03039199 0.02570498 0.20003910
## sanitation 0.4184798 -0.18448541 -0.28102252 -0.08927118 0.35891752
## PC11
## contaminant 0.29127828
## ph_level 0.34633486
## nitrate_level 0.03753340
## lead_concetration 0.12420260
## bacteria -0.07208638
## clean_water -0.51250899
## diarrhea_case 0.08049825
## gdp 0.13466670
## healthcare_access -0.22150995
## urbanization_rate -0.65996478
## sanitation 0.03573412
Fungsi terakhir yang digunakan pada analisis PCA ini adalah
pca_data$rotation atau nilai loadings. Nilai loadings ini
menunjukan nilai kontribusi masing-masing variabel asli untuk setiap
komponen PCA yang telah terbuat. Parameter perhitungan nilai loadings,
jika mendekati 1 atau -1 maka varibel tersebut memiliki pengaruh yang
kuat, sedangkan jika nilai loadings mendekati 0 maka variabel tersebut
tidak memiliki pengaruh atau hubungan. Berikut merupakan hasil nilai
loadings untuk lima komponen PCA dengan nilai std tertinggi: PC1 dengan
variabel yang berpengaruh meliputi urbanisasi (0,53), level ph (0,44),
gdp (0,39), bakteri (0,35), dan kandungan timbal (0,31) Komponen PC1 ini
menjelaskan informasi mengenai pemukiman dan perekonomian yang diikuti
dengan informasi mengenai kadar polutan yang menjadi penyebab pencemaran
air. PC2 dengan variabel yang berpengaruh meliputi kasus diare (0,41),
kandungan nitrat (0,36), kontaminasi pencemaran air (0,34), kandungan
timbal (0,3), akses air bersih (0,3) Komponen PC2 menjelaskan informasi
mengenai kesenjangan kesehatan dan kontaminasi air. PC3 dengan variabel
yang berpengaruh meliputi kontaminasi pencemaran air (0,51), akses
layanan kesehatan (0,48), sanitasi air (0,43), kandungan nitrat (0,33)
Komponen PC3 ini menjelaskan informasi mengenai kurangnya infrastruktur
kesehatan dan sanitasi yang menyebabkan kontaminasi air serta kandungan
nitrat kerap memburuk. PC4 dengan variabel yang berpengaruh meliputi
akses air bersih (0,66), kasus diare (0,48), level ph (0,45) Komponen
PC4 mengandung informasi yang menjelaskan mengenai hubungan antara kasus
diare dan level ph dengan baiknya akses terhadap air bersih. PC5 dengan
variabel yang berpengaruh meliputi sanitasi (0,58), kandungan nitrat
(0,47), kontaminasi air (0,46) Komponen PC5 mengandung informasi
mengenai pengolahan air (sanitasi) terhadap kandungan nitrat dalam
air.
str(pca_data)
## List of 5
## $ sdev : num [1:11] 1.19 1.11 1.08 1.04 1.02 ...
## $ rotation: num [1:11, 1:11] 0.0901 0.4459 -0.0319 0.3163 0.3586 ...
## ..- attr(*, "dimnames")=List of 2
## .. ..$ : chr [1:11] "contaminant" "ph_level" "nitrate_level" "lead_concetration" ...
## .. ..$ : chr [1:11] "PC1" "PC2" "PC3" "PC4" ...
## $ center : Named num [1:11] 4.65 7.27 24.57 10.12 2532.33 ...
## ..- attr(*, "names")= chr [1:11] "contaminant" "ph_level" "nitrate_level" "lead_concetration" ...
## $ scale : Named num [1:11] 2.89 0.72 14.19 5.9 1466.45 ...
## ..- attr(*, "names")= chr [1:11] "contaminant" "ph_level" "nitrate_level" "lead_concetration" ...
## $ x : num [1:304, 1:11] 0.558 -2.077 -0.895 0.328 0.235 ...
## ..- attr(*, "dimnames")=List of 2
## .. ..$ : NULL
## .. ..$ : chr [1:11] "PC1" "PC2" "PC3" "PC4" ...
## - attr(*, "class")= chr "prcomp"
# Mengambil skor PCA
skor_pca <- as.data.frame(pca_data$x[, 1:5])
# Menggabungkan variabel dependen
data_mlr_pca <- cbind(skor_pca, infant_mortality = data$infant_mortality)
head(data_mlr_pca)
## PC1 PC2 PC3 PC4 PC5 infant_mortality
## 1 0.55756344 -0.5621721 -1.76886975 -1.6918803 0.21539730 48.45
## 2 -2.07657882 -0.2436142 -0.03496043 -1.1428088 -0.35423833 44.32
## 3 -0.89520242 2.1125686 1.32138205 -0.4498457 -0.92458785 96.56
## 4 0.32780195 1.2137865 0.28354931 0.6127692 0.03892509 48.08
## 5 0.23512919 1.2501439 1.65867444 1.2733628 0.40890269 88.95
## 6 -0.07956642 2.3718207 -1.92849252 1.2238505 1.24161302 43.94
Sebelum melakukan permodelan regresi, hasil ekstraksi PCA dikonversi menjadi dataset baru yang terdiri skor komponan utama PC1 hingga PC5.
# Menjalankan model MLR
model_final <- lm(infant_mortality ~ ., data = data_mlr_pca)
# Menyimpan hasil ringkasan model
summary(model_final)
##
## Call:
## lm(formula = infant_mortality ~ ., data = data_mlr_pca)
##
## Residuals:
## Min 1Q Median 3Q Max
## -54.769 -23.320 -2.023 23.903 55.256
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 51.0599 1.6277 31.369 <2e-16 ***
## PC1 -1.1848 1.3692 -0.865 0.3876
## PC2 -0.3177 1.4712 -0.216 0.8292
## PC3 -3.6294 1.5148 -2.396 0.0172 *
## PC4 2.0497 1.5617 1.312 0.1904
## PC5 -1.2002 1.6027 -0.749 0.4545
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 28.38 on 298 degrees of freedom
## Multiple R-squared: 0.02875, Adjusted R-squared: 0.01245
## F-statistic: 1.764 on 5 and 298 DF, p-value: 0.1201
Berdasarkan hasil estimasi model regresi, diperoleh nilai intercept sebesar 51.0599 dengan p-value < 0.001 yang menunjukkan bahwa parameter tersebut signifikan secara statistik. Nilai intercept ini menunjukkan bahwa pada kondisi rata-rata seluruh komponen utama (PC1-PC5) tingkat infant mortality diperkirakan sebesar 51.06. Nilai ini signifikan secara statistik (p < 0.001)
Hasil uji parsial (uji t) menunjukkan: PC1 memiliki koefisien -1.1848 dengan p-value 0.3876 (p-value > 0.05) sehingga tidak berpengaruh secara signifikan terhadap infant mortality. PC2 memiliki koefisien -0.3117 dengan p-value 0.8292 (p-value > 0.05) sehingga tidak berpengaruh secara signifikan terhadap infant mortality PC3 memiliki koefisien -3.6294 dengan p-value 0.0172 (p-value < 0.05) sehingga PC3 berpengaruh signifikan terhadap infant mortality PC4 memiliki koefisien -2.0497 dengan p-value 0.1904 (p-value > 0.05) sehingga tidak berpengaruh secara signifikan terhadap infant mortality PC5 memiliki koefisien -1.2002 dengan p-value 0.4545 (p-value > 0.05) sehingga tidak berpengaruh secara signifikan terhadap infant mortality
Maka, PC3 merupakan komponen yang berpengaruh signifikan terhadap infant mortality pada tingkat signifikansi 5%
Nilai Multiple R-squared sebesar 0.02875 menunjukkan bahwa model hanya mampu menjelaskan sekitar 2,99% variasi dalam infant mortality. Nilai Adjusted R-squared sebesar 0.01245 menunjukkan bahwa setelah penyesuaian terdahal jumlah variabel model hanya mampu menjelaskan sekitar 1,24% variasi dalam infant mortality.