Perubahan iklim merupakan salah satu tantangan global yang dihadapi saat ini, dengan emisi karbon dioksida (CO2) sebagai salah satu penyebab utamanya. Dalam laporan IPCC tahun 2001 [1], disebutkan bahwa suhu rata-rata permukaan global telah meningkat sekitar 0,6°C (sekitar 1,1°F) selama abad ke-20. Sektor agri-pangan berkontribusi sekitar 31% dari total emisi CO2 global tahunan, menjadikannya faktor krusial dalam upaya mitigasi perubahan iklim [2]. Sistem agri-pangan global bertanggung jawab atas emisi sekitar 16,5 miliar ton CO2e per tahun, yang mencakup emisi dari produksi pertanian, perubahan penggunaan lahan, serta proses pra- dan pasca-produksi seperti pembuatan pupuk dan pengolahan makanan [3].
Untuk memahami pola emisi dan dampaknya terhadap peningkatan suhu, diperlukan analisis data yang mendalam guna mengidentifikasi faktor-faktor utama yang berkontribusi terhadap emisi tersebut. Principal Component Analysis (PCA) dan Factor Analysis (FA) merupakan dua teknik analisis data multivariat yang banyak digunakan dalam eksplorasi serta reduksi dimensi data. PCA berfungsi untuk mengekstraksi komponen utama yang paling berpengaruh dalam variabel data [4], sedangkan FA digunakan untuk mengidentifikasi struktur laten yang mendasari hubungan antara variabel-variabel dalam dataset [5]. Dengan menggunakan kedua metode ini, pola tersembunyi dalam dataset emisi CO2 sektor agri-pangan dapat diungkap sehingga mempermudah interpretasi serta pengambilan keputusan berbasis data.
Dataset yang digunakan dalam penelitian ini diperoleh dari https://www.kaggle.com/competitions/warmup-datavidia. Dataset emisi CO2 dari sektor agri-pangan merupakan kumpulan data yang dibentuk dengan menggabungkan dan memproses ulang berbagai sumber informasi yang berasal dari organisasi terkemuka, seperti Food and Agriculture Organization (FAO) dan Intergovernmental Panel on Climate Change (IPCC). Dataset ini mencakup data yang telah dibersihkan dan diproses untuk menghasilkan informasi yang lebih terstruktur dan dapat digunakan dalam analisis serta peramalan emisi karbon yang dihasilkan oleh sektor agri-pangan.
Dataset ini memiliki beberapa variabel utama yang akan dianalisis menggunakan PCA dan FA, di antaranya:
Load Library
library(ggplot2)
library(GGally)
library(corrplot)
library(reshape2)
Load Data
data <- read.csv('D:/GISELLA SERAFINA/MATKUL SEMESTER 4/ANALISIS MULTIVARIAT/PCA FA TUGAS/Prediksi Peningkatan Suhu.csv', header = TRUE)
Cek Nilai Null
total_na <- sum(is.na(data))
cat("Total missing values:", total_na, "\n")
## Total missing values: 0
Statistika Deskriptif
summary_stats <- data.frame(
Variable = names(data),
Mean = sapply(data, mean, na.rm = TRUE),
SD = sapply(data, sd, na.rm = TRUE)
)
print(summary_stats)
## Variable
## Emisi.Savanna.Api Emisi.Savanna.Api
## Emisi.Kebakaran.Hutan Emisi.Kebakaran.Hutan
## Emisi.Residu.Tanaman Emisi.Residu.Tanaman
## Emisi.Budidaya.Padi Emisi.Budidaya.Padi
## Emisi.Tanah.Organik.Yang.Dikeringkan..Co2. Emisi.Tanah.Organik.Yang.Dikeringkan..Co2.
## Emisi.Pembuatan.Pestisida Emisi.Pembuatan.Pestisida
## Emisi.Transportasi.Makanan Emisi.Transportasi.Makanan
## Lahan.Hutan Lahan.Hutan
## Konversi.Hutan.Bersih Konversi.Hutan.Bersih
## Emisi.Konsumsi.Rumah.Tangga.Makanan Emisi.Konsumsi.Rumah.Tangga.Makanan
## Emisi.Ritel.Makanan Emisi.Ritel.Makanan
## Emisi.Penggunaan.Listrik.Di.Pertanian Emisi.Penggunaan.Listrik.Di.Pertanian
## Emisi.Kemasan.Makanan Emisi.Kemasan.Makanan
## Emisi.Sistem.Agrifood.Pembuangan.Limbah Emisi.Sistem.Agrifood.Pembuangan.Limbah
## Emisi.Pengolahan.Makanan Emisi.Pengolahan.Makanan
## Emisi.Manufaktur.Pupuk Emisi.Manufaktur.Pupuk
## Emisi.IPPU Emisi.IPPU
## Emisi.Kotoran.Diterapkan.Pada.Tanah Emisi.Kotoran.Diterapkan.Pada.Tanah
## Emisi.Pupuk.Kandang.Di.Padang.Rumput Emisi.Pupuk.Kandang.Di.Padang.Rumput
## Emisi.Manajemen.Pupuk Emisi.Manajemen.Pupuk
## Emisi.Kebakaran.Di.Tanah.Organik Emisi.Kebakaran.Di.Tanah.Organik
## Emisi.Kebakaran.Di.Hutan.Tropis.Yang.Lembab Emisi.Kebakaran.Di.Hutan.Tropis.Yang.Lembab
## Penggunaan.Energi.Di.Pertanian Penggunaan.Energi.Di.Pertanian
## Populasi.Pedesaan Populasi.Pedesaan
## Populasi.Perkotaan Populasi.Perkotaan
## Total.Populasi...Pria Total.Populasi...Pria
## Total.Populasi...Wanita Total.Populasi...Wanita
## Emisi.Total Emisi.Total
## Mean SD
## Emisi.Savanna.Api 1229.6544 5460.129
## Emisi.Kebakaran.Hutan 924.2752 3667.783
## Emisi.Residu.Tanaman 949.2051 3129.971
## Emisi.Budidaya.Padi 4241.1017 17599.628
## Emisi.Tanah.Organik.Yang.Dikeringkan..Co2. 3471.7916 15488.662
## Emisi.Pembuatan.Pestisida 327.5223 1445.485
## Emisi.Transportasi.Makanan 1823.1383 5306.418
## Lahan.Hutan -18145.6541 78121.214
## Konversi.Hutan.Bersih 18454.5224 104107.621
## Emisi.Konsumsi.Rumah.Tangga.Makanan 4290.2293 19960.469
## Emisi.Ritel.Makanan 1726.5583 6882.577
## Emisi.Penggunaan.Listrik.Di.Pertanian 1524.6925 8356.446
## Emisi.Kemasan.Makanan 1547.3576 10235.124
## Emisi.Sistem.Agrifood.Pembuangan.Limbah 5919.6140 21758.444
## Emisi.Pengolahan.Makanan 3779.3598 19356.823
## Emisi.Manufaktur.Pupuk 2900.8004 11016.457
## Emisi.IPPU 17309.1923 86069.091
## Emisi.Kotoran.Diterapkan.Pada.Tanah 913.2562 2991.496
## Emisi.Pupuk.Kandang.Di.Padang.Rumput 3431.7500 8926.859
## Emisi.Manajemen.Pupuk 2252.8005 7453.820
## Emisi.Kebakaran.Di.Tanah.Organik 1254.3361 23189.668
## Emisi.Kebakaran.Di.Hutan.Tropis.Yang.Lembab 668.2839 3206.630
## Penggunaan.Energi.Di.Pertanian 3015.8050 11493.960
## Populasi.Pedesaan 17949028.8256 90736574.036
## Populasi.Perkotaan 15738814.3484 59203131.674
## Total.Populasi...Pria 17038810.1786 73982191.224
## Total.Populasi...Wanita 16756698.5636 70561958.841
## Emisi.Total 60571.3691 208490.417
Korelasi Antar Variabel
cor_matrix <- cor(data, use = "complete.obs")
melted_cor_matrix <- melt(cor_matrix)
ggplot(data = melted_cor_matrix, aes(x = Var1, y = Var2, fill = value)) +
geom_tile(color = "white", size = 0.3) +
geom_point(data = subset(melted_cor_matrix, value > 0.95), aes(x = Var1, y = Var2),
color = "black", size = 1.5) +
scale_fill_gradient2(low = "blue", high = "red", mid = "white",
midpoint = 0, limit = c(-1,1), space = "Lab") +
ggtitle("Heatmap Korelasi Variabel") +
theme_minimal(base_size = 12) +
theme(
axis.text.x = element_text(angle = 45, hjust = 1, size = 8, face = "plain"),
axis.text.y = element_text(size = 8, face = "plain"),
plot.title = element_text(hjust = 0.5, size = 16, face = "bold"),
legend.text = element_text(size = 10),
legend.title = element_text(size = 12, face = "bold")
) +
coord_fixed()
Titik hitam pada heatmap diatas menandakan korelasi tinggi (>0.95) antar variabel.
Hapus Variabel dengan Korelasi Tinggi
library(caret)
cor_matrix <- cor(data, use = "complete.obs")
high_corr <- findCorrelation(cor_matrix, cutoff = 0.95)
data <- data[, -high_corr]
library(psych)
library(corpcor)
r <- cor.shrink(data)
## Estimating optimal shrinkage intensity lambda (correlation matrix): 0.0163
KMO(r)
## Kaiser-Meyer-Olkin factor adequacy
## Call: KMO(r = r)
## Overall MSA = 0.82
## MSA for each item =
## Emisi.Savanna.Api
## 0.65
## Emisi.Kebakaran.Hutan
## 0.61
## Emisi.Budidaya.Padi
## 0.91
## Emisi.Tanah.Organik.Yang.Dikeringkan..Co2.
## 0.61
## Emisi.Pembuatan.Pestisida
## 0.95
## Emisi.Transportasi.Makanan
## 0.88
## Lahan.Hutan
## 0.72
## Konversi.Hutan.Bersih
## 0.38
## Emisi.Ritel.Makanan
## 0.88
## Emisi.Penggunaan.Listrik.Di.Pertanian
## 0.91
## Emisi.Kemasan.Makanan
## 0.76
## Emisi.Pupuk.Kandang.Di.Padang.Rumput
## 0.89
## Emisi.Manajemen.Pupuk
## 0.94
## Emisi.Kebakaran.Di.Tanah.Organik
## 0.50
## Emisi.Kebakaran.Di.Hutan.Tropis.Yang.Lembab
## 0.60
## Penggunaan.Energi.Di.Pertanian
## 0.94
## Populasi.Pedesaan
## 0.86
## Emisi.Total
## 0.73
kmo_values <- KMO(r)$MSAi
kmo_df <- data.frame(Variable = names(kmo_values), KMO = kmo_values)
Variabel dengan KMO <0.5
low_kmo_df <- subset(kmo_df, KMO < 0.5)
print(low_kmo_df)
## Variable KMO
## Konversi.Hutan.Bersih Konversi.Hutan.Bersih 0.3795242
## Emisi.Kebakaran.Di.Tanah.Organik Emisi.Kebakaran.Di.Tanah.Organik 0.4985072
Terdapat 2 variabel dengan KMO kurang dari 0.5. Hapus variabel secara bertahap mulai dari KMO terkecil (Konversi.Hutan.Bersih)
vars_to_remove <- c("Konversi.Hutan.Bersih")
data <- data[, !(names(data) %in% vars_to_remove)]
Ulangi cek KMO setelah menghapus var tersebut
r <- cor.shrink(data)
## Estimating optimal shrinkage intensity lambda (correlation matrix): 0.0158
KMO(r)
## Kaiser-Meyer-Olkin factor adequacy
## Call: KMO(r = r)
## Overall MSA = 0.85
## MSA for each item =
## Emisi.Savanna.Api
## 0.55
## Emisi.Kebakaran.Hutan
## 0.58
## Emisi.Budidaya.Padi
## 0.91
## Emisi.Tanah.Organik.Yang.Dikeringkan..Co2.
## 0.59
## Emisi.Pembuatan.Pestisida
## 0.94
## Emisi.Transportasi.Makanan
## 0.86
## Lahan.Hutan
## 0.87
## Emisi.Ritel.Makanan
## 0.89
## Emisi.Penggunaan.Listrik.Di.Pertanian
## 0.92
## Emisi.Kemasan.Makanan
## 0.82
## Emisi.Pupuk.Kandang.Di.Padang.Rumput
## 0.78
## Emisi.Manajemen.Pupuk
## 0.93
## Emisi.Kebakaran.Di.Tanah.Organik
## 0.62
## Emisi.Kebakaran.Di.Hutan.Tropis.Yang.Lembab
## 0.54
## Penggunaan.Energi.Di.Pertanian
## 0.94
## Populasi.Pedesaan
## 0.85
## Emisi.Total
## 0.82
Tidak ada variabel dengan KMO kurang dari 0.05 yang menandakan variabel diatas lolos uji KMO untuk analisis PCA dan FA.
bartlett.test(data)
##
## Bartlett test of homogeneity of variances
##
## data: data
## Bartlett's K-squared = 1354503, df = 16, p-value < 2.2e-16
Nilai bartlett kurang dari 0.05 yang menandakan lolos uji bartlett untuk analisis PCA dan FA.
Standarisasi Data
data_scaled <- scale(data)
Matriks Kovarians & Eigenvalues
r <- cov(data_scaled)
pc <- eigen(r)
pc$values
## [1] 8.76722752 2.43148163 1.65344886 1.32033946 0.69647129 0.47018518
## [7] 0.40243288 0.36008258 0.25076081 0.19275530 0.15270724 0.10362664
## [13] 0.06141531 0.04973428 0.03564526 0.03106273 0.02062303
pc$vectors
## [,1] [,2] [,3] [,4] [,5]
## [1,] -0.02797358 -0.39852693 -0.251016699 0.165496164 7.608985e-01
## [2,] -0.04733591 -0.58488069 -0.173613480 0.000739823 -3.052523e-01
## [3,] -0.27754526 0.02978558 -0.006877263 -0.438229219 9.120765e-03
## [4,] -0.09296760 -0.19564881 0.639523965 -0.019988650 1.260058e-01
## [5,] -0.30040247 0.06151261 -0.021921217 0.215060573 -2.814871e-02
## [6,] -0.26243343 0.01171890 0.127991234 0.435752965 -1.729953e-02
## [7,] 0.25697257 0.05923872 -0.149878714 -0.244079669 3.497397e-02
## [8,] -0.27754853 0.06966391 0.061056688 0.370234025 -1.391744e-01
## [9,] -0.28488348 0.08717181 -0.143251380 -0.293837365 7.279585e-05
## [10,] -0.29152061 0.08999806 -0.075016112 0.003464391 -9.867875e-02
## [11,] -0.27094104 -0.07836664 -0.147071967 -0.030016686 3.465568e-01
## [12,] -0.32566056 0.06623897 -0.031025094 -0.006549926 -1.961842e-02
## [13,] -0.03638427 -0.24105429 0.601702797 -0.265531228 9.516860e-02
## [14,] -0.02700804 -0.58190530 -0.163427628 -0.024952623 -3.803790e-01
## [15,] -0.30551020 0.06545001 -0.012114020 0.063021396 -7.080069e-02
## [16,] -0.28062618 0.05538234 -0.126770991 -0.423297597 3.497615e-02
## [17,] -0.29895470 -0.13169076 0.032301085 -0.076209858 -2.027881e-03
## [,6] [,7] [,8] [,9] [,10]
## [1,] 0.239579992 -0.26334290 -0.103843060 0.119069009 -0.001457862
## [2,] -0.083370358 -0.11517330 0.007439246 0.031100284 0.037741848
## [3,] -0.021548971 -0.17278895 0.002633774 -0.035855933 -0.037021814
## [4,] -0.140026090 -0.35933392 -0.063595792 -0.518370678 -0.181323697
## [5,] 0.138257565 0.15269463 0.092189985 -0.101869745 0.384116689
## [6,] -0.093952920 -0.10299042 0.454545724 0.046591587 -0.012641329
## [7,] 0.519561791 -0.08035278 0.571713619 -0.398496627 0.164059048
## [8,] 0.204190037 -0.16874938 0.267604679 0.213078229 -0.262677629
## [9,] -0.100088799 -0.24281972 0.230743828 0.270348574 -0.254528958
## [10,] 0.508999139 0.09311945 -0.410788307 0.005226691 -0.306870617
## [11,] -0.400982621 0.53288461 0.182329053 -0.169199940 0.009068796
## [12,] -0.026706694 -0.14894880 -0.004436914 -0.030206181 0.304259295
## [13,] 0.265342092 0.28395905 0.121103784 0.508219084 0.254116189
## [14,] 0.007671659 0.03630910 0.059014261 -0.056282393 0.031435110
## [15,] 0.091625752 -0.13408164 -0.303725338 -0.169814493 0.537394939
## [16,] -0.117165257 -0.18047981 0.074584805 0.061944022 0.052012414
## [17,] 0.229809395 0.42809673 0.017784244 -0.318318000 -0.334711584
## [,11] [,12] [,13] [,14] [,15]
## [1,] 0.014189257 0.053924907 0.026086695 -0.1027825247 0.0005438393
## [2,] 0.019102822 -0.103899909 0.072387633 0.6410258305 0.2458428514
## [3,] 0.094067523 0.691257229 0.063208902 0.0487896704 0.1742951334
## [4,] 0.139913014 -0.170802826 -0.077909352 0.0027190247 0.0092925361
## [5,] 0.719913815 -0.072004680 0.120677488 -0.1320044089 0.3004065073
## [6,] -0.216486756 0.190224134 0.586510241 0.0597088912 -0.2189523485
## [7,] -0.082185971 -0.089859934 -0.059967130 0.1412219060 -0.0232429150
## [8,] -0.081599067 0.141299112 -0.644941352 0.0002973941 0.2295698490
## [9,] 0.009106466 -0.600287470 0.154608753 -0.1916674301 0.1553493406
## [10,] 0.096704888 -0.091338822 0.142046290 0.2548994803 -0.2372896879
## [11,] -0.079086207 -0.071903392 -0.254928516 0.1945314657 -0.0019559293
## [12,] 0.079504480 -0.096437698 -0.270811820 0.1767492528 -0.6829420296
## [13,] -0.066524117 -0.042616690 -0.010354672 0.0442622564 -0.0217363693
## [14,] 0.030455877 0.069586470 -0.094793531 -0.5652276172 -0.2612989582
## [15,] -0.567209728 -0.120272239 0.001487625 -0.1219006459 0.3010787521
## [16,] 0.012272037 0.074749103 -0.009007562 -0.0412073431 -0.0773071170
## [17,] -0.207877821 0.002674948 0.119693661 -0.1625042275 0.0737646729
## [,16] [,17]
## [1,] -0.06695265 0.021929384
## [2,] -0.12505250 0.079367283
## [3,] -0.08535186 -0.407673579
## [4,] 0.13581237 -0.009682154
## [5,] -0.01893769 0.059550361
## [6,] 0.13213124 0.006570460
## [7,] 0.11829531 -0.072929554
## [8,] 0.03948845 0.070171899
## [9,] -0.08772430 -0.302305574
## [10,] 0.43447383 -0.113685860
## [11,] 0.34337756 -0.197335420
## [12,] -0.41921478 -0.097010657
## [13,] 0.03609236 -0.017571599
## [14,] 0.24204534 -0.136090410
## [15,] 0.09402471 -0.080329159
## [16,] 0.26885364 0.759950578
## [17,] -0.53819614 0.240049426
eigenvalues <- pc$values
eigenvectors <- pc$vectors
Proporsi Varians dan Kumulatif
library(dplyr)
sumvar <- sum(eigenvalues)
propvar <- (eigenvalues / sumvar) * 100
cumvar <- data.frame(PC = paste0("PC", 1:length(eigenvalues)),
Value = eigenvalues,
PropVar = propvar)
cumvar <- cumvar %>% mutate(CumVar = cumsum(PropVar))
print(cumvar)
## PC Value PropVar CumVar
## 1 PC1 8.76722752 51.5719266 51.57193
## 2 PC2 2.43148163 14.3028331 65.87476
## 3 PC3 1.65344886 9.7261697 75.60093
## 4 PC4 1.32033946 7.7667027 83.36763
## 5 PC5 0.69647129 4.0968899 87.46452
## 6 PC6 0.47018518 2.7657951 90.23032
## 7 PC7 0.40243288 2.3672523 92.59757
## 8 PC8 0.36008258 2.1181328 94.71570
## 9 PC9 0.25076081 1.4750636 96.19077
## 10 PC10 0.19275530 1.1338547 97.32462
## 11 PC11 0.15270724 0.8982779 98.22290
## 12 PC12 0.10362664 0.6095685 98.83247
## 13 PC13 0.06141531 0.3612665 99.19373
## 14 PC14 0.04973428 0.2925546 99.48629
## 15 PC15 0.03564526 0.2096780 99.69597
## 16 PC16 0.03106273 0.1827219 99.87869
## 17 PC17 0.02062303 0.1213120 100.00000
Berdasarkan nilai summary di atas, empat komponen utama pertama (PC1 hingga PC4) dipilih untuk digunakan dalam analisis lebih lanjut. Pemilihan ini didasarkan pada nilai varians kumulatif (CumVar) yang mencapai 83.36763% (>80%), yang berarti sebagian besar informasi dalam data masih dapat dipertahankan dengan hanya menggunakan empat komponen utama.
Skor PCA
scores <- as.matrix(data_scaled) %*% eigenvectors
head(scores)
## [,1] [,2] [,3] [,4] [,5] [,6]
## [1,] 0.7156959 0.3884869 -0.04541921 -0.1316273 -0.05147952 0.02578138
## [2,] 0.7107533 0.3883991 -0.04732906 -0.1340982 -0.04886853 0.02237399
## [3,] 0.7081131 0.3890084 -0.04843242 -0.1379302 -0.04889884 0.02200242
## [4,] 0.7073682 0.3891955 -0.04984289 -0.1442377 -0.04808347 0.02002192
## [5,] 0.7018965 0.3894650 -0.05173922 -0.1483515 -0.04617272 0.01721002
## [6,] 0.6957475 0.3893114 -0.05420396 -0.1505389 -0.04267963 0.01257470
## [,7] [,8] [,9] [,10] [,11] [,12]
## [1,] 0.06018130 -0.1329183 0.02628039 0.1322656 -0.1067856 -0.04407515
## [2,] 0.06282722 -0.1310615 0.02525599 0.1332208 -0.1072749 -0.04445851
## [3,] 0.06091900 -0.1308753 0.02591113 0.1335870 -0.1068488 -0.04351222
## [4,] 0.05961766 -0.1320373 0.02528649 0.1358910 -0.1061298 -0.04362289
## [5,] 0.06031164 -0.1301036 0.02492273 0.1364694 -0.1063829 -0.04252063
## [6,] 0.06410552 -0.1273259 0.02372114 0.1377661 -0.1072258 -0.04434108
## [,13] [,14] [,15] [,16] [,17]
## [1,] -0.03884122 -0.03519590 0.07486913 0.07278189 0.04284565
## [2,] -0.04253024 -0.03352122 0.07245186 0.07549115 0.04638247
## [3,] -0.04450239 -0.03383118 0.07186818 0.07699000 0.05280429
## [4,] -0.04009387 -0.03437225 0.06931087 0.07870195 0.05978712
## [5,] -0.04280548 -0.03341155 0.06772448 0.08169915 0.06534291
## [6,] -0.04733235 -0.03124937 0.06426067 0.08553045 0.07008799
Semakin tinggi nilai skor PC pada suatu observasi, semakin besar kontribusi observasi tersebut dalam dimensi tersebut. Sebagai contoh, pada observasi 1, nilai skor paling tinggi (0.7156959) ada di PC1 yang menandakan observasi 1 lebih dipengaruhi oleh pola yang ditangkap oleh PC1.
prcomp
pca_result <- prcomp(data_scaled)
summary(pca_result)
## Importance of components:
## PC1 PC2 PC3 PC4 PC5 PC6 PC7
## Standard deviation 2.9610 1.5593 1.28587 1.14906 0.83455 0.68570 0.63438
## Proportion of Variance 0.5157 0.1430 0.09726 0.07767 0.04097 0.02766 0.02367
## Cumulative Proportion 0.5157 0.6587 0.75601 0.83368 0.87465 0.90230 0.92598
## PC8 PC9 PC10 PC11 PC12 PC13 PC14
## Standard deviation 0.60007 0.50076 0.43904 0.39078 0.3219 0.24782 0.22301
## Proportion of Variance 0.02118 0.01475 0.01134 0.00898 0.0061 0.00361 0.00293
## Cumulative Proportion 0.94716 0.96191 0.97325 0.98223 0.9883 0.99194 0.99486
## PC15 PC16 PC17
## Standard deviation 0.1888 0.17625 0.14361
## Proportion of Variance 0.0021 0.00183 0.00121
## Cumulative Proportion 0.9970 0.99879 1.00000
Berdasarkan nilai summary di atas, empat komponen utama pertama (PC1 hingga PC4) dipilih untuk digunakan dalam analisis lebih lanjut. Pemilihan ini didasarkan pada nilai varians kumulatif (Cumulative Proportion) yang mencapai 0.83368 (>0.80), yang berarti sebagian besar informasi dalam data masih dapat dipertahankan dengan hanya menggunakan empat komponen utama.
library(factoextra)
fviz_eig(pca_result, addlabels = TRUE, barfill = "skyblue",
barcolor = "darkblue", linecolor = "red")
Pada scree plot diatas, terdapat elbow point di sekitar PC4, di mana setelahnya varians yang dijelaskan oleh setiap komponen menurun drastis. Oleh karena itu, jumlah komponen utama yang dapat dipilih untuk mempertahankan informasi yang signifikan adalah empat komponen.
fviz_pca_biplot(pca_result, geom.ind = "point", addEllipses = TRUE, repel = TRUE)
Biplot diatas menunjukkan hubungan antara variabel dalam dataset yang dibentuk oleh PC1 (Dim1) dan PC2 (Dim2).
Variabel dominan pada Dim1 Variabel seperti Emisi Manajemen Pupuk, Emisi Budidaya Padi, dan Emisi Pembuatan Pestisida memiliki pengaruh besar terhadap PC1. Hal ini menunjukkan bahwa sebagian besar varians dalam dataset dipengaruhi oleh faktor-faktor terkait emisi dari aktivitas pertanian.
Variabel dominan pada Dim2 Emisi Kebakaran Hutan, Emisi Kebakaran Di Hutan Tropis Yang Lembab, dan Emisi Savanna Api memiliki kontribusi lebih besar terhadap PC2. Hal ini menunjukkan bahwa PC2 lebih banyak menjelaskan variabilitas yang berkaitan dengan emisi dari kebakaran hutan.
contrib_circle <- fviz_pca_var(pca_result, col.var = "contrib",
gradient.cols = c("#00AFBB", "#E7B800", "#FC4E07"),
repel = TRUE) +
ggtitle("Kontribusi Variabel")
plot(contrib_circle)
Biplot diatas menunjukkan sejauh mana masing-masing variabel berkontribusi terhadap dua komponen utama, yaitu PC1 (51.6%) dan PC2 (14.3%).
Pada grafik, arah dan panjang panah menunjukkan kontribusi variabel terhadap komponen utama. Variabel dengan panah yang lebih panjang memiliki kontribusi yang lebih besar, sedangkan variabel yang lebih dekat dengan sumbu Dim1 atau Dim2 menunjukkan hubungan yang lebih kuat dengan komponen tersebut. Selain itu, skala warna pada grafik menunjukkan kontribusi relatif variabel, dengan warna merah/oranye menunjukkan kontribusi tinggi dan warna biru menunjukkan kontribusi rendah.
contrib_v_PC1 <- fviz_contrib(pca_result, choice = "var", axes = 1, top = 13) + ggtitle("PC1")
contrib_v_PC2 <- fviz_contrib(pca_result, choice = "var", axes = 2, top = 13) + ggtitle("PC2")
contrib_v_PC3 <- fviz_contrib(pca_result, choice = "var", axes = 3, top = 13) + ggtitle("PC3")
contrib_v_PC4 <- fviz_contrib(pca_result, choice = "var", axes = 4, top = 13) + ggtitle("PC4")
plot(contrib_v_PC1)
Variabel yang berada di atas garis batas signifikansi memiliki pengaruh besar terhadap PC. Variabel yang paling berkontribusi terhadap PC1 adalah Emisi Manajemen Pupuk, diikuti oleh Penggunaan Energi di Pertanian dan Emisi Pembuatan Pestisida, yang semuanya memiliki kontribusi sekitar 9% atau lebih.
Karena variabel yang berkontribusi tinggi terkait dengan pertanian (pupuk, energi, pestisida, dan emisi terkait makanan), PC1 kemungkinan besar mewakili dimensi terkait emisi dari pertanian.
plot(contrib_v_PC2)
Variabel yang paling berkontribusi terhadap PC2 adalah Emisi Kebakaran Hutan dan Emisi Kebakaran Di Hutan Tropis Yang Lembab, yang memiliki kontribusi sekitar 33% atau lebih.
Karena variabel yang berkontribusi tinggi terkait dengan kebakaran hutan dan emisi dari ekosistem alami, PC2 kemungkinan besar mewakili dimensi terkait emisi dari kebakaran hutan dan lahan.
plot(contrib_v_PC3)
Variabel yang paling berkontribusi terhadap PC3 adalah Emisi Tanah Organik Yang Dikeringkan (CO₂) dan Emisi Kebakaran di Tanah Organik, yang memiliki kontribusi sekitar 40% atau lebih.
Karena variabel yang berkontribusi tinggi terkait dengan emisi dari tanah organik dan kebakaran, PC3 kemungkinan besar mewakili emisi dari tanah.
plot(contrib_v_PC4)
Variabel yang paling berkontribusi terhadap PC4 adalah Emisi Budidaya Padi dan Emisi Transportasi Makanan, yang memiliki kontribusi sekitar 20% atau lebih.
Karena variabel yang berkontribusi tinggi terkait dengan aktivitas produksi dan distribusi pangan, PC4 kemungkinan besar mewakili emisi dari pangan
Hitung eigenvalues dan eigenvectors
r <- cor(data_scaled)
pc <- eigen(r)
Tampilkan eigenvalues dan persentase kumulatif variansi
pc$values
## [1] 8.76722752 2.43148163 1.65344886 1.32033946 0.69647129 0.47018518
## [7] 0.40243288 0.36008258 0.25076081 0.19275530 0.15270724 0.10362664
## [13] 0.06141531 0.04973428 0.03564526 0.03106273 0.02062303
eigen_cumsum <- cumsum(pc$values) / sum(pc$values)
eigen_cumsum
## [1] 0.5157193 0.6587476 0.7560093 0.8336763 0.8746452 0.9023032 0.9259757
## [8] 0.9471570 0.9619077 0.9732462 0.9822290 0.9883247 0.9919373 0.9948629
## [15] 0.9969597 0.9987869 1.0000000
Dari hasil kumulatif variansi menunjukkan bahwa pengambilan 4 faktor sudah mewakili 83% data.
Tentukan jumlah faktor yang mencakup setidaknya 80% variansi
num_factors <- which(eigen_cumsum >= 0.8)[1]
num_factors
## [1] 4
Maka dari rekomendasi ini, disarankan untuk mengambil 4 faktor karena sudah mewakili 0.8/ sekitar 80% data.
Menghitung loading matrix untuk faktor yang dipilih
L <- matrix(nrow = nrow(pc$vectors), ncol =4)
for (i in 1:4) {
L[,i] <- sqrt(pc$values[i]) * pc$vectors[,i]
}
Menghitung faktor loading menggunakan for loop. Karena PC yang diambil adalah urut(PC 1,PC 2,PC 3, PC 4), maka langsung di definisikan menggunakan (for (i in 1:4)).
Menampilkan loading matrix
L
## [,1] [,2] [,3] [,4]
## [1,] -0.08282839 -0.62143136 -0.322773594 0.1901650633
## [2,] -0.14015928 -0.91201667 -0.223243501 0.0008501012
## [3,] -0.82179777 0.04644528 -0.008843233 -0.5035517757
## [4,] -0.27527246 -0.30507927 0.822341498 -0.0229681628
## [5,] -0.88947681 0.09591789 -0.028187726 0.2471175556
## [6,] -0.77705237 0.01827353 0.164579451 0.5007064104
## [7,] 0.76088305 0.09237217 -0.192723797 -0.2804622449
## [8,] -0.82180744 0.10862839 0.078510659 0.4254212011
## [9,] -0.84352587 0.13592883 -0.184201939 -0.3376368359
## [10,] -0.86317807 0.14033585 -0.096460594 0.0039807936
## [11,] -0.80224300 -0.12219873 -0.189114699 -0.0344909802
## [12,] -0.96426477 0.10328781 -0.039894083 -0.0075262592
## [13,] -0.10773203 -0.37588099 0.773708580 -0.3051113784
## [14,] -0.07996948 -0.90737709 -0.210145871 -0.0286720674
## [15,] -0.90460056 0.10205756 -0.015576994 0.0724153810
## [16,] -0.83092021 0.08635884 -0.163010383 -0.4863944425
## [17,] -0.88519007 -0.20534815 0.041534835 -0.0875697183
Menampilkan faktor loading untuk 4 faktor terpilih.
fa_no_rotation <- fa(r = r,
covar = FALSE,
nfactors = 4,
rotate = "none")
Mengambil factor loadings tanpa rotasi
load_no_rotation_matrix <- as.matrix(fa_no_rotation$loadings)
Visualisasi faktor loadings tanpa rotasi
print(load_no_rotation_matrix)
##
## Loadings:
## MR1 MR2 MR3 MR4
## Emisi.Savanna.Api 0.453 -0.159 -0.144
## Emisi.Kebakaran.Hutan 0.141 0.954 -0.222
## Emisi.Budidaya.Padi 0.824 -0.112 0.481
## Emisi.Tanah.Organik.Yang.Dikeringkan..Co2. 0.272 0.284 0.786 0.227
## Emisi.Pembuatan.Pestisida 0.883 -0.250
## Emisi.Transportasi.Makanan 0.770 0.262 -0.426
## Lahan.Hutan -0.735 -0.210 0.177
## Emisi.Ritel.Makanan 0.815 -0.102 0.160 -0.388
## Emisi.Penggunaan.Listrik.Di.Pertanian 0.837 -0.123 -0.242 0.254
## Emisi.Kemasan.Makanan 0.846 -0.125
## Emisi.Pupuk.Kandang.Di.Padang.Rumput 0.776 0.103 -0.149
## Emisi.Manajemen.Pupuk 0.968
## Emisi.Kebakaran.Di.Tanah.Organik 0.103 0.321 0.583 0.379
## Emisi.Kebakaran.Di.Hutan.Tropis.Yang.Lembab 0.904 -0.202
## Penggunaan.Energi.Di.Pertanian 0.894
## Populasi.Pedesaan 0.839 -0.276 0.449
## Emisi.Total 0.874 0.200
##
## MR1 MR2 MR3 MR4
## SS loadings 8.597 2.248 1.391 1.161
## Proportion Var 0.506 0.132 0.082 0.068
## Cumulative Var 0.506 0.638 0.720 0.788
plot(load_no_rotation_matrix[,1:2], type="n") # set up plot
text(load_no_rotation_matrix[,1:2], labels=colnames(data), cex=.7)
Dalam visualisasi ini, dapat disimpulkan bahwa persebaran data tidak terlihat dengan jelas karena banyak variabel variabel yang menumpuk di dalam 1 posisi yang sama. Maka dari itu, perlu dilakukan rotasi untuk mendapatkan hasil yang lebih baik.
Diagram faktor tanpa rotasi
fa.diagram(fa_no_rotation)
MR1 terlalu banyak berhubungan dengan banyak variabel, sementara MR4 tidak memiliki hubungan dengan variabel mana pun, sehingga perlu dilakukan rotasi.
fa_rotated <- fa(r = r,
covar = FALSE,
nfactors = 4,
rotate = "varimax")
Mengambil factor loadings setelah rotasi
load_rotated_matrix <- as.matrix(fa_rotated$loadings)
Menampilkan hasil loading dengan rotasi
print(load_rotated_matrix)
##
## Loadings:
## MR1 MR4 MR2 MR3
## Emisi.Savanna.Api 0.501
## Emisi.Kebakaran.Hutan 0.985 0.104
## Emisi.Budidaya.Padi 0.275 0.903 0.183
## Emisi.Tanah.Organik.Yang.Dikeringkan..Co2. 0.232 0.878
## Emisi.Pembuatan.Pestisida 0.816 0.428
## Emisi.Transportasi.Makanan 0.899 0.146 0.117
## Lahan.Hutan -0.695 -0.293 -0.101 -0.207
## Emisi.Ritel.Makanan 0.889 0.245
## Emisi.Penggunaan.Listrik.Di.Pertanian 0.402 0.822
## Emisi.Kemasan.Makanan 0.633 0.581
## Emisi.Pupuk.Kandang.Di.Padang.Rumput 0.529 0.561 0.203
## Emisi.Manajemen.Pupuk 0.715 0.661
## Emisi.Kebakaran.Di.Tanah.Organik 0.764
## Emisi.Kebakaran.Di.Hutan.Tropis.Yang.Lembab 0.922 0.112
## Penggunaan.Energi.Di.Pertanian 0.712 0.554
## Populasi.Pedesaan 0.269 0.957
## Emisi.Total 0.589 0.601 0.237 0.212
##
## MR1 MR4 MR2 MR3
## SS loadings 5.164 4.525 2.188 1.521
## Proportion Var 0.304 0.266 0.129 0.089
## Cumulative Var 0.304 0.570 0.699 0.788
factor_names <- c("Emisi Pangan",
"Emisi Pertanian",
"Emisi Kebakaran",
"Emisi Tanah")
Mengubah nama faktor dalam objek hasil analisis
colnames(fa_rotated$loadings) <- factor_names
Visualisasi faktor setelah rotasi
plot(load_rotated_matrix[,1:2], type ="n") # Set up plot
text(load_rotated_matrix[,1:2], labels=colnames(data), cex=.7)
Dari visualisasi ini, dapat dilihat bahwa ada beberapa variabel yang tidak berada di 1 posisi yang sama, pola persebaran data terlihat agak sedikit jelas daripada yang tanpa menggunakan rotasi.
Diagram faktor setelah rotasi
fa.diagram(fa_rotated, main = "Factor Analysis", labels = factor_names)
Analisis faktor setelah rotasi mengidentifikasi empat faktor utama yang membentuk hubungan antar variabel dengan faktor loading yang tinggi. Selain itu, terdapat hubungan negatif antara luas lahan hutan dengan faktor pertama, menunjukkan bahwa peningkatan emisi dari produksi makanan berkorelasi dengan berkurangnya luas hutan.
Faktor 1 (Emisi Pangan) memiliki variabel “Emisi Transportasi Makanan”,“Emisi Ritel Makanan”,“Emisi Pembuatan Pestisida”,“Emisi Manajemen Pupuk”,“Penggunaan Energi Di Pertanian”,“Lahan Hutan”, dan “Emisi kemasan makanan”. Namun, pada variabel lahan hutan, memiliki nilai negatif dan garis merah putus putus yang berarti faktor ini memiliki hubungan terbalik dengan luas hutan.
Faktor 2 (Emisi Pertanian) memiliki variabel “Populasi Pedesaan”,“Emisi Budidaya Padi”,“Emisi Penggunaan Listrik Di Pertanian”,“Emisi total”, dan “Emisi Pupuk Kandang Di Padang Rumput”
Faktor 3 (Emisi Kebakaran) memiliki variabel “Emisi Kebakaran Di Hutan Tropis Yang Lembab”,“Emisi Kebakaran Hutan”, dan “Emisi Savanna Api”
Faktor 4 (Emisi Tanah) memiliki variabel “Emisi Tanah Organik Yang Dikeringkan Co2”, dan “Emisi Kebakaran Di Tanah Organik”
Hasil analisis Principal Component Analysis (PCA) dan Factor Analysis (FA) menunjukkan bahwa tidak semua variabel dalam dataset memiliki kontribusi yang signifikan terhadap pola utama dalam data.
PCA berhasil mereduksi dimensi data menjadi empat komponen utama yang sudah cukup menjelaskan variansi data sebesar 83%. Dengan reduksi dimensi ini, PCA membantu menyederhanakan kompleksitas data tanpa kehilangan terlalu banyak informasi, memungkinkan analisis yang lebih efisien.
FA berhasil mengidentifikasi beberapa faktor utama yang mewakili pola tersembunyi dalam data emisi CO₂ sektor agri-pangan. Dengan reduksi dimensi ini, FA membantu menyederhanakan kompleksitas data dan mengungkap struktur laten yang mendasari hubungan antar variabel.
[1] IPCC, Climate Change 2001: The Scientific Basis. Contribution of Working Group I to the Third Assessment Report of the Intergovernmental Panel on Climate Change. Cambridge, United Kingdom & New York, USA: Cambridge University Press, 2001.
[2] FAO, “The share of agri-food systems in total greenhouse gas emissions,” 2021.
[3] F. N. Tubiello et al., “Pre- and post-production processes increasingly dominate greenhouse gas emissions from agri-food systems,” Apr. 14, 2022, Copernicus Publications. doi: 10.5194/essd-14-1795-2022.
[4] G. Enzellina and D. Suhaedi, “Penggunaan Metode Principal Component Analysis dalam Menentukan Faktor Dominan,” Jurnal Riset Matematika, pp. 101–110, Dec. 2022, doi: 10.29313/jrm.v2i2.1192.
[5] Purwanto, “ANALISIS FAKTOR: KONSEP, PROSEDUR UJI DAN INTERPRETASI,” Dec. 2004.