Latihan Praktikum, Teknik Peubah Ganda - STA1342

Muhammad Hafiz Fazli - G1401231081


Pendahuluan

Data

Kita memiliki data perdagangan komoditas global (UN) yang tersedia di Kaggle, dengan kolom utama seperti:

Pertanyaan yang ingin dijawab

Untuk Indonesia, kategori komoditas apa yang “melekat” pada periode/tahun tertentu (dan sebaliknya), jika dilihat dari komposisi nilai perdagangannya?
Intinya: apakah ada pergeseran struktur komoditas dari tahun ke tahun, bukan sekadar naik-turun total nilai.

Desain analisis (CA)

  1. Persiapan & Seleksi Data
  • Gunakan dataset perdagangan komoditas global UN yang tersedia di Kaggle.
  • Filter:
    • country_or_area = "Indonesia"
    • fokus hanya flow = "Export"
  1. Membangun Tabel Kontingensi
  • Bentuk tabel kontingensi dari data Indonesia:
    • Baris (rows): category (ambil top-5 berdasarkan total trade_usd)
    • Kolom (columns): year (ambil 5 tahun terakhir di data)
    • Isi sel: agregasi trade_usd (sum(trade_usd)) untuk setiap kombinasi category × year
  1. Uji Chi-Square pada Tabel Kontingensi
  • Lakukan uji Chi-Square independensi pada tabel kontingensi untuk menguji:
    • H0: distribusi kategori komoditas tidak berbeda antar tahun (independen)
    • H1: ada perbedaan/ketergantungan struktur kategori komoditas antar tahun
  • Jika hasil signifikan, ini mengindikasikan ada variasi struktur kategori-komoditas lintas tahun yang layak dipetakan lebih lanjut.
  1. Analisis Korespondensi (CA)
  • Terapkan Correspondence Analysis pada tabel kontingensi (berbasis profil baris/kolom dan jarak Chi-Square) untuk:
    • mereduksi dimensi,
    • mengekstrak dimensi utama yang menjelaskan variasi struktur category × year.
  1. Visualisasi: Biplot CA
  • Buat biplot 2D (Dimensi 1 vs Dimensi 2) berisi:
    • titik year dan titik category
  • Interpretasi inti:
    • year yang berdekatan → profil komposisi kategori komoditas mirip
    • category yang dekat dengan suatu year → kategori itu relatif lebih dominan pada tahun tersebut dibanding rata-rata
    • kategori yang jauh dari pusat → kategori “pembeda” yang kontribusinya besar terhadap variasi struktur.

Analisis

Import dan Preprocessing Data

library(readr)
## Warning: package 'readr' was built under R version 4.4.3
path <- "C:/Users/Muhammad Hafiz F/Downloads/commodity_trade_statistics_data.csv"
df <- read_csv(path, show_col_types = FALSE)

df
## # A tibble: 8,225,871 × 10
##    country_or_area  year comm_code commodity           flow  trade_usd weight_kg
##    <chr>           <dbl> <chr>     <chr>               <chr>     <dbl>     <dbl>
##  1 Afghanistan      2016 010410    Sheep, live         Expo…      6088      2339
##  2 Afghanistan      2016 010420    Goats, live         Expo…      3958       984
##  3 Afghanistan      2008 010210    Bovine animals, li… Impo…   1026804       272
##  4 Albania          2016 010290    Bovine animals, li… Impo…   2414533   1114023
##  5 Albania          2016 010392    Swine, live except… Impo…  14265937   9484953
##  6 Albania          2016 010511    Fowls, live domest… Impo…   2671732    254652
##  7 Albania          2016 010511    Fowls, live domest… Expo…     87581      5320
##  8 Albania          2016 010519    Poultry, live exce… Impo…     26485      2908
##  9 Albania          2016 010591    Fowls, live domest… Impo…   2421513   1926850
## 10 Albania          2016 010599    Poultry, live exce… Impo…    251318    211177
## # ℹ 8,225,861 more rows
## # ℹ 3 more variables: quantity_name <chr>, quantity <dbl>, category <chr>
library(dplyr)
## Warning: package 'dplyr' was built under R version 4.4.3
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
df_idn_exp <- df %>%
  filter(country_or_area == "Indonesia", flow == "Export")

