Input Data

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")

Preprocessing Data

Menghapus Kolom dan Amatan yang Tidak Perlu

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")) 

Mengubah menjadi format wide

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>, …

Mengecek NA

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

Imputasi Moving Average

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

Eksplorasi Data

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.

Menghapus Amatan Provinsi Aceh

skripsi_fix <- skripsi_imputasi %>% 
  select(-Aceh)

Amatan Provinsi Aceh dihapus karena terlalu banyak NA

Plot Kotak Garis Tiap Provinsi Di Indonesia

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())

Plot Peta Sebaran Harga Cabai

# 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)

Pemodelan Clustering Time Series (Euclidean + Hierarki)

1. Identifikasi Peubah Lag Signifikan dari Masing-masing Provinsi

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.

2. Ekstrasi Fitur dari Masing-masing observasi

# 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")

3. Menghitung Matriks Jarak Euclidean

# 2️⃣ Menghitung matriks jarak menggunakan euclidean)
euc_distance_matrix <- dist(lag_features, method = "euclidean")

4. Klasterisasi Hierarki

# 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
}

5. Evaluasi Ukuran Ketidakmiripan

# 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

6. Menentukan jumlah cluster optimal

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

7. Menampilkan Hasil Klaster Linkage Terbaik

# 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))