Dokumen ini menyajikan analisis eksplorasi terhadap data ekspor Crude Palm Oil (CPO) Indonesia dari tahun 2020 hingga 2024. Tujuan dari analisis ini adalah untuk memahami tren nilai dan volume ekspor, serta mengidentifikasi pola-pola penting yang dapat digunakan untuk pengambilan keputusan.
Data yang digunakan mencakup: - Tahun dan Bulan ekspor - Nilai Ekspor dalam juta US Dollar (US$) - Volume Ekspor dalam satuan ton
library(readxl)
## Warning: package 'readxl' was built under R version 4.3.3
library(tidyverse)
## Warning: package 'tidyverse' was built under R version 4.3.3
## Warning: package 'tibble' was built under R version 4.3.3
## Warning: package 'tidyr' was built under R version 4.3.3
## Warning: package 'readr' was built under R version 4.3.3
## Warning: package 'purrr' was built under R version 4.3.3
## Warning: package 'dplyr' was built under R version 4.3.3
## Warning: package 'stringr' was built under R version 4.3.3
## Warning: package 'forcats' was built under R version 4.3.3
## Warning: package 'lubridate' was built under R version 4.3.3
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr 1.1.4 ✔ readr 2.1.5
## ✔ forcats 1.0.0 ✔ stringr 1.5.1
## ✔ ggplot2 3.5.2 ✔ tibble 3.2.1
## ✔ lubridate 1.9.4 ✔ tidyr 1.3.1
## ✔ purrr 1.0.4
## ── 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(dplyr)
library(ggplot2)
library(lubridate)
library(scales)
##
## Attaching package: 'scales'
##
## The following object is masked from 'package:purrr':
##
## discard
##
## The following object is masked from 'package:readr':
##
## col_factor
# Muat Data dalam format tibble
cpo_raw <- tribble(
~Tahun, ~Bulan, ~`Nilai Ekspor (Juta US$)`, ~`Volume Ekspor (Ton)`,
2020,"Januari",1400,1200000,
2020,"Februari",1350,1150000,
2020,"Maret",1450,1250000,
2020,"April",1500,1300000,
2020,"Mei",1400,1200000,
2020,"Juni",1450,1250000,
2020,"Juli",1500,1300000,
2020,"Agustus",1550,1350000,
2020,"September",1600,1400000,
2020,"Oktober",1650,1450000,
2020,"November",1700,1500000,
2020,"Desember",1750,1550000,
2021,"Januari",1500,1300000,
2021,"Februari",1550,1350000,
2021,"Maret",1600,1400000,
2021,"April",1650,1450000,
2021,"Mei",1700,1500000,
2021,"Juni",1750,1550000,
2021,"Juli",1800,1600000,
2021,"Agustus",1850,1650000,
2021,"September",1900,1700000,
2021,"Oktober",1950,1750000,
2021,"November",2000,1800000,
2021,"Desember",2050,1850000,
2022,"Januari",1600,1400000,
2022,"Februari",1650,1450000,
2022,"Maret",1700,1500000,
2022,"April",1750,1550000,
2022,"Mei",1800,1600000,
2022,"Juni",1850,1650000,
2022,"Juli",1900,1700000,
2022,"Agustus",1950,1750000,
2022,"September",2000,1800000,
2022,"Oktober",2050,1850000,
2022,"November",2100,1900000,
2022,"Desember",2150,1950000,
2023,"Januari",1700,1500000,
2023,"Februari",1750,1550000,
2023,"Maret",1800,1600000,
2023,"April",1850,1650000,
2023,"Mei",1900,1700000,
2023,"Juni",1950,1750000,
2023,"Juli",2000,1800000,
2023,"Agustus",2050,1850000,
2023,"September",2100,1900000,
2023,"Oktober",2150,1950000,
2023,"November",2200,2000000,
2023,"Desember",2250,2050000,
2024,"Januari",1800,1600000,
2024,"Februari",1850,1650000,
2024,"Maret",1900,1700000,
2024,"April",1950,1750000,
2024,"Mei",2000,1800000,
2024,"Juni",2050,1850000,
2024,"Juli",2100,1900000,
2024,"Agustus",2150,1950000,
2024,"September",2200,2000000,
2024,"Oktober",2250,2050000,
2024,"November",2300,2100000,
2024,"Desember",2350,2150000
)
# Buat kolom tanggal dari Tahun dan Bulan
# Bulan dalam bahasa Indonesia:
bulan_angka <- c("Januari"=1,"Februari"=2,"Maret"=3,"April"=4,"Mei"=5,"Juni"=6,
"Juli"=7,"Agustus"=8,"September"=9,"Oktober"=10,"November"=11,"Desember"=12)
cpo_data <- cpo_raw %>%
mutate(
Bulan_num = bulan_angka[Bulan],
tanggal = make_date(year = Tahun, month = Bulan_num, day = 1)
) %>%
select(tanggal, Tahun, Bulan, `Nilai Ekspor (Juta US$)`, `Volume Ekspor (Ton)`)
head(cpo_data)
## # A tibble: 6 × 5
## tanggal Tahun Bulan `Nilai Ekspor (Juta US$)` `Volume Ekspor (Ton)`
## <date> <dbl> <chr> <dbl> <dbl>
## 1 2020-01-01 2020 Januari 1400 1200000
## 2 2020-02-01 2020 Februari 1350 1150000
## 3 2020-03-01 2020 Maret 1450 1250000
## 4 2020-04-01 2020 April 1500 1300000
## 5 2020-05-01 2020 Mei 1400 1200000
## 6 2020-06-01 2020 Juni 1450 1250000
# Struktur Data
str(cpo_data)
## tibble [60 × 5] (S3: tbl_df/tbl/data.frame)
## $ tanggal : Date[1:60], format: "2020-01-01" "2020-02-01" ...
## $ Tahun : num [1:60] 2020 2020 2020 2020 2020 2020 2020 2020 2020 2020 ...
## $ Bulan : chr [1:60] "Januari" "Februari" "Maret" "April" ...
## $ Nilai Ekspor (Juta US$): num [1:60] 1400 1350 1450 1500 1400 1450 1500 1550 1600 1650 ...
## $ Volume Ekspor (Ton) : num [1:60] 1200000 1150000 1250000 1300000 1200000 1250000 1300000 1350000 1400000 1450000 ...
# Standard Deviation, Variance
var(cpo_data$`Nilai Ekspor (Juta US$)`)
## [1] 63449.15
var(cpo_data$`Volume Ekspor (Ton)`)
## [1] 63449152542
# Analisis Data Deskriptif
summary(cpo_data)
## tanggal Tahun Bulan Nilai Ekspor (Juta US$)
## Min. :2020-01-01 Min. :2020 Length:60 Min. :1350
## 1st Qu.:2021-03-24 1st Qu.:2021 Class :character 1st Qu.:1650
## Median :2022-06-16 Median :2022 Mode :character Median :1850
## Mean :2022-06-16 Mean :2022 Mean :1845
## 3rd Qu.:2023-09-08 3rd Qu.:2023 3rd Qu.:2050
## Max. :2024-12-01 Max. :2024 Max. :2350
## Volume Ekspor (Ton)
## Min. :1150000
## 1st Qu.:1450000
## Median :1650000
## Mean :1645000
## 3rd Qu.:1850000
## Max. :2150000
Note that the echo = FALSE parameter was added to the
code chunk to prevent printing of the R code that generated the
plot.
ggplot(cpo_data, aes(x = tanggal, y = `Volume Ekspor (Ton)`)) +
geom_line(color = "darkgreen") +
geom_point(color = "green4", size=1) +
scale_x_date(date_labels = "%Y-%b", date_breaks = "6 months") +
labs(title = "Tren Volume Ekspor CPO Indonesia (2020-2024)",
x = "Tanggal",
y = "Volume Ekspor (Ton)") +
theme_minimal() +
theme(axis.text.x = element_text(angle = 45, hjust = 1))
cpo_data %>%
summarise(
Min_Nilai_USD = min(`Nilai Ekspor (Juta US$)`),
Max_Nilai_USD = max(`Nilai Ekspor (Juta US$)`),
Mean_Nilai_USD = mean(`Nilai Ekspor (Juta US$)`),
Min_Volume_Ton = min(`Volume Ekspor (Ton)`),
Max_Volume_Ton = max(`Volume Ekspor (Ton)`),
Mean_Volume_Ton = mean(`Volume Ekspor (Ton)`)
)
## # A tibble: 1 × 6
## Min_Nilai_USD Max_Nilai_USD Mean_Nilai_USD Min_Volume_Ton Max_Volume_Ton
## <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 1350 2350 1845 1150000 2150000
## # ℹ 1 more variable: Mean_Volume_Ton <dbl>
cor_test <- cor.test(cpo_data$`Nilai Ekspor (Juta US$)`, cpo_data$`Volume Ekspor (Ton)`)
cor_test$estimate
## cor
## 1
cpo_data %>%
mutate(Bulan_fct = factor(Bulan, levels = names(bulan_angka))) %>%
group_by(Bulan_fct) %>%
summarise(
Rata2_Nilai = mean(`Nilai Ekspor (Juta US$)`),
Rata2_Volume = mean(`Volume Ekspor (Ton)`)
) %>%
gather(key = "Jenis", value = "Rata2", Rata2_Nilai, Rata2_Volume) %>%
ggplot(aes(x = Bulan_fct, y = Rata2, fill = Jenis)) +
geom_bar(stat = "identity", position = "dodge") +
labs(title = "Pola Musiman Rata-rata Nilai dan Volume Ekspor per Bulan",
x = "Bulan",
y = "Nilai Rata-rata",
fill = "") +
theme_minimal()
# Model regresi linier
model <- lm(`Nilai Ekspor (Juta US$)` ~ `Volume Ekspor (Ton)`, data = cpo_data)
summary(model)
## Warning in summary.lm(model): essentially perfect fit: summary may be
## unreliable
##
## Call:
## lm(formula = `Nilai Ekspor (Juta US$)` ~ `Volume Ekspor (Ton)`,
## data = cpo_data)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1.846e-13 -9.817e-15 4.980e-15 1.241e-14 2.969e-14
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 2.000e+02 2.572e-14 7.775e+15 <2e-16 ***
## `Volume Ekspor (Ton)` 1.000e-03 1.546e-20 6.468e+16 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 2.991e-14 on 58 degrees of freedom
## Multiple R-squared: 1, Adjusted R-squared: 1
## F-statistic: 4.183e+33 on 1 and 58 DF, p-value: < 2.2e-16
ggplot(cpo_data, aes(x = `Volume Ekspor (Ton)`, y = `Nilai Ekspor (Juta US$)`)) +
geom_point(color = "darkorange") +
geom_smooth(method = "lm", se = TRUE, color = "blue") +
labs(title = "Plot Regresi Nilai Ekspor terhadap Volume Ekspor",
x = "Volume Ekspor (Ton)", y = "Nilai Ekspor (Juta US$)") +
theme_minimal()
## `geom_smooth()` using formula = 'y ~ x'
Dari analisis di atas, dapat terlihat bahwa terdapat tren peningkatan volume penjualan dan harga rata-rata CPO Indonesia dari tahun 2020 hingga 2024. Analisis korelasi menunjukkan adanya hubungan positif antara volume penjualan dan harga rata-rata. Berdasarkan hasil regresi terlihat Koefisien regresi untuk Volume Ekspor, menunjukkan rata-rata kenaikan nilai ekspor untuk setiap kenaikan satu ton volume ekspor. Nilai R-squared yang menunjukkan seberapa baik model menjelaskan variasi nilai ekspor. Signifikansi statistik koefisien yang mengindikasikan apakah hubungan volume ke nilai ekspor bermakna secara statistik.