df_idn_exp %>% count(country_or_area, flow)
## # A tibble: 1 × 3
##   country_or_area flow       n
##   <chr>           <chr>  <int>
## 1 Indonesia       Export 28625
df_idn_exp %>% summarise(
  n_rows = n(),
  year_min = min(year, na.rm = TRUE),
  year_max = max(year, na.rm = TRUE)
)
## # A tibble: 1 × 3
##   n_rows year_min year_max
##    <int>    <dbl>    <dbl>
## 1  28625     1989     2016

Membangun Tabel Kontingensi category × year

library(tidyr)
library(tibble)

# 1) Ambil 5 tahun terakhir (berdasarkan data Indonesia-Export yang ada)
last5_years <- df_idn_exp %>%
  summarise(max_year = max(year, na.rm = TRUE)) %>%
  pull(max_year) %>%
  (\(y) (y - 4):y)()

df_last5 <- df_idn_exp %>%
  filter(year %in% last5_years)

# 2) Ambil top-5 category berdasarkan total trade_usd (di 5 tahun terakhir)
top5_cat <- df_last5 %>%
  filter(category != "all_commodities") %>%   # drop "all_commodities" sebelum ambil top-5
  group_by(category) %>%
  summarise(total_trade_usd = sum(trade_usd, na.rm = TRUE), .groups = "drop") %>%
  arrange(desc(total_trade_usd)) %>%
  slice_head(n = 5) %>%
  pull(category)

df_top5 <- df_last5 %>%
  filter(category %in% top5_cat)

# 3) Tabel kontingensi: baris=category, kolom=year, isi=sum(trade_usd)
cont_tbl <- df_top5 %>%
  group_by(category, year) %>%
  summarise(trade_usd = sum(trade_usd, na.rm = TRUE), .groups = "drop") %>%
  pivot_wider(names_from = year, values_from = trade_usd, values_fill = 0) %>%
  arrange(match(category, top5_cat))

# matrix untuk Chi-square / CA (rowname=category)
cont_mat <- cont_tbl %>%
  column_to_rownames("category") %>%
  as.matrix()

last5_years
## [1] 2012 2013 2014 2015 2016
top5_cat
## [1] "27_mineral_fuels_oils_distillation_products_etc"       
## [2] "15_animal_vegetable_fats_and_oils_cleavage_products_et"
## [3] "71_pearls_precious_stones_metals_coins_etc"            
## [4] "64_footwear_gaiters_and_the_like_parts_thereof"        
## [5] "26_ores_slag_and_ash"
cont_tbl
## # A tibble: 5 × 6
##   category                                `2012`  `2013`  `2014`  `2015`  `2016`
##   <chr>                                    <dbl>   <dbl>   <dbl>   <dbl>   <dbl>
## 1 27_mineral_fuels_oils_distillation_pr… 6.34e10 5.74e10 5.11e10 3.47e10 2.79e10
## 2 15_animal_vegetable_fats_and_oils_cle… 2.33e10 2.11e10 2.36e10 2.06e10 2.07e10
## 3 71_pearls_precious_stones_metals_coin… 2.89e 9 2.75e 9 4.65e 9 5.49e 9 6.37e 9
## 4 64_footwear_gaiters_and_the_like_part… 3.52e 9 3.86e 9 4.11e 9 4.51e 9 4.64e 9
## 5 26_ores_slag_and_ash                   5.08e 9 6.54e 9 1.92e 9 3.38e 9 3.57e 9
cont_mat
##                                                               2012        2013
## 27_mineral_fuels_oils_distillation_products_etc        63385110545 57413344503
## 15_animal_vegetable_fats_and_oils_cleavage_products_et 23344188665 21120339786
## 71_pearls_precious_stones_metals_coins_etc              2888507428  2751273080
## 64_footwear_gaiters_and_the_like_parts_thereof          3524592216  3860393881
## 26_ores_slag_and_ash                                    5082623155  6544111736
##                                                               2014        2015
## 27_mineral_fuels_oils_distillation_products_etc        51133125282 34652205368
## 15_animal_vegetable_fats_and_oils_cleavage_products_et 23593139533 20611270672
## 71_pearls_precious_stones_metals_coins_etc              4648183342  5494813580
## 64_footwear_gaiters_and_the_like_parts_thereof          4108448480  4507024372
## 26_ores_slag_and_ash                                    1918637694  3378428967
##                                                               2016
## 27_mineral_fuels_oils_distillation_products_etc        27874676922
## 15_animal_vegetable_fats_and_oils_cleavage_products_et 20682787965
## 71_pearls_precious_stones_metals_coins_etc              6368669445
## 64_footwear_gaiters_and_the_like_parts_thereof          4639859302
## 26_ores_slag_and_ash                                    3567655091

