Penelitian ini menggunakan data sekunder yang diperoleh dari laman akses terbuka milik Bank Indonesia pada sektor Pusat Informasi Harga Pangan Strategis Nasional (PIHPS). Data yang dianalisis berupa data harga mingguan cabai rawit merah dari 32 provinsi di Indonesia selama periode 6 Januari 2020 hingga 6 Januari 2025.
library(readxl)
library(tidyr)
library(ggplot2)
library(dplyr)
##
## 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
library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ forcats 1.0.0 ✔ readr 2.1.4
## ✔ lubridate 1.9.2 ✔ stringr 1.5.0
## ✔ purrr 1.0.1 ✔ tibble 3.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(cluster)
library(factoextra)
## Welcome! Want to learn more? See two factoextra-related books at https://goo.gl/ve3WBa
library(dendextend)
##
## ---------------------
## Welcome to dendextend version 1.17.1
## Type citation('dendextend') for how to cite the package.
##
## Type browseVignettes(package = 'dendextend') for the package vignette.
## The github page is: https://github.com/talgalili/dendextend/
##
## Suggestions and bug-reports can be submitted at: https://github.com/talgalili/dendextend/issues
## You may ask questions at stackoverflow, use the r and dendextend tags:
## https://stackoverflow.com/questions/tagged/dendextend
##
## To suppress this message use: suppressPackageStartupMessages(library(dendextend))
## ---------------------
##
##
## Attaching package: 'dendextend'
##
## The following object is masked from 'package:stats':
##
## cutree
skripsi <- read_excel("C:\\Users\\HAKIM\\OneDrive\\Documents\\Skripsi\\Tabel Harga Berdasarkan Komoditas (1).xlsx")
skripsi_clean <- skripsi %>%
# Hapus kolom No
select(-No) %>%
# Ganti nama kolom Komoditas menjadi Provinsi
rename(Provinsi = `Komoditas (Rp)`) %>%
# Hapus baris yang bernilai "Semua Provinsi"
filter(Provinsi != c("Semua Provinsi"))
skripsi_wide <- skripsi_clean %>%
pivot_longer(-Provinsi, names_to = "Date", values_to = "Price") %>%
mutate(
Price = as.numeric(gsub(",", "", Price)),
Date = as.Date(Date, format = "%d/%m/%Y")
) %>%
arrange(Date) %>%
pivot_wider(names_from = Provinsi, values_from = Price)
## Warning: There was 1 warning in `mutate()`.
## ℹ In argument: `Price = as.numeric(gsub(",", "", Price))`.
## Caused by warning:
## ! NAs introduced by coercion
skripsi_wide
## # A tibble: 262 × 33
## Date Aceh `Sumatera Utara` Riau Jambi Bengkulu `Sumatera Selatan`
## <date> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 2020-01-06 NA 49500 86250 83150 40500 50000
## 2 2020-01-13 NA 34000 87500 73750 45050 52500
## 3 2020-01-20 NA 34750 80000 83750 45200 58750
## 4 2020-01-27 NA 33650 86250 88750 45150 60500
## 5 2020-02-03 NA 35250 78750 88150 46700 64000
## 6 2020-02-10 NA 33250 70000 95000 47650 62000
## 7 2020-02-17 NA 34650 66650 72250 47600 57500
## 8 2020-02-24 NA 33250 50000 61150 47400 54250
## 9 2020-03-02 NA 30000 50000 43150 42900 48650
## 10 2020-03-09 NA 30400 48350 47750 36800 47000
## # ℹ 252 more rows
## # ℹ 26 more variables: `Kepulauan Bangka Belitung` <dbl>, Lampung <dbl>,
## # Banten <dbl>, `Jawa Barat` <dbl>, `DKI Jakarta` <dbl>, `Jawa Tengah` <dbl>,
## # `DI Yogyakarta` <dbl>, `Jawa Timur` <dbl>, Bali <dbl>,
## # `Nusa Tenggara Barat` <dbl>, `Nusa Tenggara Timur` <dbl>,
## # `Kalimantan Barat` <dbl>, `Kalimantan Selatan` <dbl>,
## # `Kalimantan Tengah` <dbl>, `Kalimantan Timur` <dbl>, …
na_counts <- skripsi_wide %>%
select(-Date) %>% # Hilangkan kolom Date
summarise(across(everything(), ~ sum(is.na(.)))) %>% # Hitung jumlah NA untuk setiap kolom
pivot_longer(
cols = everything(), # Ubah data menjadi format long
names_to = "Provinsi",
values_to = "na_count"
)
na_counts
## # A tibble: 32 × 2
## Provinsi na_count
## <chr> <int>
## 1 Aceh 260
## 2 Sumatera Utara 9
## 3 Riau 9
## 4 Jambi 9
## 5 Bengkulu 8
## 6 Sumatera Selatan 10
## 7 Kepulauan Bangka Belitung 9
## 8 Lampung 8
## 9 Banten 8
## 10 Jawa Barat 7
## # ℹ 22 more rows
library(imputeTS)
## Registered S3 method overwritten by 'quantmod':
## method from
## as.zoo.data.frame zoo
##
## Attaching package: 'imputeTS'
## The following object is masked from 'package:dendextend':
##
## na_locf
skripsi_imputasi <- skripsi_wide %>%
# Terapkan imputasi moving average untuk semua kolom kecuali kolom Date
mutate(across(-Date, ~ na_ma(.)))
na_counts <- skripsi_imputasi %>%
select(-Date) %>% # Hilangkan kolom Date karena tidak dihitung
summarise(across(everything(), ~ sum(is.na(.)))) %>% # Hitung jumlah NA per kolom (provinsi)
pivot_longer(
cols = everything(), # Ubah data dari format wide ke long
names_to = "Provinsi",
values_to = "na_count"
)
na_counts
## # A tibble: 32 × 2
## Provinsi na_count
## <chr> <int>
## 1 Aceh 0
## 2 Sumatera Utara 0
## 3 Riau 0
## 4 Jambi 0
## 5 Bengkulu 0
## 6 Sumatera Selatan 0
## 7 Kepulauan Bangka Belitung 0
## 8 Lampung 0
## 9 Banten 0
## 10 Jawa Barat 0
## # ℹ 22 more rows
library(tidyr)
library(ggplot2)
# Ubah data wide yang sudah diimputasi ke format long
impute_long <- skripsi_imputasi %>%
pivot_longer(
cols = -Date, # Semua kolom kecuali Date
names_to = "Provinsi", # Nama kolom baru untuk menyimpan nama provinsi
values_to = "Price" # Nama kolom baru untuk menyimpan nilai harga
)
# Buat line chart
ggplot(impute_long, aes(x = Date, y = Price, color = Provinsi, group = Provinsi)) +
geom_line(size = 1) +
labs(
title = "Line Chart Harga Provinsi (Data Imputasi)",
x = "Tanggal",
y = "Harga (Rp)"
) +
theme_minimal() +
theme(
axis.text.x = element_text(angle = 45, hjust = 1)
)
## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
## ℹ Please use `linewidth` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
skripsi_fix <- skripsi_imputasi %>%
select(-Aceh)
Amatan Provinsi Aceh dihapus karena terlalu banyak NA
library(ggplot2)
# Buat boxplot
skripsi_fix_long <- skripsi_fix %>%
pivot_longer(
cols = -Date, # Semua kolom kecuali Date
names_to = "Provinsi", # Nama kolom baru untuk menyimpan nama provinsi
values_to = "Price" # Nama kolom baru untuk menyimpan nilai harga
)
ggplot(skripsi_fix_long, aes(x = reorder(Provinsi, Price, median), y = Price)) +
geom_boxplot(fill = "skyblue", color = "darkblue", outlier.color = "red") +
labs(
title = "Distribusi Harga Cabai Rawit per Provinsi (2020-2024)",
x = "Provinsi",
y = "Harga (Rp)"
) +
theme_minimal() +
theme(
axis.text.x = element_text(angle = 90, vjust = 0.5, hjust = 1), # Rotasi nama provinsi
plot.title = element_text(hjust = 0.5)
) +
scale_y_continuous(labels = scales::comma_format())
# Load library tambahan
library(sf) # Untuk membaca peta shapefile
## Linking to GEOS 3.9.3, GDAL 3.5.2, PROJ 8.2.1; sf_use_s2() is TRUE
library(ggplot2)
library(dplyr)
library(ggspatial) # Untuk tambahan elemen peta
# Kalau belum ada, install dengan:
# install.packages(c("sf", "ggspatial"))
# --- STEP 1: Siapkan Data Harga 2024 ---
# Pastikan Date kolom bertipe Date
skripsi_2024 <- skripsi_fix %>%
filter(format(Date, "%Y") == "2024")
# Ambil rata-rata harga per provinsi sepanjang 2024
harga_rata2024 <- skripsi_2024 %>%
select(-Date) %>%
summarise(across(everything(), mean, na.rm = TRUE)) %>%
pivot_longer(cols = everything(), names_to = "Provinsi", values_to = "Harga")
## Warning: There was 1 warning in `summarise()`.
## ℹ In argument: `across(everything(), mean, na.rm = TRUE)`.
## Caused by warning:
## ! The `...` argument of `across()` is deprecated as of dplyr 1.1.0.
## Supply arguments directly to `.fns` through an anonymous function instead.
##
## # Previously
## across(a:b, mean, na.rm = TRUE)
##
## # Now
## across(a:b, \(x) mean(x, na.rm = TRUE))
# --- STEP 2: Ambil Data Peta Indonesia ---
# Menggunakan peta bawaan rnaturalearth
library(rnaturalearth)
library(rnaturalearthdata)
##
## Attaching package: 'rnaturalearthdata'
## The following object is masked from 'package:rnaturalearth':
##
## countries110
# Ambil shapefile provinsi Indonesia
indo_map <- ne_states(country = "Indonesia", returnclass = "sf")
# Lihat nama provinsi di shapefile
unique(indo_map$name)
## [1] "Kalimantan Timur" "Nusa Tenggara Timur" "Kalimantan Barat"
## [4] "Papua" "Jawa Timur" "Maluku"
## [7] "Nusa Tenggara Barat" "Sulawesi Selatan" "Jawa Tengah"
## [10] "Jawa Barat" "Jakarta Raya" "Banten"
## [13] "Yogyakarta" "Sulawesi Tenggara" "Papua Barat"
## [16] "Sulawesi Tengah" "Maluku Utara" "Kepulauan Riau"
## [19] "Riau" "Gorontalo" "Sulawesi Utara"
## [22] "Sulawesi Barat" "Jambi" "Sumatera Selatan"
## [25] "Lampung" "Bengkulu" "Sumatera Barat"
## [28] "Sumatera Utara" "Aceh" "Kalimantan Tengah"
## [31] "Kalimantan Selatan" "Bali" "Bangka-Belitung"
# --- STEP 3: Padankan Nama Provinsi ---
# Sesuaikan nama kalau ada beda, contoh "DKI Jakarta" vs "Jakarta Raya", dll.
harga_rata2024 <- harga_rata2024 %>%
mutate(Provinsi = recode(Provinsi,
"DKI Jakarta" = "Jakarta Raya",
"DI Yogyakarta" = "Yogyakarta",
"Bangka Belitung" = "Kepulauan Bangka Belitung",
"Papua Barat" = "Papua Barat",
"Kalimantan Utara" = "Kalimantan Utara",
"Kepulauan Bangka Belitung" = "Bangka-Belitung"
))
# Gabungkan data harga ke data peta
peta_harga <- indo_map %>%
left_join(harga_rata2024, by = c("name" = "Provinsi"))
# --- STEP 4: Plot Peta Harga (Tanpa North Arrow) ---
ggplot(data = peta_harga) +
geom_sf(aes(fill = Harga), color = "white") +
scale_fill_viridis_c(option = "plasma", na.value = "grey90") +
labs(
title = "Sebaran Harga Cabai Rawit di Indonesia (Tahun 2024)",
fill = "Harga (Rp)"
) +
theme_minimal() +
theme(
plot.title = element_text(hjust = 0.5),
legend.position = "right"
) +
annotation_scale(location = "bl", width_hint = 0.5) # Hanya scale bar, tidak ada north arrow
# --- STEP 1: Buat Rata-Rata Harga per Tahun ---
library(dplyr)
library(tidyr)
# Tambahkan kolom tahun
skripsi_fix_sebaran <- skripsi_fix %>%
mutate(Year = format(Date, "%Y"))
# Ambil data rata-rata harga per provinsi untuk tiap tahun
harga_rata_tahunan <- skripsi_fix_sebaran %>%
filter(Year %in% c("2020", "2021", "2022", "2023", "2024")) %>%
group_by(Year) %>%
summarise(across(-Date, mean, na.rm = TRUE)) %>%
pivot_longer(
cols = -Year,
names_to = "Provinsi",
values_to = "Harga"
)
# --- STEP 2: Sesuaikan Nama Provinsi ---
harga_rata_tahunan <- harga_rata_tahunan %>%
mutate(Provinsi = recode(Provinsi,
"DKI Jakarta" = "Jakarta Raya",
"DI Yogyakarta" = "Yogyakarta",
"Kepulauan Bangka Belitung" = "Bangka-Belitung"
))
# --- STEP 3: Gabungkan ke Data Peta ---
# Duplikat peta untuk semua tahun
library(rnaturalearth)
library(rnaturalearthdata)
library(sf)
indo_map <- ne_states(country = "Indonesia", returnclass = "sf")
# Gabungkan peta dengan harga
peta_harga_tahunan <- indo_map %>%
right_join(harga_rata_tahunan, by = c("name" = "Provinsi"))
# --- STEP 4: Plot dengan Facet Wrap ---
library(ggplot2)
library(ggspatial)
library(viridis)
## Loading required package: viridisLite
library(scales) # untuk fungsi comma_format
##
## Attaching package: 'scales'
## The following object is masked from 'package:viridis':
##
## viridis_pal
## The following object is masked from 'package:purrr':
##
## discard
## The following object is masked from 'package:readr':
##
## col_factor
ggplot(data = peta_harga_tahunan) +
geom_sf(aes(fill = Harga), color = "white") +
scale_fill_viridis_c(
option = "plasma",
na.value = "grey90",
labels = comma_format() # ⬅️ Ini yang bikin angkanya tidak pakai E
) +
labs(
title = "Sebaran Harga Cabai Rawit di Indonesia (2020-2024)",
fill = "Harga (Rp)"
) +
theme_minimal() +
theme(
plot.title = element_text(hjust = 0.5),
legend.position = "right",
strip.text = element_text(size = 12)
) +
annotation_scale(location = "bl", width_hint = 0.3) +
facet_wrap(~Year)
skripsi_fixa <- skripsi_fix[,-1]
# Membuat list untuk menyimpan hasil lag signifikan
lag_signif_list <- list()
# Looping untuk mengecek lag signifikan setiap provinsi
for (prov in colnames(skripsi_fixa)) {
# Hitung ACF tanpa plotting
acf_result <- acf(skripsi_fixa[[prov]], plot = FALSE)
# Menentukan lag signifikan berdasarkan threshold ±2/sqrt(N)
significant_lags <- which(abs(acf_result$acf[-1]) > 2/sqrt(nrow(skripsi_fixa)))
# Simpan hasil ke dalam list
lag_signif_list[[prov]] <- significant_lags
}
# Konversi hasil ke dalam dataframe agar lebih mudah dibaca
lag_signif_df <- tibble::tibble(
Provinsi = names(lag_signif_list),
Lag_Signifikan = sapply(lag_signif_list, function(lag) paste(lag, collapse = ", "))
)
# Tampilkan hasil
print(lag_signif_df)
## # A tibble: 31 × 2
## Provinsi Lag_Signifikan
## <chr> <chr>
## 1 Sumatera Utara 1, 2, 3, 4, 5, 6, 7, 16, 17, 18, 19, 20
## 2 Riau 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 20, 21,…
## 3 Jambi 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 18, 19, 20, 21,…
## 4 Bengkulu 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 24
## 5 Sumatera Selatan 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14
## 6 Kepulauan Bangka Belitung 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11
## 7 Lampung 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 16, 17, 18, 19, 20,…
## 8 Banten 1, 2, 3, 4, 5, 6, 7, 8, 9, 16, 17, 18, 19, 20, 21,…
## 9 Jawa Barat 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 16, 17, 18, 19,…
## 10 DKI Jakarta 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 16, 17, 18, 19, 20,…
## # ℹ 21 more rows
# Opsional: Menampilkan semua plot ACF dalam satu grid
for (prov in colnames(skripsi_fixa)) {
acf(skripsi_fixa[[prov]], main = paste("ACF -", prov))
}
# Buat daftar lag signifikan dari semua provinsi
lag_frequencies <- table(unlist(lag_signif_list))
# Tampilkan lag dengan kemunculan terbanyak
lag_frequencies <- sort (lag_frequencies, decreasing = TRUE)
print(lag_frequencies)
##
## 1 2 3 4 5 6 7 9 8 10 24 11 22 23 20 21 19 18 12 17 16 13 14 15
## 31 31 31 31 31 30 29 29 28 23 21 18 17 17 16 16 15 14 12 12 11 10 6 4
Diatas merupakan frekuensi lag yang signifikan. Dari hasil eksplorasi ACF, akan digunakan lag 10 sebagai lag global clustering time series feature based.
# Data awal (tanpa kolom "date")
skripsi_fix <- skripsi_fix[,-1]
# 1️⃣ Ekstraksi fitur berbasis lag (menggunakan 10 lag)
compute_acf_features <- function(series, max_lag = 10) {
acf_values <- acf(series, plot = FALSE)$acf[2:(max_lag + 1)]
return(acf_values)
}
# Membuat dataframe fitur berbasis lag
lag_features <- t(apply(skripsi_fix, 2, compute_acf_features)) %>% as.data.frame()
colnames(lag_features) <- paste0("Lag_", 1:10)
library(writexl)
write_xlsx(lag_features, path = "lag_features.xlsx")
# 2️⃣ Menghitung matriks jarak menggunakan euclidean)
euc_distance_matrix <- dist(lag_features, method = "euclidean")
# 3️⃣ Clustering Hierarki dengan 5 metode linkage
linkage_methods <- c("single", "complete", "ward.D", "average", "centroid")
# Menyimpan hasil clustering
clustering_results <- list()
for (linkage in linkage_methods) {
clustering_results[[linkage]] <- hclust(euc_distance_matrix, method = linkage)
}
par(mfrow = c(3, 2))
# Menampilkan dendrogram untuk setiap metode linkage
for (linkage in linkage_methods) {
plot(clustering_results[[linkage]],
main = paste("Dendrogram -", linkage, "Linkage"),
xlab = "",
sub = "",
cex = 0.6) # Atur ukuran teks agar lebih terbaca
}
# 4️⃣ Evaluasi ukuran ketidakmiripan menggunakan korelasi Cophenetic
cophenetic_results <- sapply(clustering_results, function(hc) cor(euc_distance_matrix, cophenetic(hc)))
cophenetic_results
## single complete ward.D average centroid
## 0.7030852 0.7873722 0.7583137 0.7867708 0.7767157
fviz_nbclust(lag_features, FUN = hcut, method = "silhouette") # Silhouette Score
fviz_nbclust(lag_features, FUN = hcut, method = "wss") # Elbow Method
fviz_nbclust(lag_features, FUN = hcut, method = "gap_stat") # Gap Statistics
# 6️⃣ Identifikasi anggota provinsi di setiap cluster optimal
optimal_k <- 7 # Menggunakan Calinski-Harabasz sebagai referensi
final_cluster <- cutree(clustering_results[["complete"]], k = optimal_k)
# Menambahkan hasil cluster ke dalam dataframe
cluster_results_df <- data.frame(Provinsi = colnames(skripsi_fix), Cluster = final_cluster)
# Menampilkan hasil cluster
print(cluster_results_df)
## Provinsi Cluster
## Sumatera Utara Sumatera Utara 1
## Riau Riau 2
## Jambi Jambi 3
## Bengkulu Bengkulu 2
## Sumatera Selatan Sumatera Selatan 4
## Kepulauan Bangka Belitung Kepulauan Bangka Belitung 5
## Lampung Lampung 3
## Banten Banten 5
## Jawa Barat Jawa Barat 3
## DKI Jakarta DKI Jakarta 5
## Jawa Tengah Jawa Tengah 3
## DI Yogyakarta DI Yogyakarta 5
## Jawa Timur Jawa Timur 5
## Bali Bali 5
## Nusa Tenggara Barat Nusa Tenggara Barat 3
## Nusa Tenggara Timur Nusa Tenggara Timur 4
## Kalimantan Barat Kalimantan Barat 2
## Kalimantan Selatan Kalimantan Selatan 4
## Kalimantan Tengah Kalimantan Tengah 2
## Kalimantan Timur Kalimantan Timur 3
## Kalimantan Utara Kalimantan Utara 6
## Gorontalo Gorontalo 7
## Sulawesi Selatan Sulawesi Selatan 5
## Sulawesi Tenggara Sulawesi Tenggara 4
## Sulawesi Tengah Sulawesi Tengah 5
## Sulawesi Utara Sulawesi Utara 7
## Sulawesi Barat Sulawesi Barat 3
## Maluku Maluku 3
## Maluku Utara Maluku Utara 6
## Papua Papua 1
## Papua Barat Papua Barat 7
# Plot dendrogram
fviz_dend(clustering_results[["complete"]], k = optimal_k, cex = 0.8, rect = TRUE)
## Warning: The `<scale>` argument of `guides()` cannot be `FALSE`. Use "none" instead as
## of ggplot2 3.3.4.
## ℹ The deprecated feature was likely used in the factoextra package.
## Please report the issue at <https://github.com/kassambara/factoextra/issues>.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
library(scales)
## Filter hanya untuk provinsi yang diinginkan
selected_provinces <- c("Sumatera Utara", "Papua")
filtered_data <- impute_long %>%
filter(Provinsi %in% selected_provinces)
# Buat line chart
ggplot(filtered_data, aes(x = Date, y = Price, color = Provinsi, group = Provinsi)) +
geom_line(size = 1) +
labs(
title = "Plot Deret Waktu Harga Cabai Rawit Provinsi Gerombol 1",
x = "Tanggal",
y = "Harga (Rp)"
) +
theme_minimal() +
scale_y_continuous(labels = label_comma()) +
theme(axis.text.x = element_text(angle = 45, hjust = 1))
## Filter hanya untuk provinsi yang diinginkan
selected_provinces <- c("Sulawesi Utara", "Gorontalo", "Papua Barat")
filtered_data <- impute_long %>%
filter(Provinsi %in% selected_provinces)
# Buat line chart
ggplot(filtered_data, aes(x = Date, y = Price, color = Provinsi, group = Provinsi)) +
geom_line(size = 1) +
labs(
title = "Plot Deret Waktu Harga Cabai Rawit Provinsi Gerombol 2",
x = "Tanggal",
y = "Harga (Rp)"
) +
theme_minimal() +
scale_y_continuous(labels = label_comma()) +
theme(axis.text.x = element_text(angle = 45, hjust = 1))
## Filter hanya untuk provinsi yang diinginkan
selected_provinces <- c("Kalimantan Utara", "Maluku Utara")
filtered_data <- impute_long %>%
filter(Provinsi %in% selected_provinces)
# Buat line chart
ggplot(filtered_data, aes(x = Date, y = Price, color = Provinsi, group = Provinsi)) +
geom_line(size = 1) +
labs(
title = "Plot Deret Waktu Harga Cabai Rawit Provinsi Gerombol 3",
x = "Tanggal",
y = "Harga (Rp)"
) +
theme_minimal() +
scale_y_continuous(labels = label_comma()) +
theme(axis.text.x = element_text(angle = 45, hjust = 1))
## Filter hanya untuk provinsi yang diinginkan
selected_provinces <- c("Sulawesi Tenggara", "Nusa Tenggara Timur", "Sumatera Selatan", "Kalimantan Selatan")
filtered_data <- impute_long %>%
filter(Provinsi %in% selected_provinces)
# Buat line chart
ggplot(filtered_data, aes(x = Date, y = Price, color = Provinsi, group = Provinsi)) +
geom_line(size = 1) +
labs(
title = "Plot Deret Waktu Harga Cabai Rawit Provinsi Gerombol 4",
x = "Tanggal",
y = "Harga (Rp)"
) +
theme_minimal() +
scale_y_continuous(labels = label_comma()) +
theme(axis.text.x = element_text(angle = 45, hjust = 1))
## Filter hanya untuk provinsi yang diinginkan
selected_provinces <- c("Kalimantan Barat", "Bengkulu", "Riau", "Kalimantan Tengah")
filtered_data <- impute_long %>%
filter(Provinsi %in% selected_provinces)
# Buat line chart
ggplot(filtered_data, aes(x = Date, y = Price, color = Provinsi, group = Provinsi)) +
geom_line(size = 1) +
labs(
title = "Plot Deret Waktu Harga Cabai Rawit Provinsi Gerombol 5",
x = "Tanggal",
y = "Harga (Rp)"
) +
theme_minimal() +
scale_y_continuous(labels = label_comma()) +
theme(axis.text.x = element_text(angle = 45, hjust = 1))
## Filter hanya untuk provinsi yang diinginkan
selected_provinces <- c("DI Yogyakarta", "Sulawesi Tengah", "Kepulauan Bangka Belitung", "Sulawesi Selatan", "Banten", "Jawa Timur", "DKI Jakarta", "Bali")
filtered_data <- impute_long %>%
filter(Provinsi %in% selected_provinces)
# Buat line chart
ggplot(filtered_data, aes(x = Date, y = Price, color = Provinsi, group = Provinsi)) +
geom_line(size = 1) +
labs(
title = "Plot Deret Waktu Harga Cabai Rawit Provinsi Gerombol 6",
x = "Tanggal",
y = "Harga (Rp)"
) +
theme_minimal() +
scale_y_continuous(labels = label_comma()) +
theme(axis.text.x = element_text(angle = 45, hjust = 1))
## Filter hanya untuk provinsi yang diinginkan
selected_provinces <- c("Maluku", "Sulawesi Barat", "Nusa Tenggara Barat", "Kalimantan Timur", "Jawa Tengah", "Jambi", "Lampung", "Jawa Barat")
filtered_data <- impute_long %>%
filter(Provinsi %in% selected_provinces)
# Buat line chart
ggplot(filtered_data, aes(x = Date, y = Price, color = Provinsi, group = Provinsi)) +
geom_line(size = 1) +
labs(
title = "Plot Deret Waktu Harga Cabai Rawit Provinsi Gerombol 7",
x = "Tanggal",
y = "Harga (Rp)"
) +
theme_minimal() +
scale_y_continuous(labels = label_comma()) +
theme(axis.text.x = element_text(angle = 45, hjust = 1))