Deskripsi Dataset

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 awal

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

Dataset Wilayah Indonesia

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

Hasil dan Pembahasan

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.

A. Karakteristik Data

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.

  1. Uji Korelasi antar Variabel (Bartlett’s Test)
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.

  1. Uji KMO (Kaiser-Meyer-Oklin)
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

Asumsi Multiple Linear Regression

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.

C. Principal Component Analysis (PCA)

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

D. Multiple Linear Regression

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.