Uji Chi-Square pada Tabel Kontingensi

chi <- chisq.test(cont_mat)

chi
## 
##  Pearson's Chi-squared test
## 
## data:  cont_mat
## X-squared = 1.4989e+10, df = 16, p-value < 2.2e-16
chi$expected
##                                                               2012        2013
## 27_mineral_fuels_oils_distillation_products_etc        56571015468 52806972426
## 15_animal_vegetable_fats_and_oils_cleavage_products_et 26384793916 24629239431
## 71_pearls_precious_stones_metals_coins_etc              5344784018  4989160260
## 64_footwear_gaiters_and_the_like_parts_thereof          4980173247  4648809450
## 26_ores_slag_and_ash                                    4944255361  4615281418
##                                                               2014        2015
## 27_mineral_fuels_oils_distillation_products_etc        49185547845 39534185539
## 15_animal_vegetable_fats_and_oils_cleavage_products_et 22940202378 18438794663
## 71_pearls_precious_stones_metals_coins_etc              4647010980  3735158036
## 64_footwear_gaiters_and_the_like_parts_thereof          4330000929  3480352819
## 26_ores_slag_and_ash                                    4298772200  3455251902
##                                                               2016
## 27_mineral_fuels_oils_distillation_products_etc        36360741342
## 15_animal_vegetable_fats_and_oils_cleavage_products_et 16958696233
## 71_pearls_precious_stones_metals_coins_etc              3435333582
## 64_footwear_gaiters_and_the_like_parts_thereof          3200981806
## 26_ores_slag_and_ash                                    3177895762
chi$residuals
##                                                              2012      2013
## 27_mineral_fuels_oils_distillation_products_etc         28649.114  20045.34
## 15_animal_vegetable_fats_and_oils_cleavage_products_et -18719.023 -22358.64
## 71_pearls_precious_stones_metals_coins_etc             -33597.904 -31682.87
## 64_footwear_gaiters_and_the_like_parts_thereof         -20625.960 -11563.37
## 26_ores_slag_and_ash                                     1967.816  28391.93
##                                                                2014       2015
## 27_mineral_fuels_oils_distillation_products_etc          8781.64705 -24553.285
## 15_animal_vegetable_fats_and_oils_cleavage_products_et   4310.94776  15998.848
## 71_pearls_precious_stones_metals_coins_etc                 17.19788  28792.089
## 64_footwear_gaiters_and_the_like_parts_thereof          -3366.91816  17402.831
## 26_ores_slag_and_ash                                   -36301.89403  -1306.926
##                                                              2016
## 27_mineral_fuels_oils_distillation_products_etc        -44503.069
## 15_animal_vegetable_fats_and_oils_cleavage_products_et  28597.241
## 71_pearls_precious_stones_metals_coins_etc              50046.918
## 64_footwear_gaiters_and_the_like_parts_thereof          25432.100
## 26_ores_slag_and_ash                                     6913.957

Hasil Uji Chi-Square

Hasil uji menunjukkan nilai X-squared = 1.4989 × 10¹⁰, df = 16, dengan p-value < 2.2 × 10⁻¹⁶.

Keputusan: Tolak H0.

