Data yang digunakan dalam proyek ini tersedia untuk umum disitus web Kaggle. Kaggle adalah platfrom terkenal untuk analisis data. Dataset dapat diakses melalui https://www.kaggle.com/datasets/kumarajarshi/life-expectancy-who/data
Load Library adalah proses memanggil atau mengaktifkan package di R agar fungsinya bisa digunakan dalam script.
library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr 1.2.0 ✔ readr 2.2.0
## ✔ forcats 1.0.1 ✔ stringr 1.6.0
## ✔ ggplot2 4.0.2 ✔ tibble 3.3.1
## ✔ lubridate 1.9.5 ✔ tidyr 1.3.2
## ✔ purrr 1.2.1
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ 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(corrplot)
## corrplot 0.95 loaded
library(knitr)
library(kableExtra)
##
## Attaching package: 'kableExtra'
##
## The following object is masked from 'package:dplyr':
##
## group_rows
library(psych)
##
## Attaching package: 'psych'
##
## The following objects are masked from 'package:ggplot2':
##
## %+%, alpha
library(ggcorrplot)
library(factoextra)
## Welcome! Want to learn more? See two factoextra-related books at https://goo.gl/ve3WBa
Berikut ini adalah 10 pengamatan yang dipilih secara acak dari dataset:
life <- read.csv("Life Expectancy Data.csv")
sample_n(life, 10)
## Country Year Status Life.expectancy
## 1 Latvia 2005 Developed 76.0
## 2 Viet Nam 2008 Developing 74.9
## 3 Kuwait 2015 Developing 74.7
## 4 Timor-Leste 2002 Developing 62.0
## 5 Maldives 2007 Developing 75.4
## 6 Saint Lucia 2000 Developing 71.6
## 7 Paraguay 2015 Developing 74.0
## 8 El Salvador 2003 Developing 69.9
## 9 Azerbaijan 2001 Developing 67.5
## 10 Micronesia (Federated States of) 2004 Developing 67.7
## Adult.Mortality infant.deaths Alcohol percentage.expenditure Hepatitis.B
## 1 216 0 9.92 86.925540 99
## 2 135 28 3.58 0.000000 87
## 3 81 0 NA 0.000000 99
## 4 261 3 0.48 5.649123 NA
## 5 82 0 1.78 6.491489 98
## 6 183 0 11.69 0.000000 NA
## 7 146 2 NA 0.000000 93
## 8 29 3 3.10 400.134297 94
## 9 151 8 0.51 4.104190 NA
## 10 179 0 2.02 0.000000 8
## Measles BMI under.five.deaths Polio Total.expenditure Diphtheria HIV.AIDS
## 1 2 57.0 0 99 6.37 99 0.1
## 2 352 12.9 35 93 5.53 93 0.2
## 3 18 71.4 1 99 NA 99 0.1
## 4 0 12.6 4 38 3.89 54 0.1
## 5 20 19.5 0 98 6.64 98 0.1
## 6 0 36.8 0 7 5.53 7 0.4
## 7 0 5.2 3 89 NA 93 0.2
## 8 0 47.8 4 93 7.61 94 0.3
## 9 574 42.6 10 77 4.48 77 0.1
## 10 0 63.2 0 82 1.64 78 0.1
## GDP Population thinness..1.19.years thinness.5.9.years
## 1 7558.74260 2238799 2.5 2.5
## 2 NA NA 14.7 15.7
## 3 28975.41800 NA 3.5 3.4
## 4 48.61552 923825 12.1 12.1
## 5 52.86228 349 14.3 14.4
## 6 NA NA 4.5 4.5
## 7 419.36772 6639119 2.0 1.9
## 8 2519.73739 5971535 2.0 1.9
## 9 73.68384 81112 3.1 3.1
## 10 NA NA 0.2 0.2
## Income.composition.of.resources Schooling
## 1 0.791 15.9
## 2 0.633 11.6
## 3 0.799 13.3
## 4 0.475 9.8
## 5 0.632 11.9
## 6 0.000 12.8
## 7 0.692 12.3
## 8 0.628 12.0
## 9 0.642 10.4
## 10 0.616 10.5
No. <- c(1:22)
Variabel <- c("Country",
"Year",
"Status",
"Life expectancy",
"Adult Mortality",
"infant deaths",
"Alcohol",
"percentage expenditure",
"Hepatitis B",
"Measles",
"BMI",
"under-five deaths",
"Polio",
"Total expenditure",
"Diphtheria",
"HIV/AIDS",
"GDP",
"Population",
"thinness 1-19 years",
"thinness 5-9 years",
"Income composition of resources",
"Schooling")
Deskripsi <- c("Negara",
"Tahun",
"Status Berkembang",
"Harapan Hidup dalam usia",
"Tingkat kematian orang dewasa per 1000 populasi",
"Jumlah Kematian Bayi per 1000 penduduk",
"Alkohol, tercatat per kapita (15+) konsumsi (dalam liter alkohol murni)",
"Pengeluaran untuk kesehatan sebagai persentase dari Produk Domestik Bruto per kapita (%)",
"Cakupan imunisasi hepatitis B (HepB) di kalangan anak berusia 1 tahun (%)",
"Campak - jumlah kasus yang dilaporkan per 1000 penduduk",
"Indeks Massa Tubuh Rata-rata seluruh populasi",
"Jumlah kematian di bawah lima tahun per 1000 penduduk",
"Cakupan imunisasi polio (Pol3) pada anak usia 1 tahun (%)",
"Pengeluaran pemerintah umum untuk kesehatan sebagai persentase dari total pengeluaran pemerintah (%)",
"Cakupan imunisasi difteri tetanus toksoid dan pertusis (DTP3) pada anak usia 1 tahun (%)",
"Kematian per 1.000 kelahiran hidup HIV/AIDS (0-4 tahun)",
"Produk Domestik Bruto per kapita (dalam USD)",
"Populasi negara",
"Prevalensi kurus di antara anak-anak dan remaja untuk usia 10 hingga 19 tahun (%)",
"Prevalensi kurus di antara anak-anak untuk Usia 5 hingga 9 (%)",
"Indeks Pembangunan Manusia dalam hal komposisi pendapatan sumber daya (indeks mulai dari 0 hingga 1)",
"Jumlah tahun Sekolah(tahun)"
)
data.frame(No., Variabel, Deskripsi) %>%
kbl() %>%
kable_styling(bootstrap_options = c("bordered", "stripped", "hover"),
full_width = T)
| No. | Variabel | Deskripsi |
|---|---|---|
| 1 | Country | Negara |
| 2 | Year | Tahun |
| 3 | Status | Status Berkembang |
| 4 | Life expectancy | Harapan Hidup dalam usia |
| 5 | Adult Mortality | Tingkat kematian orang dewasa per 1000 populasi |
| 6 | infant deaths | Jumlah Kematian Bayi per 1000 penduduk |
| 7 | Alcohol | Alkohol, tercatat per kapita (15+) konsumsi (dalam liter alkohol murni) |
| 8 | percentage expenditure | Pengeluaran untuk kesehatan sebagai persentase dari Produk Domestik Bruto per kapita (%) |
| 9 | Hepatitis B | Cakupan imunisasi hepatitis B (HepB) di kalangan anak berusia 1 tahun (%) |
| 10 | Measles | Campak - jumlah kasus yang dilaporkan per 1000 penduduk |
| 11 | BMI | Indeks Massa Tubuh Rata-rata seluruh populasi |
| 12 | under-five deaths | Jumlah kematian di bawah lima tahun per 1000 penduduk |
| 13 | Polio | Cakupan imunisasi polio (Pol3) pada anak usia 1 tahun (%) |
| 14 | Total expenditure | Pengeluaran pemerintah umum untuk kesehatan sebagai persentase dari total pengeluaran pemerintah (%) |
| 15 | Diphtheria | Cakupan imunisasi difteri tetanus toksoid dan pertusis (DTP3) pada anak usia 1 tahun (%) |
| 16 | HIV/AIDS | Kematian per 1.000 kelahiran hidup HIV/AIDS (0-4 tahun) |
| 17 | GDP | Produk Domestik Bruto per kapita (dalam USD) |
| 18 | Population | Populasi negara |
| 19 | thinness 1-19 years | Prevalensi kurus di antara anak-anak dan remaja untuk usia 10 hingga 19 tahun (%) |
| 20 | thinness 5-9 years | Prevalensi kurus di antara anak-anak untuk Usia 5 hingga 9 (%) |
| 21 | Income composition of resources | Indeks Pembangunan Manusia dalam hal komposisi pendapatan sumber daya (indeks mulai dari 0 hingga 1) |
| 22 | Schooling | Jumlah tahun Sekolah(tahun) |
Tahap ini bertujuan untuk memilih hanya variabel yang bertipe numerik dan menghapus variabel target (Life.expectancy) dari dataset.
df_numeric <- life %>%
select(where(is.numeric)) %>%
select(-Life.expectancy)
#cek hasil
colnames(df_numeric)
## [1] "Year" "Adult.Mortality"
## [3] "infant.deaths" "Alcohol"
## [5] "percentage.expenditure" "Hepatitis.B"
## [7] "Measles" "BMI"
## [9] "under.five.deaths" "Polio"
## [11] "Total.expenditure" "Diphtheria"
## [13] "HIV.AIDS" "GDP"
## [15] "Population" "thinness..1.19.years"
## [17] "thinness.5.9.years" "Income.composition.of.resources"
## [19] "Schooling"
library(psych)
describe(df_numeric)
## vars n mean sd median
## Year 1 2938 2007.52 4.61 2008.00
## Adult.Mortality 2 2928 164.80 124.29 144.00
## infant.deaths 3 2938 30.30 117.93 3.00
## Alcohol 4 2744 4.60 4.05 3.76
## percentage.expenditure 5 2938 738.25 1987.91 64.91
## Hepatitis.B 6 2385 80.94 25.07 92.00
## Measles 7 2938 2419.59 11467.27 17.00
## BMI 8 2904 38.32 20.04 43.50
## under.five.deaths 9 2938 42.04 160.45 4.00
## Polio 10 2919 82.55 23.43 93.00
## Total.expenditure 11 2712 5.94 2.50 5.76
## Diphtheria 12 2919 82.32 23.72 93.00
## HIV.AIDS 13 2938 1.74 5.08 0.10
## GDP 14 2490 7483.16 14270.17 1766.95
## Population 15 2286 12753375.12 61012096.51 1386542.00
## thinness..1.19.years 16 2904 4.84 4.42 3.30
## thinness.5.9.years 17 2904 4.87 4.51 3.30
## Income.composition.of.resources 18 2771 0.63 0.21 0.68
## Schooling 19 2775 11.99 3.36 12.30
## trimmed mad min max
## Year 2007.52 5.93 2000.00 2.015000e+03
## Adult.Mortality 150.51 112.68 1.00 7.230000e+02
## infant.deaths 10.20 4.45 0.00 1.800000e+03
## Alcohol 4.23 4.81 0.01 1.787000e+01
## percentage.expenditure 230.74 96.24 0.00 1.947991e+04
## Hepatitis.B 86.89 8.90 1.00 9.900000e+01
## Measles 286.08 25.20 0.00 2.121830e+05
## BMI 39.05 24.17 1.00 8.730000e+01
## under.five.deaths 14.15 5.93 0.00 2.500000e+03
## Polio 88.05 8.90 3.00 9.900000e+01
## Total.expenditure 5.85 2.36 0.37 1.760000e+01
## Diphtheria 87.99 8.90 2.00 9.900000e+01
## HIV.AIDS 0.54 0.00 0.10 5.060000e+01
## GDP 3751.73 2360.98 1.68 1.191727e+05
## Population 3953693.58 2012347.06 34.00 1.293859e+09
## thinness..1.19.years 4.14 3.41 0.10 2.770000e+01
## thinness.5.9.years 4.15 3.41 0.10 2.860000e+01
## Income.composition.of.resources 0.65 0.19 0.00 9.500000e-01
## Schooling 12.17 3.11 0.00 2.070000e+01
## range skew kurtosis se
## Year 1.500000e+01 -0.01 -1.21 0.09
## Adult.Mortality 7.220000e+02 1.17 1.74 2.30
## infant.deaths 1.800000e+03 9.78 115.76 2.18
## Alcohol 1.786000e+01 0.59 -0.81 0.08
## percentage.expenditure 1.947991e+04 4.65 26.51 36.68
## Hepatitis.B 9.800000e+01 -1.93 2.76 0.51
## Measles 2.121830e+05 9.43 114.58 211.56
## BMI 8.630000e+01 -0.22 -1.29 0.37
## under.five.deaths 2.500000e+03 9.49 109.49 2.96
## Polio 9.600000e+01 -2.10 3.76 0.43
## Total.expenditure 1.723000e+01 0.62 1.15 0.05
## Diphtheria 9.700000e+01 -2.07 3.55 0.44
## HIV.AIDS 5.050000e+01 5.39 34.80 0.09
## GDP 1.191711e+05 3.20 12.29 285.98
## Population 1.293859e+09 15.90 297.09 1276079.80
## thinness..1.19.years 2.760000e+01 1.71 3.96 0.08
## thinness.5.9.years 2.850000e+01 1.78 4.34 0.08
## Income.composition.of.resources 9.500000e-01 -1.14 1.38 0.00
## Schooling 2.070000e+01 -0.60 0.88 0.06
Berdasarkan hasil pemeriksaan statistik deskriptif, terlihat bahwa rentang (range) antar variabel sangat berbeda. Variabel GDP memiliki nilai hingga 119.000, sedangkan Schooling hanya berada pada rentang 0–20, Income composition pada rentang 0–1, dan HIV.AIDS pada rentang 0–50. Perbedaan skala yang sangat besar ini menunjukkan bahwa setiap variabel memiliki satuan dan besaran yang tidak sebanding.
Dalam analisis PCA yang berbasis kovarians, perbedaan skala seperti ini dapat menyebabkan hasil yang bias. Variabel dengan nilai paling besar, seperti GDP, akan mendominasi pembentukan komponen utama karena memiliki varians yang lebih tinggi dibanding variabel lain. Akibatnya, struktur komponen yang terbentuk tidak sepenuhnya merepresentasikan pola hubungan antarvariabel secara proporsional.
Oleh karena itu, sebelum dilakukan PCA, proses standardisasi menggunakan metode Z-score scaling wajib dilakukan. Standardisasi bertujuan untuk menyamakan skala seluruh variabel sehingga masing-masing memiliki rata-rata 0 dan standar deviasi 1, sehingga setiap variabel dapat memberikan kontribusi yang seimbang dalam analisis.
df_long <- df_numeric %>%
pivot_longer(cols = everything(),
names_to = "Variable",
values_to = "Value")
ggplot(df_long, aes(x = Value)) +
geom_histogram(bins = 30, fill = "skyblue", color = "black") +
facet_wrap(~Variable, scales = "free") +
theme_minimal() +
labs(title = "Histogram Distribusi Variabel")
## Warning: Removed 2553 rows containing non-finite outside the scale range
## (`stat_bin()`).
Beberapa variabel seperti GDP, HIV.AIDS, infant.deaths, under.five.deaths, dan Adult.Mortality menunjukkan skewness tinggi atau distribusi yang miring ke kanan. Hal ini terlihat dari nilai mean yang jauh lebih besar dibanding median, rentang data yang sangat lebar, serta bentuk histogram yang menumpuk di kiri dengan ekor panjang di kanan. Kondisi ini menandakan adanya nilai ekstrem yang menarik rata-rata menjadi lebih tinggi.
Dalam analisis PCA dan Factor Analysis, distribusi yang tidak normal dapat memengaruhi hasil karena kedua metode tersebut sensitif terhadap varians yang besar. Variabel dengan skewness tinggi berpotensi mendominasi pembentukan komponen atau faktor. Oleh karena itu, perlu melakukan transformasi pada variabel-variabel tersebut agar distribusi menjadi lebih mendekati normal dan hasil analisis lebih stabil.
ggplot(df_long, aes(x = "", y = Value, fill = Variable)) +
geom_boxplot(color = "black") +
facet_wrap(~Variable, scales = "free") +
theme_classic() +
theme(
legend.position = "none",
strip.background = element_rect(fill = "grey"),
strip.text = element_text(colour = "black", face = "bold", size = 8),
axis.text.x = element_blank(),
axis.ticks.x = element_blank()
)
## Warning: Removed 2553 rows containing non-finite outside the scale range
## (`stat_boxplot()`).
Berdasarkan hasil boxplot, terlihat bahwa variabel GDP, HIV.AIDS, infant.deaths, under.five.deaths, dan Adult.Mortality memiliki cukup banyak outlier ekstrem. Nilai-nilai tersebut berada jauh di atas batas whisker, yang menunjukkan adanya perbedaan yang sangat besar antarnegara pada variabel-variabel tersebut.
Keberadaan outlier ini dapat memengaruhi analisis lanjutan, terutama pada metode seperti PCA yang berbasis kovarians. Outlier dapat membuat varians menjadi sangat besar sehingga komponen utama yang terbentuk berpotensi bias dan lebih merepresentasikan nilai ekstrem dibanding pola umum data.
Oleh karena itu, perlu dilakukan pengecekan menggunakan metode IQR untuk memastikan tingkat keparahan outlier. Penanganan yang dapat dipertimbangkan antara lain melakukan winsorizing atau transformasi log untuk mengurangi efek ekstrem. Namun, karena data ini bersumber dari WHO dan merepresentasikan kondisi nyata tiap negara, outlier umumnya tetap dipertahankan dan hanya dilakukan transformasi agar distribusi lebih stabil tanpa menghilangkan informasi penting.
cor_matrix <- cor(df_numeric, use = "complete.obs")
corrplot(cor_matrix,
method = "color",
type = "lower",
tl.col = "black",
tl.srt = 45)
Berdasarkan hasil matriks korelasi, terlihat adanya hubungan yang cukup kuat antar beberapa variabel. Korelasi sangat tinggi ditemukan antara infant.deaths dan under.five.deaths. Selain itu, variabel imunisasi seperti Diphtheria, Polio, dan Hepatitis.B juga menunjukkan korelasi yang kuat satu sama lain. Hubungan yang cukup erat juga terlihat antara Schooling dan Income.composition.of.resources. Hal ini menunjukkan adanya keterkaitan konsep yang serupa di antara variabel-variabel tersebut.
Dalam konteks PCA, kondisi ini justru baik karena tujuan utama PCA adalah mereduksi dimensi dengan menggabungkan variabel yang saling berkorelasi tinggi ke dalam satu komponen utama. Namun, untuk analisis Faktor (FA), korelasi ini perlu diuji lebih lanjut untuk memastikan kelayakan data.
Sebelum melakukan FA, perlu dilakukan uji KMO (Kaiser-Meyer-Olkin) dan uji Bartlett. Nilai KMO yang lebih dari 0,5 menunjukkan bahwa data cukup memadai untuk dianalisis menggunakan FA, sedangkan uji Bartlett dengan p-value < 0,05 menunjukkan bahwa matriks korelasi signifikan dan variabel-variabel memang saling berhubungan. Jika korelasi antarvariabel terlalu rendah, maka analisis Faktor menjadi kurang tepat untuk digunakan.
data <- df_numeric %>%
select(-Year,
-percentage.expenditure,
-Population,
-Measles,
-thinness.5.9.years)
colnames(data)
## [1] "Adult.Mortality" "infant.deaths"
## [3] "Alcohol" "Hepatitis.B"
## [5] "BMI" "under.five.deaths"
## [7] "Polio" "Total.expenditure"
## [9] "Diphtheria" "HIV.AIDS"
## [11] "GDP" "thinness..1.19.years"
## [13] "Income.composition.of.resources" "Schooling"
Dalam penelitian ini, beberapa variabel dikeluarkan dari analisis PCA dan Factor Analysis berdasarkan pertimbangan. Variabel Life Expectancy tidak disertakan karena berperan sebagai variabel target (dependen) yang akan dijelaskan oleh faktor-faktor hasil reduksi, sehingga tidak tepat dimasukkan dalam pembentukan komponen. Variabel Year juga dikeluarkan karena hanya merepresentasikan penanda waktu dan bukan indikator yang secara langsung mencerminkan kondisi kesehatan, sosial, maupun ekonomi, sehingga tidak relevan untuk pembentukan struktur faktor laten. Variabel Population dihapus karena memiliki distribusi sangat menceng dan variansi yang jauh lebih besar dibanding variabel lain, sehingga berpotensi mendominasi pembentukan komponen tanpa merepresentasikan indikator kualitas kesehatan secara langsung. Variabel Measles tidak digunakan karena menunjukkan korelasi yang relatif lemah terhadap kelompok variabel imunisasi lainnya dan berpotensi menimbulkan noise dalam struktur faktor. Sementara itu, salah satu variabel thinness dihapus karena memiliki korelasi yang sangat tinggi dengan variabel thinness lainnya, sehingga mengandung informasi yang redundan dan tidak menambah variasi baru dalam model.
colSums(is.na(data))
## Adult.Mortality infant.deaths
## 10 0
## Alcohol Hepatitis.B
## 194 553
## BMI under.five.deaths
## 34 0
## Polio Total.expenditure
## 19 226
## Diphtheria HIV.AIDS
## 19 0
## GDP thinness..1.19.years
## 448 34
## Income.composition.of.resources Schooling
## 167 163
Berdasarkan hasil pengecekan missing value, masih terdapat beberapa variabel yang memiliki missing values, pada Adult.Mortality, Hepatitis.B, Polio, GDP, Total.expenditure, Alcohol, Income.composition.of.resources, Diphtheria, thinness..1.19.years dan Schooling. Oleh karena itu, dilakukan imputasi menggunakan nilai mean agar seluruh nilai NA tergantikan dan dataset siap digunakan untuk analisis lebih lanjut seperti PCA atau FA.
Penanganan
# Imputasi dengan mean (umum untuk PCA/FA)
data <- data %>%
mutate(across(everything(), ~ifelse(is.na(.), mean(., na.rm = TRUE), .)))
colSums(is.na(data))
## Adult.Mortality infant.deaths
## 0 0
## Alcohol Hepatitis.B
## 0 0
## BMI under.five.deaths
## 0 0
## Polio Total.expenditure
## 0 0
## Diphtheria HIV.AIDS
## 0 0
## GDP thinness..1.19.years
## 0 0
## Income.composition.of.resources Schooling
## 0 0
Pada tahap ini dilakukan transformasi logaritma terhadap beberapa variabel yang sebelumnya teridentifikasi memiliki skewness tinggi, seperti Adult Mortality, infant deaths, under five deaths, HIV/AIDS, dan GDP. Transformasi ini bertujuan untuk mengurangi kemencengan distribusi (skewness) dan menstabilkan varians agar data menjadi lebih mendekati distribusi normal. Dengan distribusi yang lebih seimbang, hasil analisis lanjutan seperti PCA dan Factor Analysis dapat menjadi lebih stabil dan tidak terlalu dipengaruhi oleh nilai ekstrem.
data_transformed <- data %>%
mutate(
Adult.Mortality = log1p(Adult.Mortality),
infant.deaths = log1p(infant.deaths),
under.five.deaths = log1p(under.five.deaths),
HIV.AIDS = log1p(HIV.AIDS),
GDP = log1p(GDP)
)
Pada tahap ini dilakukan proses standardisasi terhadap seluruh variabel yang telah ditransformasi. Standardisasi bertujuan untuk menyamakan skala setiap variabel sehingga memiliki rata-rata mendekati 0 dan standar deviasi sebesar 1. Langkah ini penting karena metode seperti PCA dan Factor Analysis sensitif terhadap perbedaan skala variabel.
Setelah proses standardisasi, dilakukan pengecekan ringkasan data untuk memastikan bahwa nilai rata-rata sudah mendekati nol dan rentang data menjadi lebih seimbang. Hal ini menunjukkan bahwa data telah siap digunakan untuk analisis lanjutan tanpa adanya dominasi variabel dengan skala yang lebih besar.
data_scaled <- scale(data_transformed)
data_scaled <- as.data.frame(data_scaled)
summary(data_scaled)
## Adult.Mortality infant.deaths Alcohol Hepatitis.B
## Min. :-3.8993 Min. :-1.0635 Min. :-1.1728 Min. :-3.5392
## 1st Qu.:-0.3982 1st Qu.:-1.0635 1st Qu.:-0.8963 1st Qu.: 0.0000
## Median : 0.2387 Median :-0.2299 Median :-0.1131 Median : 0.2683
## Mean : 0.0000 Mean : 0.0000 Mean : 0.0000 Mean : 0.0000
## 3rd Qu.: 0.6759 3rd Qu.: 0.8219 3rd Qu.: 0.7117 3rd Qu.: 0.6667
## Max. : 1.7921 Max. : 3.4440 Max. : 3.3877 Max. : 0.7996
## BMI under.five.deaths Polio Total.expenditure
## Min. :-1.8728 Min. :-1.0888 Min. :-3.4065 Min. :-2.3198
## 1st Qu.:-0.9495 1st Qu.:-1.0888 1st Qu.:-0.1949 1st Qu.:-0.6533
## Median : 0.2348 Median :-0.1856 Median : 0.4475 Median : 0.0000
## Mean : 0.0000 Mean : 0.0000 Mean : 0.0000 Mean : 0.0000
## 3rd Qu.: 0.8922 3rd Qu.: 0.8010 3rd Qu.: 0.6188 3rd Qu.: 0.5799
## Max. : 2.4578 Max. : 3.3025 Max. : 0.7044 Max. : 4.8585
## Diphtheria HIV.AIDS GDP thinness..1.19.years
## Min. :-3.3978 Min. :-0.5419 Min. :-3.7247 Min. :-1.0785
## 1st Qu.:-0.1829 1st Qu.:-0.5419 1st Qu.:-0.7365 1st Qu.:-0.7372
## Median : 0.4516 Median :-0.5419 Median : 0.1963 Median :-0.3276
## Mean : 0.0000 Mean : 0.0000 Mean : 0.0000 Mean : 0.0000
## 3rd Qu.: 0.6208 3rd Qu.: 0.1011 3rd Qu.: 0.6827 3rd Qu.: 0.5143
## Max. : 0.7054 Max. : 4.4828 Max. : 2.2202 Max. : 5.2020
## Income.composition.of.resources Schooling
## Min. :-3.0639 Min. :-3.67383
## 1st Qu.:-0.6020 1st Qu.:-0.51856
## Median : 0.1682 Median : 0.03284
## Mean : 0.0000 Mean : 0.00000
## 3rd Qu.: 0.7052 3rd Qu.: 0.64551
## Max. : 1.5645 Max. : 2.66734
# KMO Test
KMO(data_scaled)
## Kaiser-Meyer-Olkin factor adequacy
## Call: KMO(r = data_scaled)
## Overall MSA = 0.83
## MSA for each item =
## Adult.Mortality infant.deaths
## 0.95 0.72
## Alcohol Hepatitis.B
## 0.90 0.83
## BMI under.five.deaths
## 0.93 0.72
## Polio Total.expenditure
## 0.85 0.86
## Diphtheria HIV.AIDS
## 0.81 0.85
## GDP thinness..1.19.years
## 0.96 0.92
## Income.composition.of.resources Schooling
## 0.85 0.86
Hasil uji Kaiser-Meyer-Olkin (KMO) menunjukkan nilai sebesar 0,83 yang termasuk dalam kategori very good, sehingga data dinyatakan memadai untuk dilakukan analisis faktor. Seluruh variabel memiliki nilai MSA di atas 0,70 yang berarti tidak ada variabel yang perlu dieliminasi.
#Bartlett Test
cortest.bartlett(cor_matrix, n = nrow(data_scaled))
## $chisq
## [1] 46424.4
##
## $p.value
## [1] 0
##
## $df
## [1] 171
Uji Bartlett’s Test of Sphericity menghasilkan nilai chi-square sebesar 46424.4 dengan p-value < 0,001, sehingga matriks korelasi berbeda secara signifikan dari matriks identitas. Hal ini menunjukkan bahwa antar variabel terdapat korelasi yang cukup kuat untuk dilakukan analisis faktor.
library(psych)
describe(data_scaled)
## vars n mean sd median trimmed mad min
## Adult.Mortality 1 2938 0 1 0.24 0.12 0.80 -3.90
## infant.deaths 2 2938 0 1 -0.23 -0.10 1.24 -1.06
## Alcohol 3 2938 0 1 -0.11 -0.09 1.19 -1.17
## Hepatitis.B 4 2938 0 1 0.27 0.23 0.53 -3.54
## BMI 5 2938 0 1 0.23 0.04 1.21 -1.87
## under.five.deaths 6 2938 0 1 -0.19 -0.10 1.34 -1.09
## Polio 7 2938 0 1 0.45 0.23 0.38 -3.41
## Total.expenditure 8 2938 0 1 0.00 -0.04 0.92 -2.32
## Diphtheria 9 2938 0 1 0.45 0.24 0.38 -3.40
## HIV.AIDS 10 2938 0 1 -0.54 -0.25 0.00 -0.54
## GDP 11 2938 0 1 0.20 0.04 0.86 -3.72
## thinness..1.19.years 12 2938 0 1 -0.33 -0.16 0.81 -1.08
## Income.composition.of.resources 13 2938 0 1 0.17 0.10 0.90 -3.06
## Schooling 14 2938 0 1 0.03 0.05 0.86 -3.67
## max range skew kurtosis se
## Adult.Mortality 1.79 5.69 -1.13 1.15 0.02
## infant.deaths 3.44 4.51 0.70 -0.33 0.02
## Alcohol 3.39 4.56 0.61 -0.65 0.02
## Hepatitis.B 0.80 4.34 -2.14 4.09 0.02
## BMI 2.46 4.33 -0.22 -1.27 0.02
## under.five.deaths 3.30 4.39 0.65 -0.51 0.02
## Polio 0.70 4.11 -2.10 3.81 0.02
## Total.expenditure 4.86 7.18 0.64 1.49 0.02
## Diphtheria 0.71 4.10 -2.08 3.59 0.02
## HIV.AIDS 4.48 5.02 2.13 4.07 0.02
## GDP 2.22 5.94 -0.42 -0.20 0.02
## thinness..1.19.years 5.20 6.28 1.72 4.04 0.02
## Income.composition.of.resources 1.56 4.63 -1.18 1.65 0.02
## Schooling 2.67 6.34 -0.62 1.11 0.02
Berdasarkan hasil eksplorasi data, seluruh variabel pada dataset telah melalui proses standarisasi sehingga memiliki nilai rata-rata mendekati nol dan skala yang seragam. Hal ini terlihat dari statistik deskriptif yang menunjukkan mean setiap variabel sebesar 0 dengan median yang juga berada di sekitar nol. Kondisi ini penting karena PCA dan Factor Analysis sensitif terhadap perbedaan skala variabel. Rentang nilai yang cukup lebar pada beberapa variabel seperti HIV.AIDS, thinness..1.19.years, dan Total.expenditure menunjukkan adanya variasi antarnegara, yang justru menjadi dasar kuat dalam pembentukan komponen atau faktor.
data_long <- data_scaled %>%
pivot_longer(cols = everything(),
names_to = "Variable",
values_to = "Value")
ggplot(data_long, aes(x = Value)) +
geom_histogram(fill = "steelblue", color = "white", bins = 30) +
facet_wrap(~Variable, scales = "free") +
theme_minimal()
Distribusi data pada histogram menunjukkan sebagian besar variabel memiliki pola yang relatif mendekati normal, terutama Schooling, Income.composition.of.resources, BMI, dan Total.expenditure. Beberapa variabel seperti infant.deaths, under.five.deaths, dan HIV.AIDS tampak menceng ke kanan, yang mengindikasikan bahwa sebagian besar negara memiliki nilai rendah namun terdapat beberapa negara dengan nilai sangat tinggi. Pola ini masih dapat diterima dalam analisis PCA maupun FA karena data telah distandarisasi.
par(mar = c(10, 4, 4, 2)) # perbesar margin bawah
boxplot(data_scaled,
las = 2, # label vertikal
col = "pink",
main = "Boxplot Semua Variabel",
cex.axis = 0.7, # kecilkan ukuran label
cex.names = 0.7, # kecilkan nama variabel
outline = FALSE) # sembunyikan outlier (opsional)
Boxplot menunjukkan bahwa median setiap variabel berada di sekitar nol, sesuai dengan proses standarisasi. Terdapat beberapa nilai ekstrem pada variabel yang berkaitan dengan kematian dan penyakit, seperti HIV.AIDS dan thinness..1.19.years. Namun, kondisi ini mencerminkan perbedaan nyata antarnegara dan tidak mengganggu kelayakan analisis karena tidak terjadi penyimpangan yang berlebihan.
cor_matrix <- cor(data_scaled)
ggcorrplot(cor_matrix,
method = "square",
type = "upper",
lab = TRUE,
lab_size = 2.5, # angka lebih kecil
tl.cex = 8, # ukuran nama variabel lebih kecil
tl.srt = 45, # rotasi 45 derajat
colors = c("blue", "white", "red"),
title = "Correlation Matrix") +
theme(plot.title = element_text(hjust = 0.5),
plot.margin = margin(10, 20, 10, 20))
## 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.
Matriks korelasi memperlihatkan adanya hubungan yang cukup kuat antarvariabel. Korelasi sangat tinggi terlihat antara infant.deaths dan under.five.deaths, serta antara Schooling dan Income.composition.of.resources. Selain itu, terdapat hubungan positif antara variabel ekonomi dan pendidikan dengan negatif terhadap variabel kematian dan penyakit. Pola ini menunjukkan adanya struktur laten dalam data, yang menjadi dasar utama penggunaan PCA dan Factor Analysis.
pca_result <- prcomp(data_scaled,
center = FALSE,
scale. = FALSE)
summary(pca_result)
## Importance of components:
## PC1 PC2 PC3 PC4 PC5 PC6 PC7
## Standard deviation 2.3509 1.2459 1.05267 1.02213 0.94640 0.84473 0.78977
## Proportion of Variance 0.3948 0.1109 0.07915 0.07463 0.06398 0.05097 0.04455
## Cumulative Proportion 0.3948 0.5056 0.58480 0.65942 0.72340 0.77437 0.81892
## PC8 PC9 PC10 PC11 PC12 PC13 PC14
## Standard deviation 0.77124 0.71745 0.70706 0.64951 0.5587 0.43437 0.05440
## Proportion of Variance 0.04249 0.03677 0.03571 0.03013 0.0223 0.01348 0.00021
## Cumulative Proportion 0.86141 0.89817 0.93388 0.96402 0.9863 0.99979 1.00000
Hasil PCA menunjukkan bahwa komponen utama pertama (PC1) mampu menjelaskan 39,48% variasi data, sedangkan PC2 menjelaskan 11,09%. Secara kumulatif, dua komponen pertama sudah menjelaskan 50,56% variasi total. Jika diambil hingga empat komponen, variasi yang dapat dijelaskan meningkat menjadi 65,94%.
Berdasarkan kriteria eigenvalue > 1 (Kaiser), komponen yang layak dipertahankan adalah PC1 hingga PC4. Hal ini menunjukkan bahwa 14 variabel awal dapat direduksi menjadi sekitar 4 komponen utama tanpa kehilangan informasi yang terlalu besar.
eigenvalues <- pca_result$sdev^2
data.frame(
PC = paste0("PC", 1:length(eigenvalues)),
Eigenvalue = eigenvalues,
Proportion = eigenvalues/sum(eigenvalues),
Cumulative = cumsum(eigenvalues/sum(eigenvalues))
)
## PC Eigenvalue Proportion Cumulative
## 1 PC1 5.526650462 0.3947607473 0.3947607
## 2 PC2 1.552378863 0.1108842045 0.5056450
## 3 PC3 1.108113340 0.0791509528 0.5847959
## 4 PC4 1.044758942 0.0746256387 0.6594215
## 5 PC5 0.895665126 0.0639760805 0.7233976
## 6 PC6 0.713565655 0.0509689753 0.7743666
## 7 PC7 0.623736230 0.0445525879 0.8189192
## 8 PC8 0.594815807 0.0424868434 0.8614060
## 9 PC9 0.514735791 0.0367668422 0.8981729
## 10 PC10 0.499935167 0.0357096548 0.9338825
## 11 PC11 0.421869642 0.0301335458 0.9640161
## 12 PC12 0.312138207 0.0222955862 0.9863117
## 13 PC13 0.188677901 0.0134769929 0.9997887
## 14 PC14 0.002958866 0.0002113476 1.0000000
Berdasarkan hasil PCA, komponen utama pertama (PC1) memiliki eigenvalue sebesar 5,53 dan mampu menjelaskan 39,48% variasi data. Komponen kedua (PC2) menjelaskan 11,09%, sedangkan PC3 dan PC4 masing-masing menjelaskan 7,91% dan 7,46%. Secara kumulatif, empat komponen pertama telah mampu menjelaskan 65,94% variasi total data.
Berdasarkan kriteria Kaiser (eigenvalue > 1), komponen yang dipertahankan adalah PC1 hingga PC4, karena hanya keempat komponen tersebut yang memiliki eigenvalue lebih dari 1. Setelah PC4, nilai eigenvalue berada di bawah 1 sehingga kontribusinya relatif kecil.
fviz_eig(pca_result,
addlabels = TRUE,
ylim = c(0, 50))
## Warning in geom_bar(stat = "identity", fill = barfill, color = barcolor, :
## Ignoring empty aesthetic: `width`.
Penentuan jumlah komponen utama dilakukan menggunakan kriteria Kaiser dan scree plot. Berdasarkan kriteria Kaiser, diperoleh empat komponen dengan nilai eigenvalue lebih besar dari satu sehingga layak dipertahankan. Hasil scree plot juga menunjukkan adanya titik tekukan pada komponen keempat, setelah itu penurunan eigenvalue menjadi relatif landai. Oleh karena itu, jumlah komponen optimal yang digunakan dalam analisis adalah empat komponen utama. Berdasarkan kriteria Kaiser dan proporsi variasi kumulatif sebesar ±65,94%, diputuskan untuk mempertahankan empat komponen utama dalam analisis PCA.
loadings <- pca_result$rotation
round(loadings[,1:4], 4)
## PC1 PC2 PC3 PC4
## Adult.Mortality -0.1895 -0.0544 0.4193 -0.0274
## infant.deaths -0.3326 -0.0633 -0.1156 0.5390
## Alcohol 0.2395 0.2343 0.3504 0.2862
## Hepatitis.B 0.1471 -0.5546 0.1735 -0.0367
## BMI 0.2941 0.1532 -0.0457 -0.0534
## under.five.deaths -0.3397 -0.0611 -0.0949 0.5244
## Polio 0.2472 -0.4710 0.0702 0.1057
## Total.expenditure 0.1360 0.1551 0.5568 0.2460
## Diphtheria 0.2497 -0.5105 0.0906 0.1383
## HIV.AIDS -0.2502 0.0629 0.4496 0.0688
## GDP 0.2678 0.1405 -0.1386 0.2257
## thinness..1.19.years -0.2737 -0.2308 -0.2029 0.1191
## Income.composition.of.resources 0.3193 0.0902 -0.2213 0.3460
## Schooling 0.3455 0.1077 -0.1106 0.2592
Hasil loading PCA menunjukkan bahwa komponen pertama didominasi oleh variabel pendidikan, pendapatan, BMI, dan GDP dengan arah positif, serta variabel mortalitas dan malnutrisi dengan arah negatif. Hal ini menunjukkan bahwa komponen pertama merepresentasikan tingkat kesejahteraan dan kondisi kesehatan umum suatu negara. Komponen kedua didominasi oleh variabel imunisasi seperti Hepatitis B, Polio, dan Diphtheria, sehingga mencerminkan kualitas sistem kesehatan khususnya cakupan vaksinasi. Sementara itu, komponen ketiga berkaitan dengan beban penyakit dan pengeluaran kesehatan, dan komponen keempat terutama menggambarkan tingkat mortalitas anak.
library(factoextra)
library(gridExtra)
##
## Attaching package: 'gridExtra'
## The following object is masked from 'package:dplyr':
##
## combine
p1 <- fviz_pca_var(
pca_result,
axes = c(1, 2),
col.var = "contrib",
gradient.cols = c("blue", "yellow", "violet"),
select.var = list(contrib = 12), # tampilkan yang penting saja
repel = TRUE
)
p2 <- fviz_pca_var(
pca_result,
axes = c(3, 4),
col.var = "contrib",
gradient.cols = c("blue", "yellow", "violet"),
select.var = list(contrib = 12),
repel = TRUE
)
grid.arrange(p1, p2, ncol = 2)
Hasil analisis Principal Component Analysis (PCA) menunjukkan bahwa terbentuk empat komponen utama yang mampu merangkum variasi data variabel kesehatan dan sosial ekonomi. Komponen pertama (PC1) merepresentasikan dimensi tingkat kesejahteraan dan pembangunan suatu negara. Variabel seperti GDP, schooling, income composition of resources, BMI, dan alcohol memiliki kontribusi positif yang besar, sedangkan variabel infant deaths, under-five deaths, HIV/AIDS, dan thinness memiliki arah negatif. Hal ini menunjukkan bahwa nilai PC1 yang tinggi mencerminkan negara dengan kondisi sosial ekonomi dan kesehatan yang lebih baik, sementara nilai rendah menggambarkan negara dengan tingkat kemiskinan dan masalah kesehatan yang lebih tinggi.
Komponen kedua (PC2) menggambarkan perbedaan pola status gizi dan cakupan imunisasi. Variabel seperti alcohol, BMI, dan schooling berkontribusi pada arah positif, sedangkan variabel diphtheria, polio, dan hepatitis B berada pada arah negatif. Hal ini menunjukkan bahwa komponen ini membedakan negara berdasarkan keseimbangan antara kondisi gizi dan tingkat pendidikan dengan keberhasilan program imunisasi.
Komponen ketiga (PC3) merepresentasikan dimensi beban penyakit dan risiko kematian penduduk. Variabel adult mortality, HIV/AIDS, dan total expenditure memberikan kontribusi positif, sedangkan hepatitis B memiliki arah negatif. Komponen ini menunjukkan bahwa semakin tinggi nilai PC3, maka semakin besar tingkat risiko kematian dan tekanan masalah kesehatan dalam suatu negara.
Komponen keempat (PC4) terutama menggambarkan kondisi kesehatan anak. Variabel infant deaths dan under-five deaths memberikan kontribusi paling dominan pada komponen ini, serta didukung oleh variabel income composition of resources dan schooling. Komponen ini menunjukkan bahwa perbedaan nilai PC4 mencerminkan variasi tingkat kesehatan balita dan kualitas kesejahteraan masyarakat.
Factor Analysis (FA) merupakan metode analisis multivariat yang digunakan untuk menyederhanakan banyak variabel menjadi beberapa faktor utama. Faktor yang terbentuk merupakan faktor laten atau faktor tersembunyi yang tidak bisa diukur secara langsung, tetapi dapat dijelaskan melalui variabel-variabel yang ada. Pada penelitian ini, Factor Analysis digunakan untuk mengelompokkan variabel-variabel kesehatan dan sosial ekonomi yang mempengaruhi harapan hidup menjadi beberapa faktor utama sehingga lebih mudah untuk dianalisis.
Sebelum melakukan analisis faktor, data terlebih dahulu distandarisasi. Proses standardisasi dilakukan agar setiap variabel memiliki skala yang sama. Hal ini penting karena variabel dalam dataset memiliki satuan yang berbeda-beda, seperti GDP dalam angka besar, persentase imunisasi dalam persen, dan jumlah kematian dalam angka absolut. Jika tidak distandarisasi, variabel dengan nilai besar akan lebih dominan dibandingkan variabel lainnya.
Sebelum melakukan FA, perlu dipastikan bahwa data memang cocok untuk dianalisis menggunakan metode faktor. Untuk itu digunakan dua pengujian, yaitu uji KMO dan uji Bartlett.
library(psych)
KMO_result <- KMO(data_scaled)
KMO_result
## Kaiser-Meyer-Olkin factor adequacy
## Call: KMO(r = data_scaled)
## Overall MSA = 0.83
## MSA for each item =
## Adult.Mortality infant.deaths
## 0.95 0.72
## Alcohol Hepatitis.B
## 0.90 0.83
## BMI under.five.deaths
## 0.93 0.72
## Polio Total.expenditure
## 0.85 0.86
## Diphtheria HIV.AIDS
## 0.81 0.85
## GDP thinness..1.19.years
## 0.96 0.92
## Income.composition.of.resources Schooling
## 0.85 0.86
Berdasarkan hasil analisis, nilai KMO diperoleh sebesar: KMO = 0,83 Nilai ini termasuk dalam kategori sangat baik, sehingga data dinyatakan memadai untuk dilakukan analisis faktor.
Selain itu, semua variabel memiliki nilai MSA di atas 0,7. Hal ini berarti tidak ada variabel yang perlu dihapus dari analisis faktor karena semuanya sudah cukup baik untuk membentuk faktor.
bartlett_result <- cortest.bartlett(cor(data_scaled), n = nrow(data_scaled))
bartlett_result
## $chisq
## [1] 29370.1
##
## $p.value
## [1] 0
##
## $df
## [1] 91
Hasil uji Bartlett menunjukkan: Chi-square = 29370.1 p-value < 0.000
Uji Bartlett digunakan untuk menguji apakah terdapat korelasi antar variabel. Jika nilai p-value kurang dari 0.05 maka variabel-variabel tersebut memiliki korelasi yang signifikan.
Nilai p-value sebesar 0.000 menunjukkan bahwa terdapat hubungan yang signifikan antar variabel. Hal ini berarti variabel-variabel dalam dataset saling berkaitan dan dapat dikelompokkan menjadi beberapa faktor. Berdasarkan hasil uji Bartlett, dapat disimpulkan bahwa data memenuhi syarat untuk dilakukan Factor Analysis.
Setelah data dinyatakan layak untuk dianalisis, langkah berikutnya adalah menentukan jumlah faktor yang akan digunakan. Penentuan jumlah faktor dilakukan menggunakan metode Parallel Analysis.
fa.parallel(data_scaled,
fm = "ml",
fa = "fa",
main = "Parallel Analysis Scree Plot")
## Parallel analysis suggests that the number of factors = 4 and the number of components = NA
Berdasarkan hasil Parallel Analysis, diperoleh bahwa jumlah faktor yang terbentuk adalah sebanyak 4 faktor. Berdasarkan hasil Parallel Analysis, diperoleh bahwa jumlah faktor yang terbentuk adalah sebanyak 4 faktor.
Setelah jumlah faktor ditentukan, dilakukan proses ekstraksi faktor untuk mendapatkan faktor-faktor utama. Proses ekstraksi dilakukan menggunakan metode Maximum Likelihood dengan rotasi Varimax.
fa_result <- fa(data_scaled,
nfactors = 4,
rotate = "varimax",
fm = "ml",
scores = "regression")
fa_result
## Factor Analysis using method = ml
## Call: fa(r = data_scaled, nfactors = 4, rotate = "varimax", scores = "regression",
## fm = "ml")
## Standardized loadings (pattern matrix) based upon correlation matrix
## ML2 ML1 ML3 ML4 h2 u2 com
## Adult.Mortality -0.37 0.15 -0.10 -0.04 0.17 0.8303 1.5
## infant.deaths -0.31 0.90 -0.19 -0.24 1.00 0.0041 1.5
## Alcohol 0.24 -0.13 0.05 0.72 0.60 0.4031 1.3
## Hepatitis.B 0.05 -0.10 0.55 0.04 0.32 0.6827 1.1
## BMI 0.47 -0.28 0.14 0.26 0.38 0.6185 2.5
## under.five.deaths -0.34 0.89 -0.20 -0.23 1.00 0.0041 1.6
## Polio 0.25 -0.13 0.68 0.13 0.56 0.4361 1.4
## Total.expenditure 0.06 -0.07 0.08 0.38 0.16 0.8402 1.2
## Diphtheria 0.23 -0.08 0.86 0.14 0.82 0.1801 1.2
## HIV.AIDS -0.51 0.21 -0.24 0.05 0.36 0.6370 1.8
## GDP 0.50 -0.18 0.10 0.29 0.38 0.6238 2.0
## thinness..1.19.years -0.32 0.31 -0.08 -0.40 0.37 0.6251 2.9
## Income.composition.of.resources 0.82 -0.07 0.15 0.29 0.79 0.2150 1.3
## Schooling 0.77 -0.18 0.17 0.38 0.80 0.1970 1.7
##
## ML2 ML1 ML3 ML4
## SS loadings 2.63 1.96 1.75 1.36
## Proportion Var 0.19 0.14 0.13 0.10
## Cumulative Var 0.19 0.33 0.45 0.55
## Proportion Explained 0.34 0.26 0.23 0.18
## Cumulative Proportion 0.34 0.60 0.82 1.00
##
## Mean item complexity = 1.7
## Test of the hypothesis that 4 factors are sufficient.
##
## df null model = 91 with the objective function = 10.02 with Chi Square = 29370.1
## df of the model are 41 and the objective function was 0.32
##
## The root mean square of the residuals (RMSR) is 0.03
## The df corrected root mean square of the residuals is 0.05
##
## The harmonic n.obs is 2938 with the empirical chi square 249.91 with prob < 9.1e-32
## The total n.obs was 2938 with Likelihood Chi Square = 947.83 with prob < 4.4e-172
##
## Tucker Lewis Index of factoring reliability = 0.931
## RMSEA index = 0.087 and the 90 % confidence intervals are 0.082 0.092
## BIC = 620.42
## Fit based upon off diagonal values = 0.99
## Measures of factor score adequacy
## ML2 ML1 ML3 ML4
## Correlation of (regression) scores with factors 0.90 0.99 0.91 0.78
## Multiple R square of scores with factors 0.81 0.97 0.83 0.60
## Minimum correlation of possible factor scores 0.61 0.95 0.65 0.21
Metode Maximum Likelihood digunakan untuk mencari faktor yang paling sesuai dengan data, sedangkan rotasi Varimax digunakan untuk memperjelas hubungan antara variabel dan faktor sehingga lebih mudah untuk diinterpretasikan. Hasil ekstraksi menunjukkan bahwa terdapat empat faktor utama yang terbentuk dari variabel-variabel yang ada.
Hasil analisis menunjukkan bahwa setiap faktor memiliki kontribusi yang berbeda dalam menjelaskan variasi data.
communalities <- data.frame(
Variabel = names(fa_result$communality),
Komunalitas = round(fa_result$communality, 4)
)
communalities %>%
arrange(desc(Komunalitas)) %>%
kbl(caption = "Komunalitas Setiap Variabel", row.names = FALSE) %>%
kable_styling(bootstrap_options = c("bordered", "striped", "hover"),
full_width = TRUE)
| Variabel | Komunalitas |
|---|---|
| infant.deaths | 0.9959 |
| under.five.deaths | 0.9959 |
| Diphtheria | 0.8199 |
| Schooling | 0.8030 |
| Income.composition.of.resources | 0.7850 |
| Alcohol | 0.5969 |
| Polio | 0.5639 |
| BMI | 0.3815 |
| GDP | 0.3762 |
| thinness..1.19.years | 0.3749 |
| HIV.AIDS | 0.3630 |
| Hepatitis.B | 0.3173 |
| Adult.Mortality | 0.1697 |
| Total.expenditure | 0.1598 |
Secara keseluruhan, keempat faktor tersebut mampu menjelaskan sekitar 55% variasi data. Hal ini menunjukkan bahwa sebagian besar informasi dalam dataset sudah dapat direpresentasikan oleh keempat faktor tersebut.
### Cetak loadings dengan cutoff 0.3
loadings_fa <- fa_result$loadings
print(loadings_fa, cutoff = 0.3, sort = TRUE)
##
## Loadings:
## ML2 ML1 ML3 ML4
## HIV.AIDS -0.509
## GDP 0.500
## Income.composition.of.resources 0.821
## Schooling 0.772 0.382
## infant.deaths -0.309 0.898
## under.five.deaths -0.337 0.888
## Hepatitis.B 0.550
## Polio 0.682
## Diphtheria 0.860
## Alcohol 0.720
## Adult.Mortality -0.368
## BMI 0.468
## Total.expenditure 0.380
## thinness..1.19.years -0.324 0.315 -0.405
##
## ML2 ML1 ML3 ML4
## SS loadings 2.630 1.965 1.751 1.358
## Proportion Var 0.188 0.140 0.125 0.097
## Cumulative Var 0.188 0.328 0.453 0.550
### Tabel loadings lengkap
loadings_matrix <- as.data.frame(unclass(fa_result$loadings))
colnames(loadings_matrix) <- paste0("Faktor ", 1:4)
loadings_matrix %>%
round(4) %>%
kbl(caption = "Factor Loadings (Rotasi Varimax)") %>%
kable_styling(bootstrap_options = c("bordered", "striped", "hover"),
full_width = TRUE) %>%
row_spec(0, bold = TRUE, background = "#4472C4", color = "white")
| Faktor 1 | Faktor 2 | Faktor 3 | Faktor 4 | |
|---|---|---|---|---|
| Adult.Mortality | -0.3676 | 0.1484 | -0.1043 | -0.0408 |
| infant.deaths | -0.3094 | 0.8981 | -0.1950 | -0.2357 |
| Alcohol | 0.2407 | -0.1306 | 0.0537 | 0.7204 |
| Hepatitis.B | 0.0546 | -0.1035 | 0.5499 | 0.0351 |
| BMI | 0.4683 | -0.2759 | 0.1373 | 0.2592 |
| under.five.deaths | -0.3367 | 0.8876 | -0.2039 | -0.2305 |
| Polio | 0.2523 | -0.1329 | 0.6821 | 0.1313 |
| Total.expenditure | 0.0606 | -0.0714 | 0.0812 | 0.3800 |
| Diphtheria | 0.2307 | -0.0777 | 0.8602 | 0.1435 |
| HIV.AIDS | -0.5091 | 0.2137 | -0.2365 | 0.0464 |
| GDP | 0.5001 | -0.1803 | 0.0981 | 0.2897 |
| thinness..1.19.years | -0.3241 | 0.3150 | -0.0818 | -0.4049 |
| Income.composition.of.resources | 0.8212 | -0.0714 | 0.1547 | 0.2855 |
| Schooling | 0.7719 | -0.1821 | 0.1672 | 0.3823 |
Factor loading menunjukkan seberapa besar hubungan antara variabel dengan faktor. Nilai loading berkisar antara -1 sampai 1. Semakin besar nilai loading maka semakin kuat hubungan variabel dengan faktor tersebut.
Nilai loading yang dianggap kuat biasanya lebih besar dari 0.5 atau lebih kecil dari -0.5.Variabel yang memiliki loading besar pada faktor yang sama menunjukkan bahwa variabel tersebut memiliki hubungan yang erat dan mewakili konsep yang sama.
Interpretasi faktor dilakukan dengan melihat variabel yang memiliki loading terbesar pada setiap faktor. a. Faktor 1 (Kesejahteraan) Faktor pertama memiliki loading tinggi pada variabel: Income composition, Schooling, GDP, BMI Serta memiliki loading negatif pada: HIV/AIDS, Adult Mortality
Faktor ini menggambarkan tingkat kesejahteraan suatu negara. Negara dengan nilai faktor yang tinggi biasanya memiliki kondisi ekonomi dan pendidikan yang lebih baik serta tingkat kematian yang lebih rendah. Sebaliknya, negara dengan nilai faktor yang rendah biasanya memiliki kondisi ekonomi yang kurang baik serta tingkat penyakit yang lebih tinggi.
Faktor ini menggambarkan kondisi kesehatan anak-anak dalam suatu negara. Negara dengan nilai faktor yang tinggi biasanya memiliki tingkat kematian bayi dan balita yang tinggi. Sebaliknya, negara dengan nilai faktor yang rendah memiliki kondisi kesehatan anak yang lebih baik.
Faktor ini menggambarkan tingkat keberhasilan program imunisasi dalam suatu negara. Negara dengan nilai faktor yang tinggi memiliki tingkat imunisasi yang baik sehingga lebih terlindungi dari penyakit menular.
Faktor ini menggambarkan pola hidup masyarakat serta pengeluaran kesehatan. Faktor ini menunjukkan bahwa pola hidup juga berpengaruh terhadap kondisi kesehatan masyarakat.
Heatmap factor loadings digunakan untuk melihat hubungan antara variabel dengan faktor dalam bentuk warna. Heatmap ini membantu memahami hasil Factor Analysis dengan lebih cepat karena variabel yang memiliki pengaruh besar terhadap suatu faktor akan terlihat lebih jelas melalui perbedaan warna.
loadings_df <- as.data.frame(unclass(fa_result$loadings))
colnames(loadings_df) <- paste0("F", 1:4)
loadings_df$Variabel <- rownames(loadings_df)
loadings_long <- loadings_df %>%
pivot_longer(cols = starts_with("F"),
names_to = "Faktor",
values_to = "Loading")
ggplot(loadings_long, aes(x = Faktor, y = Variabel, fill = Loading)) +
geom_tile(color = "white") +
geom_text(aes(label = round(Loading, 2)), size = 3) +
scale_fill_gradient2(low = "blue", mid = "white", high = "red",
midpoint = 0, limits = c(-1, 1)) +
theme_minimal() +
labs(title = "Heatmap Factor Loadings (Rotasi Varimax)",
x = "Faktor", y = "Variabel", fill = "Loading") +
theme(axis.text.y = element_text(size = 9),
plot.title = element_text(hjust = 0.5, face = "bold"))
Warna yang muncul menunjukkan besar kecilnya nilai factor loading.
Semakin pekat warnanya, semakin besar pengaruh variabel tersebut
terhadap faktor. Sebaliknya, warna yang lebih pucat menunjukkan bahwa
variabel tersebut tidak terlalu berpengaruh pada faktor tersebut.
Berdasarkan heatmap pada hasil analisis, terlihat bahwa beberapa
variabel memiliki warna yang sangat kuat pada faktor tertentu. Misalnya,
variabel seperti Income composition dan Schooling terlihat dominan pada
Faktor 1. Hal ini menunjukkan bahwa kedua variabel tersebut memiliki
pengaruh besar terhadap Faktor 1 dan menjadi bagian utama dari faktor
tersebut. Dengan melihat heatmap, dapat disimpulkan bahwa
variabel-variabel yang memiliki warna kuat pada faktor yang sama
menunjukkan bahwa variabel tersebut memiliki hubungan yang erat dan
mewakili konsep yang sama.
Diagram faktor digunakan untuk menggambarkan hubungan antara variabel dengan faktor dalam bentuk visual. Diagram ini menunjukkan faktor sebagai pusat dan variabel-variabel yang terhubung dengan faktor tersebut.
fa.diagram(fa_result,
main = "Factor Analysis Diagram",
cut = 0.3,
digits = 2,
cex = 0.8)
Pada diagram faktor terlihat bahwa setiap faktor memiliki beberapa
variabel yang terhubung dengan garis. Garis yang lebih tebal menunjukkan
bahwa variabel tersebut memiliki pengaruh yang lebih kuat terhadap
faktor. Berdasarkan diagram faktor pada hasil analisis, terlihat bahwa
Faktor 1 memiliki hubungan kuat dengan variabel seperti Income
composition, Schooling, dan GDP. Hal ini menunjukkan bahwa Faktor 1
berkaitan dengan kondisi kesejahteraan suatu negara. Faktor 2 terlihat
memiliki hubungan kuat dengan variabel infant deaths dan under-five
deaths. Hal ini menunjukkan bahwa Faktor 2 berkaitan dengan kondisi
kesehatan anak. Faktor 3 memiliki hubungan kuat dengan variabel
imunisasi seperti Polio, Diphtheria, dan Hepatitis B. Hal ini
menunjukkan bahwa Faktor 3 berkaitan dengan program imunisasi. Diagram
faktor membantu memperjelas struktur faktor yang terbentuk karena
hubungan antar variabel dapat langsung terlihat tanpa harus membaca
tabel angka.
Biplot faktor digunakan untuk menampilkan hubungan antar variabel dan faktor dalam bentuk grafik dua dimensi. Pada biplot, variabel biasanya ditampilkan dalam bentuk panah yang menunjukkan arah dan kekuatan hubungan dengan faktor.
loadings_plot <- as.data.frame(unclass(fa_result$loadings))
colnames(loadings_plot) <- paste0("F", 1:4)
loadings_plot$Variable <- rownames(loadings_plot)
# F1 vs F2
p_f1f2 <- ggplot(loadings_plot, aes(x = F1, y = F2, label = Variable)) +
geom_point(color = "steelblue", size = 3) +
geom_text(vjust = -0.6, size = 3) +
geom_hline(yintercept = 0, linetype = "dashed", color = "gray50") +
geom_vline(xintercept = 0, linetype = "dashed", color = "gray50") +
labs(title = "Biplot Faktor 1 vs Faktor 2", x = "Faktor 1", y = "Faktor 2") +
theme_minimal() +
theme(plot.title = element_text(hjust = 0.5, face = "bold"))
# F3 vs F4
p_f3f4 <- ggplot(loadings_plot, aes(x = F3, y = F4, label = Variable)) +
geom_point(color = "darkorange", size = 3) +
geom_text(vjust = -0.6, size = 3) +
geom_hline(yintercept = 0, linetype = "dashed", color = "gray50") +
geom_vline(xintercept = 0, linetype = "dashed", color = "gray50") +
labs(title = "Biplot Faktor 3 vs Faktor 4", x = "Faktor 3", y = "Faktor 4") +
theme_minimal() +
theme(plot.title = element_text(hjust = 0.5, face = "bold"))
grid.arrange(p_f1f2, p_f3f4, ncol = 2)
Pada biplot hasil analisis terlihat bahwa variabel seperti Schooling dan
Income composition berada berdekatan. Hal ini menunjukkan bahwa kedua
variabel tersebut memiliki hubungan yang kuat dan kemungkinan berada
dalam faktor yang sama, yaitu faktor kesejahteraan.
Sementara itu, variabel seperti infant deaths terlihat berlawanan arah dengan variabel kesejahteraan. Hal ini menunjukkan bahwa negara dengan kesejahteraan tinggi biasanya memiliki tingkat kematian bayi yang lebih rendah. Biplot membantu memahami hubungan antar variabel sekaligus hubungan variabel dengan faktor dalam satu grafik.
Proporsi varians menunjukkan seberapa besar masing-masing faktor mampu menjelaskan variasi dalam data. Semakin besar proporsi varians suatu faktor, maka semakin penting faktor tersebut dalam menjelaskan struktur data.
var_explained <- data.frame(
Faktor = paste0("Faktor ", 1:4),
SS_Loadings = round(fa_result$Vaccounted[1, 1:4], 4),
Proporsi_Varians = round(fa_result$Vaccounted[2, 1:4], 4),
Kumulatif = round(cumsum(fa_result$Vaccounted[2, 1:4]), 4)
)
var_explained %>%
kbl(caption = "Proporsi Varians yang Dijelaskan oleh Setiap Faktor",
col.names = c("Faktor", "SS Loadings", "Proporsi Varians", "Kumulatif")) %>%
kable_styling(bootstrap_options = c("bordered", "striped", "hover"),
full_width = TRUE)
| Faktor | SS Loadings | Proporsi Varians | Kumulatif | |
|---|---|---|---|---|
| ML2 | Faktor 1 | 2.6296 | 0.1878 | 0.1878 |
| ML1 | Faktor 2 | 1.9648 | 0.1403 | 0.3282 |
| ML3 | Faktor 3 | 1.7507 | 0.1250 | 0.4532 |
| ML4 | Faktor 4 | 1.3576 | 0.0970 | 0.5502 |
# Grafik bar + garis kumulatif
ggplot(var_explained, aes(x = Faktor, y = Proporsi_Varians * 100)) +
geom_col(fill = "steelblue", color = "black", width = 0.6) +
geom_line(aes(y = Kumulatif * 100, group = 1),
color = "red", size = 1, linetype = "dashed") +
geom_point(aes(y = Kumulatif * 100), color = "red", size = 3) +
geom_text(aes(label = paste0(round(Proporsi_Varians * 100, 1), "%")),
vjust = -0.5, size = 3.5) +
scale_y_continuous(limits = c(0, 80)) +
labs(title = "Proporsi Varians yang Dijelaskan per Faktor",
x = "Faktor", y = "Proporsi Varians (%)") +
theme_minimal() +
theme(plot.title = element_text(hjust = 0.5, face = "bold"))
## 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.
Berdasarkan hasil analisis : - Faktor 1 menjelaskan sekitar 18.8%
variasi data - Faktor 2 menjelaskan sekitar 14.0% variasi data - Faktor
3 menjelaskan sekitar 12.5% variasi data - Faktor 4 menjelaskan sekitar
9.7% variasi data
Total variasi yang dapat dijelaskan oleh keempat faktor adalah sekitar 55%. Hal ini berarti lebih dari setengah informasi dalam dataset sudah dapat dijelaskan oleh keempat faktor tersebut. Faktor pertama memiliki kontribusi terbesar sehingga merupakan faktor yang paling dominan dalam menjelaskan variasi data. Faktor-faktor berikutnya memiliki kontribusi yang lebih kecil tetapi tetap penting dalam menjelaskan struktur data.
Skor faktor merupakan nilai yang menunjukkan posisi setiap observasi terhadap faktor yang terbentuk. Setiap negara dalam dataset memiliki nilai skor untuk masing-masing faktor.
Nilai skor dapat bernilai positif atau negatif. Nilai positif menunjukkan bahwa negara tersebut memiliki karakteristik yang kuat pada faktor tersebut, sedangkan nilai negatif menunjukkan bahwa karakteristik tersebut kurang kuat.
fa_scores <- as.data.frame(fa_result$scores)
colnames(fa_scores) <- c("F1_Kesejahteraan", "F2_Imunisasi",
"F3_BebanPenyakit", "F4_KeseshatanAnak")
# Preview 10 baris pertama
fa_scores %>%
head(10) %>%
round(3) %>%
kbl(caption = "10 Skor Faktor Pertama") %>%
kable_styling(bootstrap_options = c("bordered", "striped", "hover"),
full_width = TRUE)
| F1_Kesejahteraan | F2_Imunisasi | F3_BebanPenyakit | F4_KeseshatanAnak |
|---|---|---|---|
| -0.197 | 1.018 | -1.043 | -0.995 |
| -0.230 | 1.112 | -0.632 | -1.021 |
| -0.268 | 1.143 | -0.510 | -1.032 |
| -0.325 | 1.194 | -0.340 | -1.012 |
| -0.475 | 1.152 | -0.246 | -1.136 |
| -0.460 | 1.198 | -0.355 | -0.999 |
| -0.525 | 1.171 | -0.475 | -1.005 |
| -0.539 | 1.179 | -0.419 | -1.094 |
| -0.578 | 1.143 | -0.450 | -1.217 |
| -0.646 | 1.100 | -0.630 | -1.196 |
# Distribusi skor faktor
fa_scores_long <- fa_scores %>%
pivot_longer(cols = everything(),
names_to = "Faktor",
values_to = "Skor")
ggplot(fa_scores_long, aes(x = Skor, fill = Faktor)) +
geom_density(alpha = 0.5) +
facet_wrap(~Faktor, scales = "free") +
theme_minimal() +
labs(title = "Distribusi Skor Faktor", x = "Skor", y = "Densitas") +
theme(legend.position = "none",
plot.title = element_text(hjust = 0.5, face = "bold"))
Pada grafik distribusi skor faktor terlihat penyebaran nilai untuk
setiap faktor: a. Faktor 1 Distribusi skor pada Faktor 1 terlihat cukup
menyebar, dengan sebagian besar negara berada di sekitar nilai tengah
(mendekati nol). Hal ini menunjukkan bahwa sebagian besar negara
memiliki tingkat kesejahteraan yang tidak terlalu jauh berbeda, namun
ada beberapa negara dengan nilai lebih rendah maupun lebih tinggi.
Negara dengan skor tinggi pada faktor ini cenderung memiliki kondisi
yang lebih baik dari sisi kesejahteraan, seperti harapan hidup yang
lebih tinggi dan kondisi kesehatan yang lebih baik.
Faktor 2 Distribusi skor Faktor 2 juga terkonsentrasi di sekitar nilai tengah, tetapi masih terdapat variasi antar negara. Hal ini menunjukkan bahwa tingkat imunisasi di berbagai negara cukup beragam. Negara dengan skor tinggi pada faktor ini biasanya memiliki cakupan imunisasi yang lebih baik dibandingkan negara dengan skor rendah.
Faktor 3 Pada Faktor 3 terlihat sebagian besar skor berada di sekitar nilai positif, dengan ekor distribusi memanjang ke arah negatif. Ini menunjukkan bahwa ada beberapa negara dengan beban penyakit yang jauh lebih tinggi dibandingkan negara lainnya. Negara dengan skor rendah pada faktor ini cenderung memiliki beban penyakit yang lebih berat.
Faktor 4 Distribusi skor Faktor 4 terlihat cukup merata di sekitar nilai tengah. Hal ini menunjukkan bahwa kondisi kesehatan anak di berbagai negara cukup bervariasi, tetapi sebagian besar masih berada pada tingkat sedang. Negara dengan skor tinggi pada faktor ini biasanya memiliki kondisi kesehatan anak yang lebih baik, seperti angka kematian bayi yang lebih rendah dan status gizi yang lebih baik.
Secara keseluruhan, grafik skor faktor ini menunjukkan bahwa setiap faktor mampu membedakan karakteristik negara berdasarkan aspek kesejahteraan, imunisasi, beban penyakit, dan kesehatan anak. Perbedaan skor antar negara menunjukkan adanya variasi kondisi kesehatan dan kesejahteraan di berbagai negara yang mempengaruhi harapan hidup.
cat("=== Goodness-of-Fit Factor Analysis ===\n")
## === Goodness-of-Fit Factor Analysis ===
cat("Chi-Square :", round(fa_result$STATISTIC, 3), "\n")
## Chi-Square : 947.83
cat("Derajat Bebas :", fa_result$dof, "\n")
## Derajat Bebas : 41
cat("p-value :", round(fa_result$PVAL, 4), "\n")
## p-value : 0
cat("RMSEA :", round(fa_result$RMSEA[1], 4), "\n")
## RMSEA : 0.0868
cat("TLI :", round(fa_result$TLI, 4), "\n")
## TLI : 0.9312
cat("BIC :", round(fa_result$BIC, 3), "\n")
## BIC : 620.425