Dataset Global Country Information digunakan untuk menganalisis hubungan antara faktor ekonomi dan indikator kesehatan. Analisis dilakukan menggunakan metode MANCOVA dan ANCOVA untuk melihat pengaruh GDP terhadap life expectancy dan infant mortality dengan mempertimbangkan variabel kovariat.
Keterangan Variabel:
Variabel Dependen (Y): Life expectancy dan infant mortality sebagai indikator kesehatan.
Variabel Independen (X): GDP dikategorikan menjadi tiga kelompok yaitu Low, Medium, dan High.
Variabel Kovariat: Physicians per thousand dan out-of-pocket health expenditure sebagai variabel kontrol.
library(psych)
library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr 1.1.4 ✔ readr 2.1.5
## ✔ forcats 1.0.0 ✔ stringr 1.5.2
## ✔ ggplot2 4.0.0 ✔ tibble 3.3.0
## ✔ lubridate 1.9.4 ✔ tidyr 1.3.2
## ✔ purrr 1.1.0
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ ggplot2::%+%() masks psych::%+%()
## ✖ ggplot2::alpha() masks psych::alpha()
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag() masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(car)
## Loading required package: carData
##
## Attaching package: 'car'
##
## The following object is masked from 'package:dplyr':
##
## recode
##
## The following object is masked from 'package:purrr':
##
## some
##
## The following object is masked from 'package:psych':
##
## logit
data <- read.csv("world-data-2023.csv")
str(data)
## 'data.frame': 195 obs. of 35 variables:
## $ Country : chr "Afghanistan" "Albania" "Algeria" "Andorra" ...
## $ Density..P.Km2. : chr "60" "105" "18" "164" ...
## $ Abbreviation : chr "AF" "AL" "DZ" "AD" ...
## $ Agricultural.Land.... : chr "58.10%" "43.10%" "17.40%" "40.00%" ...
## $ Land.Area.Km2. : chr "652,230" "28,748" "2,381,741" "468" ...
## $ Armed.Forces.size : chr "323,000" "9,000" "317,000" "" ...
## $ Birth.Rate : num 32.5 11.8 24.3 7.2 40.7 ...
## $ Calling.Code : int 93 355 213 376 244 1 54 374 61 43 ...
## $ Capital.Major.City : chr "Kabul" "Tirana" "Algiers" "Andorra la Vella" ...
## $ Co2.Emissions : chr "8,672" "4,536" "150,006" "469" ...
## $ CPI : chr "149.9" "119.05" "151.36" "" ...
## $ CPI.Change.... : chr "2.30%" "1.40%" "2.00%" "" ...
## $ Currency.Code : chr "AFN" "ALL" "DZD" "EUR" ...
## $ Fertility.Rate : num 4.47 1.62 3.02 1.27 5.52 1.99 2.26 1.76 1.74 1.47 ...
## $ Forested.Area.... : chr "2.10%" "28.10%" "0.80%" "34.00%" ...
## $ Gasoline.Price : chr "$0.70 " "$1.36 " "$0.28 " "$1.51 " ...
## $ GDP : chr "$19,101,353,833 " "$15,278,077,447 " "$169,988,236,398 " "$3,154,057,987 " ...
## $ Gross.primary.education.enrollment.... : chr "104.00%" "107.00%" "109.90%" "106.40%" ...
## $ Gross.tertiary.education.enrollment.... : chr "9.70%" "55.00%" "51.40%" "" ...
## $ Infant.mortality : num 47.9 7.8 20.1 2.7 51.6 5 8.8 11 3.1 2.9 ...
## $ Largest.city : chr "Kabul" "Tirana" "Algiers" "Andorra la Vella" ...
## $ Life.expectancy : num 64.5 78.5 76.7 NA 60.8 76.9 76.5 74.9 82.7 81.6 ...
## $ Maternal.mortality.ratio : int 638 15 112 NA 241 42 39 26 6 5 ...
## $ Minimum.wage : chr "$0.43 " "$1.12 " "$0.95 " "$6.63 " ...
## $ Official.language : chr "Pashto" "Albanian" "Arabic" "Catalan" ...
## $ Out.of.pocket.health.expenditure : chr "78.40%" "56.90%" "28.10%" "36.40%" ...
## $ Physicians.per.thousand : num 0.28 1.2 1.72 3.33 0.21 2.76 3.96 4.4 3.68 5.17 ...
## $ Population : chr "38,041,754" "2,854,191" "43,053,054" "77,142" ...
## $ Population..Labor.force.participation....: chr "48.90%" "55.70%" "41.20%" "" ...
## $ Tax.revenue.... : chr "9.30%" "18.60%" "37.20%" "" ...
## $ Total.tax.rate : chr "71.40%" "36.60%" "66.10%" "" ...
## $ Unemployment.rate : chr "11.12%" "12.33%" "11.70%" "" ...
## $ Urban_population : chr "9,797,273" "1,747,593" "31,510,100" "67,873" ...
## $ Latitude : num 33.9 41.2 28 42.5 -11.2 ...
## $ Longitude : num 67.71 20.17 1.66 1.52 17.87 ...
Hasil str(data) menunjukkan bahwa dataset memiliki 195 observasi dan 35 variabel dengan tipe data, yaitu karakter (chr), numerik (num), dan integer (int). Beberapa variabel sudah berupa numerik, sementara lainnya masih berbentuk karakter.
clean_numeric <- function(x) {
x <- gsub("\\$", "", x)
x <- gsub("%", "", x)
x <- gsub(",", "", x)
as.numeric(x)
}
data$GDP <- clean_numeric(data$GDP)
data$Life.expectancy <- as.numeric(data$Life.expectancy)
data$Infant.mortality <- as.numeric(data$Infant.mortality)
data$Physicians.per.thousand <- as.numeric(data$Physicians.per.thousand)
data$Out.of.pocket.health.expenditure <- clean_numeric(data$Out.of.pocket.health.expenditure)
data_clean <- na.omit(data[, c(
"GDP",
"Life.expectancy",
"Infant.mortality",
"Physicians.per.thousand",
"Out.of.pocket.health.expenditure"
)])
Tahap ini digunakan untuk mengubah data dari format teks menjadi numerik. Fungsi clean_numeric menghapus simbol seperti $, %, dan koma pada variabel seperti GDP dan out-of-pocket health expenditure. Variabel lain seperti life expectancy, infant mortality, dan physicians per thousand langsung dikonversi ke numerik. Tujuannya agar seluruh variabel dapat digunakan dalam analisis statistik.
data_clean$GDP_cat <- cut(
data_clean$GDP,
breaks = quantile(data_clean$GDP, probs = c(0, 0.33, 0.66, 1), na.rm = TRUE),
labels = c("Low", "Medium", "High"),
include.lowest = TRUE
)
data_clean$GDP_cat <- as.factor(data_clean$GDP_cat)
Tahap ini mengubah GDP dari numerik menjadi kategori (Low, Medium, High) menggunakan cut() berdasarkan persentil (quantile). Kemudian diubah menjadi factor agar bisa digunakan sebagai variabel independen dalam MANCOVA.
par(mfrow = c(1, 2))
boxplot(Life.expectancy ~ GDP_cat, data = data_clean,
col = "lightblue", main = "Life Expectancy by GDP Category",
xlab = "GDP Category", ylab = "Life Expectancy")
grid()
boxplot(Infant.mortality ~ GDP_cat, data = data_clean,
col = "lightgreen", main = "Infant Mortality by GDP Category",
xlab = "GDP Category", ylab = "Infant Mortality")
grid()
Visualisasi ini digunakan untuk melihat pola awal sebelum analisis statistik. Boxplot life expectancy menunjukkan tren naik dari GDP rendah ke tinggi, artinya semakin tinggi GDP maka harapan hidup cenderung meningkat. Sebaliknya, boxplot infant mortality menunjukkan tren turun, yang berarti semakin tinggi GDP maka angka kematian bayi semakin rendah. Perbedaan posisi dan sebaran box antar kategori menunjukkan adanya perbedaan antar kelompok GDP.
par(mfrow = c(1, 2))
plot(data_clean$Physicians.per.thousand, data_clean$Life.expectancy,
col = "darkblue", main = "Life Expectancy vs Physicians",
xlab = "Physicians per Thousand", ylab = "Life Expectancy")
abline(lm(Life.expectancy ~ Physicians.per.thousand, data = data_clean), col="red")
grid()
plot(data_clean$Physicians.per.thousand, data_clean$Infant.mortality,
col = "darkgreen", main = "Infant Mortality vs Physicians",
xlab = "Physicians per Thousand", ylab = "Infant Mortality")
abline(lm(Infant.mortality ~ Physicians.per.thousand, data = data_clean), col="red")
grid()
Visualisasi ini menunjukkan hubungan antara kovariat (physicians per thousand) dengan indikator kesehatan. Scatter plot life expectancy memperlihatkan tren positif, di mana semakin banyak jumlah dokter, maka harapan hidup cenderung meningkat. Sebaliknya, scatter plot infant mortality menunjukkan tren negatif, artinya semakin banyak dokter, maka angka kematian bayi cenderung menurun. Pola ini terlihat dari garis regresi yang masing-masing naik dan turun.
hasil_korelasi <- cor(data_clean$Life.expectancy, data_clean$Infant.mortality)
print(hasil_korelasi)
## [1] -0.9222959
Nilai korelasi -0.922 menunjukkan hubungan negatif yang sangat kuat antara life expectancy dan infant mortality. Tanda negatif berarti hubungan berlawanan arah (satu naik, yang lain turun), sedangkan nilai yang mendekati 1 menunjukkan kekuatan hubungan yang sangat tinggi.
Secara interpretasi, semakin tinggi angka harapan hidup suatu negara, maka angka kematian bayi cenderung semakin rendah. Hubungan yang sangat kuat ini menunjukkan bahwa kedua variabel saling terkait erat, sehingga penggunaan MANCOVA tepat karena dapat menganalisis keduanya secara bersamaan.
shapiro.test(data_clean$Life.expectancy)
##
## Shapiro-Wilk normality test
##
## data: data_clean$Life.expectancy
## W = 0.96487, p-value = 0.0001559
shapiro.test(data_clean$Infant.mortality)
##
## Shapiro-Wilk normality test
##
## data: data_clean$Infant.mortality
## W = 0.86732, p-value = 1.481e-11
Hasil uji Shapiro-Wilk menunjukkan p-value life expectancy (0.00015) dan infant mortality (1.48×10⁻¹¹) lebih kecil dari 0.05, sehingga data tidak berdistribusi normal. Hal ini wajar karena adanya kesenjangan antar negara yang menyebabkan distribusi menjadi tidak simetris, serta jumlah sampel yang besar membuat uji sangat sensitif terhadap outlier.
Meskipun asumsi normalitas tidak terpenuhi, kondisi ini tidak terlalu memengaruhi hasil pada sampel besar. Selain itu, MANCOVA cukup tahan terhadap ketidaknormalan selama tidak terdapat outlier yang ekstrem.
leveneTest(Life.expectancy ~ GDP_cat, data = data_clean)
## Levene's Test for Homogeneity of Variance (center = median)
## Df F value Pr(>F)
## group 2 2.5376 0.0819 .
## 179
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
leveneTest(Infant.mortality ~ GDP_cat, data = data_clean)
## Levene's Test for Homogeneity of Variance (center = median)
## Df F value Pr(>F)
## group 2 10.221 6.262e-05 ***
## 179
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Hasil uji Levene menunjukkan bahwa untuk life expectancy diperoleh p-value 0.0819 (> 0.05), sehingga varians antar kelompok GDP bersifat homogen dan asumsi terpenuhi. Sebaliknya, pada infant mortality diperoleh p-value sangat kecil (6.262×10⁻⁵ < 0.05), yang berarti varians tidak homogen. Kondisi ini wajar karena pada negara dengan GDP tinggi, angka kematian bayi cenderung rendah dan seragam, sedangkan pada GDP rendah sebarannya lebih bervariasi.
Meskipun terdapat ketidakhomogenan pada infant mortality, analisis MANCOVA tetap dapat dilanjutkan karena metode ini cukup tahan terhadap kondisi tersebut, terutama ketika jumlah sampel antar kelompok relatif seimbang (dibagi berdasarkan kuantil).
model_mancova <- manova(
cbind(Life.expectancy, Infant.mortality) ~
GDP_cat + Physicians.per.thousand + Out.of.pocket.health.expenditure,
data = data_clean
)
Fungsi manova() digunakan untuk menganalisis dua variabel dependen (life expectancy dan infant mortality) secara bersama. cbind() menggabungkan keduanya sebagai satu indikator kesehatan, sedangkan simbol ~ menunjukkan pengaruh variabel lain. GDP_cat sebagai variabel utama, dan kovariat dikontrol agar pengaruh GDP terlihat lebih murni.
summary(model_mancova, test = "Wilks")
## Df Wilks approx F num Df den Df Pr(>F)
## GDP_cat 2 0.62274 23.514 4 352 < 2.2e-16
## Physicians.per.thousand 1 0.52592 79.326 2 176 < 2.2e-16
## Out.of.pocket.health.expenditure 1 0.89896 9.891 2 176 8.497e-05
## Residuals 177
##
## GDP_cat ***
## Physicians.per.thousand ***
## Out.of.pocket.health.expenditure ***
## Residuals
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Hasil MANCOVA (Wilks’ Lambda = 0.622; p < 0.001) menunjukkan bahwa kategori GDP berpengaruh signifikan terhadap indikator kesehatan (life expectancy dan infant mortality). Artinya, terdapat perbedaan kesehatan yang jelas antara negara dengan GDP rendah, menengah, dan tinggi, meskipun faktor lain sudah dikontrol.
Selain itu, kovariat physicians per thousand (p < 0.001) dan out-of-pocket health expenditure (p < 0.001) juga signifikan, sehingga keduanya memang berperan dalam memengaruhi kesehatan. Karena hasil MANCOVA signifikan, analisis dilanjutkan ke ANCOVA untuk melihat pengaruh GDP pada masing-masing variabel secara lebih spesifik.
summary.aov(model_mancova)
## Response Life.expectancy :
## Df Sum Sq Mean Sq F value Pr(>F)
## GDP_cat 2 2326.7 1163.4 52.701 < 2.2e-16 ***
## Physicians.per.thousand 1 3243.4 3243.4 146.925 < 2.2e-16 ***
## Out.of.pocket.health.expenditure 1 336.6 336.6 15.248 0.0001339 ***
## Residuals 177 3907.3 22.1
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Response Infant.mortality :
## Df Sum Sq Mean Sq F value Pr(>F)
## GDP_cat 2 11253.6 5626.8 35.052 1.498e-13 ***
## Physicians.per.thousand 1 23087.9 23087.9 143.826 < 2.2e-16 ***
## Out.of.pocket.health.expenditure 1 3161.5 3161.5 19.695 1.594e-05 ***
## Residuals 177 28413.1 160.5
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Hasil ANCOVA menunjukkan bahwa GDP_cat berpengaruh signifikan terhadap kedua variabel dependen. Pada life expectancy diperoleh F = 52.70 (p < 0.001), dan pada infant mortality F = 35.05 (p < 0.001), yang berarti terdapat perbedaan nyata antar kategori GDP pada masing-masing indikator kesehatan.
Selain itu, kovariat physicians per thousand memiliki pengaruh paling kuat pada kedua model, sehingga jumlah tenaga medis menjadi faktor penting dalam menentukan kondisi kesehatan. Secara keseluruhan, GDP tidak hanya berpengaruh secara bersama-sama, tetapi juga secara individu pada masing-masing variabel kesehatan.
1. Pengaruh Multivariat Signifikan
Hasil MANCOVA menunjukkan bahwa GDP berpengaruh signifikan (p < 0.001) terhadap indikator kesehatan (life expectancy dan infant mortality). Artinya, tingkat ekonomi negara berperan penting dalam menentukan kualitas kesehatan.
2. Pengaruh Individual (ANCOVA)
GDP berpengaruh signifikan terhadap:
Life expectancy: semakin tinggi GDP, semakin tinggi harapan hidup.
Infant mortality: semakin tinggi GDP, semakin rendah angka kematian bayi.
3. Peran Kovariat
Variabel physicians per thousand memiliki pengaruh paling kuat, menunjukkan bahwa ketersediaan tenaga medis sangat berperan dalam meningkatkan kualitas kesehatan.
4. Hubungan Antar Indikator
Terdapat korelasi negatif kuat antara life expectancy dan infant mortality, yang menunjukkan bahwa peningkatan harapan hidup diikuti dengan penurunan kematian bayi.