Kesimpulan: Terdapat hubungan yang signifikan antara kategori komoditas (category) dan tahun (year). Artinya, komposisi ekspor Indonesia menurut kategori komoditas tidak bersifat konstan antar tahun, melainkan mengalami perubahan/ketergantungan pola dari waktu ke waktu. Oleh karena itu, analisis lanjutan menggunakan Analisis Korespondensi (CA) layak dilakukan untuk memetakan asosiasi kategori–tahun serta mengidentifikasi tahun dan kategori yang paling membedakan struktur ekspor.

Analisis Korespondensi (CA)

library(FactoMineR)
## Warning: package 'FactoMineR' was built under R version 4.4.3
library(factoextra)
## Warning: package 'factoextra' was built under R version 4.4.3
## Loading required package: ggplot2
## Warning: package 'ggplot2' was built under R version 4.4.3
## Welcome! Want to learn more? See two factoextra-related books at https://goo.gl/ve3WBa
# 1) Run CA
ca_res <- CA(cont_mat, graph = FALSE)

# 2) Lihat eigenvalues / inertia (proporsi variasi tiap dimensi)
ca_res$eig
##         eigenvalue percentage of variance cumulative percentage of variance
## dim 1 3.116111e-02           8.462916e+01                          84.62916
## dim 2 5.604125e-03           1.522001e+01                          99.84917
## dim 3 5.552286e-05           1.507922e-01                          99.99996
## dim 4 1.373783e-08           3.730999e-05                         100.00000
# Kontribusi kategori & tahun ke dimensi
ca_res$row$contrib   # kontribusi baris (category)
##                                                             Dim 1      Dim 2
## 27_mineral_fuels_oils_distillation_products_etc        29.8488925  4.2263945
## 15_animal_vegetable_fats_and_oils_cleavage_products_et 14.9269960  2.0032076
## 71_pearls_precious_stones_metals_coins_etc             43.0628445  0.1268890
## 64_footwear_gaiters_and_the_like_parts_thereof         11.6755747  0.9240877
## 26_ores_slag_and_ash                                    0.4856922 92.7194212
##                                                             Dim 3       Dim 4
## 27_mineral_fuels_oils_distillation_products_etc         0.8575534  7.47387600
## 15_animal_vegetable_fats_and_oils_cleavage_products_et 15.0213277 41.18688765
## 71_pearls_precious_stones_metals_coins_etc              2.9830771 48.38582229
## 64_footwear_gaiters_and_the_like_parts_thereof         79.3815330  2.94863697
## 26_ores_slag_and_ash                                    1.7565088  0.00477709
ca_res$col$contrib   # kontribusi kolom (year)
##           Dim 1      Dim 2     Dim 3    Dim 4
## 2012 21.4117556  0.1991404 37.899723 16.36101
## 2013 16.9066605 30.5483063 16.456177 13.56590
## 2014  0.0239067 62.2830987  3.999974 12.71466
## 2015 15.6295100  0.2068181 22.024236 45.27752
## 2016 46.0281672  6.7626365 19.619889 12.08091
# 3) Biplot CA (category + year)
fviz_ca_biplot(ca_res, repel = TRUE)

# Plot terpisah
fviz_ca_row(ca_res, repel = TRUE)  # hanya category

fviz_ca_col(ca_res, repel = TRUE)  # hanya year

Hasil Analisis Korespondensi (CA)

Kecocokan pemetaan 2 dimensi (inertia)

Berdasarkan eigenvalues, Dimensi 1 menjelaskan 84,63% variasi (inertia) dan Dimensi 2 menjelaskan 15,22%. Secara kumulatif, dua dimensi pertama menjelaskan 99,85% variasi total.
Artinya, biplot 2D sudah sangat memadai untuk interpretasi pola asosiasi category × year.

Interpretasi Dimensi 1 (pola utama)

Dimensi 1 menangkap pergeseran struktur ekspor dari tahun-tahun awal ke tahun-tahun akhir pada periode yang dianalisis.

  • Titik tahun 2012–2013 berada di sisi kiri (Dim1 negatif) dan paling dekat dengan kategori 27 (mineral fuels/oils) → menunjukkan bahwa pada 2012–2013, struktur ekspor relatif lebih “fuel-heavy” dibanding pola rata-rata periode.
  • Titik tahun 2015–2016 berada di sisi kanan (Dim1 positif) dan lebih dekat dengan kategori 71 (pearls/precious stones/metals), serta juga searah dengan 64 (footwear) dan 15 (animal/vegetable fats & oils) → menunjukkan pada 2015–2016, struktur ekspor relatif bergeser dari dominasi fuels menuju kategori-kategori tersebut.

Kontribusi kategori ke Dimensi 1 juga menegaskan pola bahwa kategori 71 dan 27 adalah pendorong utama Dimensi 1 (kontribusi terbesar), sehingga Dimensi 1 dapat dibaca sebagai sumbu “fuel vs non-fuel (71/64/15)”.

Interpretasi Dimensi 2 (pola sekunder / kejadian spesifik)

Dimensi 2 terutama dipengaruhi oleh kategori 26 (ores, slag and ash):

  • Pada kontribusi baris, kategori 26 menyumbang ~92,72% terhadap Dimensi 2 → artinya Dimensi 2 pada dasarnya adalah “sumbu ores”.
  • Pada titik tahun, 2013 berada di sisi Dim2 positif (lebih dekat ke kategori 26), sedangkan 2014 berada di sisi Dim2 negatif (berlawanan arah dari kategori 26). Interpretasi ringkasnya: 2013 relatif lebih terkait dengan peningkatan porsi ores (26), sedangkan 2014 relatif menjauh dari ores (26) dibanding pola rata-rata.

Ringkasan asosiasi yang paling menonjol dari biplot

  • 2012–2013 ↔︎ 27 (mineral fuels/oils): asosiasi kuat pada awal periode.
  • 2016 ↔︎ 71 (pearls/precious stones/metals): asosiasi paling kuat pada akhir periode (posisi paling ekstrem di Dim1).
  • 2015–2016 ↔︎ 64 (footwear) dan 15 (fats/oils): ikut menguat pada periode akhir.
  • 2013 ↔︎ 26 (ores) (Dim2 positif), sedangkan 2014 cenderung berlawanan arah dengan 26 (ores) (Dim2 negatif).

Secara keseluruhan, CA menunjukkan adanya perubahan struktur ekspor Indonesia: dari kecenderungan “fuel-dominant” (2012–2013) menuju komposisi yang relatif lebih terkait dengan kategori 71/64/15 pada periode akhir (terutama 2016), serta adanya dinamika spesifik pada ores (26) yang terutama membedakan 2013 vs 2014.

Kesimpulan (Ringkasan)

Berdasarkan tabel kontingensi category × year (Indonesia, ekspor, 5 tahun terakhir, top-5 kategori berdasarkan nilai trade_usd), uji Chi-Square menunjukkan hasil yang sangat signifikan (p-value < 2.2e-16). Ini menegaskan bahwa komposisi ekspor Indonesia menurut kategori komoditas berbeda antar tahun (tidak independen), sehingga terdapat perubahan struktur ekspor dari waktu ke waktu.

Analisis Korespondensi (CA) memberikan pemetaan yang sangat representatif karena Dimensi 1 (84,63%) dan Dimensi 2 (15,22%) sudah menjelaskan 99,85% variasi total. Biplot CA memperlihatkan pola utama bahwa 2012–2013 berasosiasi kuat dengan kategori 27 (mineral fuels/oils), sedangkan 2015–2016 bergeser ke sisi yang lebih terkait dengan kategori 71 (pearls/precious stones/metals) serta turut searah dengan kategori 64 (footwear) dan kategori 15 (fats & oils).

Dimensi 2 terutama menangkap dinamika spesifik pada kategori 26 (ores, slag and ash), yang membedakan 2013 (lebih dekat ke ores) dan 2014 (cenderung berlawanan arah dari ores).

Secara keseluruhan, hasil ini menunjukkan adanya pergeseran struktur ekspor Indonesia dari pola yang lebih “fuel-dominant” pada awal periode menuju komposisi yang relatif lebih kuat pada kategori non-fuel tertentu di periode akhir, dengan variasi tambahan yang dipengaruhi oleh pergerakan kategori ores pada tahun tertentu.