1 Pendahuluan

Sektor industri pengolahan merupakan salah satu sektor yang memiliki peran dalam mendukung pertumbuhan ekonomi nasional. Sektor ini memberikan kontribusi dalam meningkatkan nilai tambah produk, memperluas peluang kerja, serta mendorong perkembangan kegiatan ekonomi di berbagai daerah. Salah satu subsektor yang cukup signifikan dalam industri pengolahan adalah industri makanan. Untuk memantau perkembangan aktivitas produksi pada sektor ini, Badan Pusat Statistik (BPS) menyediakan indikator statistik berupa Indeks Produksi Bulanan untuk Industri Besar dan Sedang (IBS). Indeks ini menunjukkan perubahan tingkat produksi industri dari waktu ke waktu berdasarkan klasifikasi lapangan usaha yang mengacu pada Klasifikasi Baku Lapangan Usaha Indonesia (KBLI).


Indeks Produksi Bulanan untuk Industri Besar dan Sedang pada sektor makanan mencerminkan kondisi dan dinamika aktivitas produksi makanan dalam suatu periode tertentu. Perubahan nilai indeks produksi tersebut dapat dipengaruhi oleh beragam faktor, seperti tingkat permintaan pasar, keadaan ekonomi, kebijakan pemerintah, serta adanya pola musiman dalam kegiatan produksi. Oleh karena itu, analisis terhadap data indeks produksi sangat penting untuk memahami pola pergerakan produksi serta meramalkan kemungkinan perkembangan produksi di masa mendatang.


Salah satu teknik yang dapat digunakan dalam menganalisis data runtun waktu adalah metode Autoregressive Integrated Moving Average (ARIMA). Metode ARIMA adalah pendekatan statistik yang dapat memodelkan hubungan antara nilai suatu variabel dengan nilai variabel tersebut pada periode sebelumnya. Teknik ini banyak diterapkan dalam analisis runtun waktu karena dapat menggambarkan pola data dan menghasilkan model yang dapat digunakan untuk melakukan peramalan. Proses pemodelan dengan metode ARIMA umumnya memiliki beberapa tahap, yaitu identifikasi model, pengujian stasioneritas data, estimasi parameter model, serta evaluasi model melalui pengujian diagnostik.


Berdasarkan hal tersebut, penelitian ini dilakukan untuk menganalisis pola pergerakan Indeks Produksi Bulanan untuk Industri Besar dan Sedang sektor makanan menurut KBLI pada periode tahun 2020 hingga 2024. Selain itu, penelitian ini juga bertujuan untuk membangun model runtun waktu menggunakan metode ARIMA yang dapat digunakan untuk menggambarkan karakteristik data serta melakukan peramalan terhadap nilai produksi pada periode mendatang. Hasil analisis diharapkan dapat memberikan gambaran mengenai perkembangan produksi industri makanan serta menjadi salah satu referensi dalam memahami dinamika sektor industri pengolahan di Indonesia.

2 Tujuan Analisis

Tujuan dari analisis ini adalah:

  1. Mengidentifikasi pola data produksi industri makanan.
  2. Menguji stasioneritas data time series.
  3. Menentukan model ARIMA yang paling sesuai.
  4. Melakukan peramalan nilai produksi pada periode mendatang.

3 Data dan Preprocessing

3.1 Sumber data dan variabel

Data yang digunakan dalam penelitian ini merupakan data sekunder yang diperoleh dari publikasi resmi Badan Pusat Statistik (BPS), yaitu Indeks Produksi Bulanan Industri Besar dan Sedang (IBS) sektor makanan menurut KBLI dengan periode Januari 2020 sampai Desember 2024.

file_path <- "/Users/kai/Documents/produksi makanan .xlsx"
raw <- read_excel(file_path, sheet = "Data Produksi Makanan")

head(raw, 10)
## # A tibble: 10 × 3
##       No Periode        `Data Produksi Makanan`
##    <dbl> <chr>                            <dbl>
##  1     1 Januari 2020                      202.
##  2     2 Februari 2020                     194.
##  3     3 Maret 2020                        203.
##  4     4 April 2020                        198.
##  5     5 Mei 2020                          180.
##  6     6 Juni 2020                         197.
##  7     7 Juli 2020                         202.
##  8     8 Agustus 2020                      198.
##  9     9 September 2020                    204.
## 10    10 Oktober 2020                      210.
str(raw)
## tibble [60 × 3] (S3: tbl_df/tbl/data.frame)
##  $ No                   : num [1:60] 1 2 3 4 5 6 7 8 9 10 ...
##  $ Periode              : chr [1:60] "Januari 2020" "Februari 2020" "Maret 2020" "April 2020" ...
##  $ Data Produksi Makanan: num [1:60] 202 194 203 198 180 ...

3.2 Pembersihan data (cleaning)

# mapping bulan Indonesia -> angka bulan
bulan_id <- 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
)

df <- raw %>%
  mutate(
    # bersihkan produksi: hapus spasi; ubah koma jadi titik; jadi numeric
    produksi = `Data Produksi Makanan` %>%
      as.character() %>%
      str_replace_all("\\s+", "") %>%
      str_replace_all(",", ".") %>%
      as.numeric(),

    # ekstrak bulan & tahun dari kolom Periode (contoh: "Januari 2020")
    bulan = str_extract(Periode, "^[A-Za-z]+"),
    tahun = str_extract(Periode, "\\d{4}") %>% as.integer(),
    bulan_num = unname(bulan_id[bulan]),

    # buat tanggal awal bulan
    date = as.Date(sprintf("%04d-%02d-01", tahun, bulan_num))
  ) %>%
  select(date, Periode, produksi) %>%
  arrange(date)

head(df)
## # A tibble: 6 × 3
##   date       Periode       produksi
##   <date>     <chr>            <dbl>
## 1 2020-01-01 Januari 2020      202.
## 2 2020-02-01 Februari 2020     194.
## 3 2020-03-01 Maret 2020        203.
## 4 2020-04-01 April 2020        198.
## 5 2020-05-01 Mei 2020          180.
## 6 2020-06-01 Juni 2020         197.
summary(df$produksi)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   180.2   205.2   222.2   221.4   237.2   260.6

Tahap data cleaning dilakukan untuk menyiapkan data agar dapat digunakan dalam analisis. Pada tahap ini dilakukan pembersihan nilai produksi dengan menghapus spasi dan menyesuaikan format angka agar dapat dikonversi menjadi tipe numerik. Selain itu, informasi bulan dan tahun pada kolom periode diekstraksi dan diubah menjadi format tanggal sehingga data dapat disusun secara kronologis dan digunakan sebagai objek deret waktu (time series).

3.3 Cek missing value

sum(is.na(df$produksi))
## [1] 0
df %>% filter(is.na(produksi))
## # A tibble: 0 × 3
## # ℹ 3 variables: date <date>, Periode <chr>, produksi <dbl>

Proses pengecekan data hilang (missing value) dilakukan untuk menjamin integritas data sebelum masuk ke tahap pemodelan, di mana hasil pengujian menggunakan fungsi sum(is.na(df$produksi)) menunjukkan angka nol yang berarti seluruh observasi dari Januari 2020 sampai Desember 2024 telah terisi lengkap.

3.4 Pembentukan Objek Time Series

start_year  <- year(min(df$date))
start_month <- month(min(df$date))

produksi_ts <- ts(df$produksi, start = c(start_year, start_month), frequency = 12)
produksi_ts
##         Jan    Feb    Mar    Apr    May    Jun    Jul    Aug    Sep    Oct
## 2020 201.60 193.76 203.15 197.88 180.20 197.45 201.69 198.05 204.17 210.08
## 2021 206.12 190.52 221.96 222.03 203.20 222.32 224.12 233.01 222.61 213.81
## 2022 195.18 183.88 217.24 226.28 196.76 227.12 234.31 248.36 246.41 239.66
## 2023 212.93 205.58 220.24 182.90 236.18 236.78 252.03 250.13 250.13 246.25
## 2024 231.79 217.71 233.04 205.66 245.84 236.89 244.84 239.98 243.35 260.63
##         Nov    Dec
## 2020 207.12 214.85
## 2021 210.85 207.65
## 2022 234.74 225.45
## 2023 237.98 231.62
## 2024 247.73 251.27

Setelah memastikan tidak ada data yang terlewat melalui pengecekan missing value, langkah selanjutnya adalah mengubah data mentah tersebut menjadi objek time series agar bisa dianalisis lebih lanjut. Dengan mengekstraksi titik awal waktu secara otomatis dari kolom tanggal dan menetapkan frekuensi bulanan (frequency = 12), data tersusun dalam struktur produksi_ts. Tahapan ini memudahkan untuk menganalisis pola musiman secara mendalam, menggambarkan korelasi melalui plot ACF/PACF, dan membangun model prediksi ARIMA/SARIMA.

4 Identifikasi Model

4.1 Plot Analysis

4.1.1 Plot deret waktu

autoplot(produksi_ts) +
  labs(title = "Plot Produksi Makanan Bulanan", x = "Tahun", y = "Produksi")

Berdasarkan plot deret waktu Indeks Produksi Makanan Bulanan periode 2020–2024, terlihat bahwa data mengalami fluktuasi dari waktu ke waktu dengan kecenderungan tren meningkat pada beberapa periode terakhir. Selain itu, terdapat pola naik dan turun yang berulang dalam setiap tahun, yang mengindikasikan adanya kemungkinan pola musiman pada data produksi makanan. Pola tersebut menunjukkan bahwa aktivitas produksi cenderung berubah mengikuti periode tertentu dalam satu tahun.

4.1.2 Dekomposisi (tren, musiman, dan sisa)

produksi_stl <- stl(produksi_ts, s.window = "periodic")
autoplot(produksi_stl)

Hasil analisis STL mengungkapkan bahwa Indeks Produksi Industri Makanan menunjukkan kecenderungan untuk meningkat dari tahun 2020 hingga 2024, menandakan adanya pertumbuhan aktivitas produksi secara berkepanjangan. Selain itu, tampak pola musiman yang berulang setiap tahun, di mana produksi pada bulan-bulan tertentu cenderung lebih tinggi atau lebih rendah dibandingkan bulan lainnya. Di sisi lain, komponen sisa (remainder) memperlihatkan fluktuasi acak yang relatif kecil di sekitar nol, sehingga sebagian besar variasi data telah dijelaskan oleh komponen tren dan musiman. Hal ini menunjukkan bahwa data memiliki pola yang cukup jelas dan dapat dimodelkan lebih lanjut dengan metode runtun waktu seperti ARIMA untuk kebutuhan peramalan.

4.2 Stasioneritas dalam Varian

Uji stasioneritas dalam varian pada data permasalahan dilakukan dengan melihat nilai rounded value pada Box-Cox Plot dari output

# Pastikan semua nilai positif
min_val <- min(produksi_ts, na.rm = TRUE)
shift <- ifelse(min_val <= 0, abs(min_val) + 0.01, 0)
produksi_pos <- produksi_ts + shift

# Hitung lambda optimal
lambda <- BoxCox.lambda(produksi_pos)
lambda
## [1] -0.9999242

Uji stasioneritas dalam varians dilakukan menggunakan metode Box-Cox transformation dengan melihat nilai parameter λ (lambda). Berdasarkan hasil perhitungan diperoleh nilai λ sebesar −0.9999. Nilai tersebut menunjukkan bentuk transformasi yang paling sesuai untuk menstabilkan varians data. Oleh karena itu dilakukan transformasi Box-Cox pada data produksi makanan sebelum dilakukan proses pemodelan lebih lanjut.

Transformasi pertama

# Transformasi Box-Cox
produksi_bc <- BoxCox(produksi_pos, lambda = lambda)

autoplot(produksi_bc) +
  labs(title = "Produksi Setelah Transformasi Box-Cox",
       x = "Tahun", y = "Produksi (Transformasi)")

# (opsional) cek lambda setelah transformasi
BoxCox.lambda(produksi_bc)
## [1] -0.9999242

Setelah dilakukan transformasi Box-Cox dengan nilai λ sebesar −0.9999, varians data menjadi lebih stabil sehingga data dapat digunakan untuk tahap analisis selanjutnya. Meskipun nilai λ belum mencapai 1, nilai tersebut sudah mendekati bentuk transformasi yang optimal sehingga transformasi dianggap cukup untuk menstabilkan varians. Dengan demikian, proses pemodelan dapat dilanjutkan pada tahap pengujian stasioneritas dalam mean dan identifikasi model ARIMA.

4.3 Stasioneritas dalam Mean

Secara Formal

adf.test(produksi_bc)
## 
##  Augmented Dickey-Fuller Test
## 
## data:  produksi_bc
## Dickey-Fuller = -3.7527, Lag order = 3, p-value = 0.02793
## alternative hypothesis: stationary
  • Hipotesis:

    𝐻0: 𝛿 = 0 (Terdapat unit roots sehingga data tidak stasioner)

    𝐻1: 𝛿 ≠ 0 (Tidak terdapat unit roots sehingga data stasioner)

  • Taraf signifikansi: 𝛼 = 0.05

  • Statistik Uji:

    Berdasarkan output Augmented Dicky-Fuller test statistic test for unit root in level (d=0) yang didapat dari output di atas pada kolom p - value. diperoleh : p-value = 0.02793

  • Daerah Kritis:

    H0 ditolak jika p - value < 𝛼 (0.05)

  • Keputusan:

    H0 gagal ditolak karena p - value (0.02793) < 𝛼 (0.05)

  • Kesimpulan:

    Pada taraf signifikansi 𝛼 = 0.05, H0 gagal ditolak, karena nilai p - value (0.3879) > 𝛼 (0.05). Maka, dapat disimpulkan bahwa data transformasi pertama untuk Indeks Produksi sektor Makanan tahun 2020-2024 tidak terdapat unit roots sehingga data sudah stasioner dalam mean.

4.4 ACF dan PACF awal

Acf(produksi_bc)

Pacf(produksi_bc)

Berdasarkan plot ACF dan PACF dari data yang telah stasioner, terlihat bahwa nilai autokorelasi pada beberapa lag awal masih signifikan dan kemudian menurun secara bertahap, sedangkan pada plot PACF terdapat cut off hingga sekitar lag ke-2. Pola tersebut mengindikasikan adanya kemungkinan komponen autoregressive hingga orde ke-2. Selain itu, tidak terlihat adanya pola musiman yang signifikan pada lag ke-12, sehingga model yang digunakan adalah model non-musiman ARIMA.

4.5 Identifikasi Model

Model seasonal: (p,d,q)(P,D,Q)m

  • p : Model AR (pola non musiman) = 1,2

  • d : Differencing = 0

  • q : Model MA (pola non musiman) = 0,1

  • P : Model SAR (pola musiman) = 0

  • D : Differencing pola musiman = 0

  • Q : Model SMA (pola musiman) = 0

  • m : 12 (data bulanan)

Kombinasi model yang diambil adalah:

ARIMA(1,0,0) ARIMA(2,0,0) ARIMA(1,0,1), ARIMA(2,0,1)

5 Estimasi dan Verifikasi

5.1 Uji Signifikansi Parameter

# 1. Definisikan Model terlebih dahulu (Pastikan variabel 'inflasi_bc' sudah ada)
model1 <- Arima(produksi_bc, order = c(1,0,0))
model2 <- Arima(produksi_bc, order = c(2,0,0))
model3 <- Arima(produksi_bc, order = c(1,0,1))
model4 <- Arima(produksi_bc, order = c(2,0,1))

# 2. Fungsi Uji Signifikansi
uji_signifikansi <- function(model){

coef_est <- model$coef
se_est <- sqrt(diag(model$var.coef))

z_value <- coef_est / se_est
p_value <- 2 * (1 - pnorm(abs(z_value)))

hasil <- data.frame(
Parameter = names(coef_est),
Estimate = coef_est,
Std_Error = se_est,
z_value = z_value,
p_value = p_value,
Keputusan = ifelse(p_value < 0.05,"Signifikan","Tidak Signifikan")
)

return(hasil)
}

# 3. Panggil fungsi untuk masing-masing model
hasil_model1 <- uji_signifikansi(model1)
print(hasil_model1)
##           Parameter  Estimate    Std_Error     z_value      p_value  Keputusan
## ar1             ar1 0.6328396 0.1006533441    6.287318 3.229967e-10 Signifikan
## intercept intercept 0.9955233 0.0001715458 5803.251468 0.000000e+00 Signifikan
hasil_model2 <- uji_signifikansi(model2)
print(hasil_model2)
##           Parameter  Estimate    Std_Error     z_value      p_value  Keputusan
## ar1             ar1 0.4584883 0.1220398252    3.756875 0.0001720486 Signifikan
## ar2             ar2 0.2883490 0.1253531806    2.300292 0.0214316566 Signifikan
## intercept intercept 0.9955245 0.0001988976 5005.211627 0.0000000000 Signifikan
hasil_model3 <- uji_signifikansi(model3)
print(hasil_model3)
##           Parameter   Estimate    Std_Error    z_value    p_value  Keputusan
## ar1             ar1  0.8583859 0.0931427473    9.21581 0.00000000 Signifikan
## ma1             ma1 -0.3754309 0.1480604261   -2.53566 0.01122356 Signifikan
## intercept intercept  0.9955271 0.0002103501 4732.71556 0.00000000 Signifikan
hasil_model4 <- uji_signifikansi(model4)
print(hasil_model4)
##           Parameter   Estimate    Std_Error      z_value    p_value
## ar1             ar1  0.6202819 0.2985232996    2.0778340 0.03772465
## ar2             ar2  0.1899018 0.2204552638    0.8614075 0.38901366
## ma1             ma1 -0.1802138 0.2871535762   -0.6275868 0.53027469
## intercept intercept  0.9955256 0.0002076844 4793.4541130 0.00000000
##                  Keputusan
## ar1             Signifikan
## ar2       Tidak Signifikan
## ma1       Tidak Signifikan
## intercept       Signifikan
  • Hipotesis:

    𝐻0: 𝜑i = 0 dan atau 𝜃i = 0 (Parameter tidak signifikan terhadap model

    𝐻1: 𝜑i ≠ 0 dan atau 𝜃i ≠ 0 (Parameter signifikan terhadap model)

  • Taraf signifikansi: 𝛼 = 0.05

  • Statistik Uji:

    Dilihat dari p-value output di atas :

  • Daerah Kritis:

    H0 ditolak jika p - value < 𝛼 (0.05)

  • Keputusan dan kesimpulan:

    Berdasarkan model ARIMA(1,0,0), diperoleh bahwa AR(1) signifikan karena p-value ( 3.229967e-10) > 𝛼 (0.05). Hal ini menunjukkan bahwa lag pertama dari komponen autoregressive (AR) berpengaruh secara signifikan terhadap model.

    Pada model ARIMA(2,0,0), AR(1) signifikan karena p-value (0.0001720486) > 𝛼 (0.05) dan AR(2) signifikan secara statistik karena p-value (0.0214316566) > 𝛼 (0.0). Dengan demikian, lag 1 dan lag 2 dari komponen AR berpengaruh secara signifikan terhadap model.

    Pada model ARIMA(1,0,1), AR(1) signifikan karena p-value (0.0000) > 𝛼 (0.05) dan MA(1) signifikan secara statistik karena p-value (0.01122356) > 𝛼 (0.05) seluruh parameter tidak signifikan secara statistik (p-value > 0.05). Dengan demikian, lag 1 dari AR dan lag 1 dari komponen MA berpengaruh secara signifikan terhadap model.

    Pada model ARIMA(2,0,1), AR(1) signifikan karena p-value (0.03772465) > 𝛼 (0.05), AR(2) tidak signifikan secara statistik karena p-value (0.38901366) > 𝛼 (0.05), dan MA(1) tidak signifikan secara statistik karena p-value (0.53027469) > 𝛼 (0.05). Dengan demikian, hanya lag 1 dari komponen AR yang berpengaruh secara signifikan terhadap model.

    Perbandingan Model

    # Fungsi menghitung jumlah parameter signifikan
    hitung_signifikan <- function(model){
    
      coef <- model$coef
      se <- sqrt(diag(model$var.coef))
    
      z_stat <- coef / se
      p_values <- 2 * (1 - pnorm(abs(z_stat)))
    
      jumlah_sig <- sum(p_values < 0.05)
    
      if(jumlah_sig == length(p_values)){
        return(paste(jumlah_sig,"signifikan"))
      } else if(jumlah_sig > 0){
        return(paste(jumlah_sig,"signifikan"))
      } else {
        return("Tidak signifikan")
      }
    }
    
    # Membuat tabel perbandingan
    tabel_model <- data.frame(
      Model = c("ARIMA(1,0,0)",
                "ARIMA(2,0,0)",
                "ARIMA(1,0,1)",
                "ARIMA(2,0,1)"),
    
      AIC = c(AIC(model1),
              AIC(model2),
              AIC(model3),
              AIC(model4)),
    
      Signifikansi = c(
        hitung_signifikan(model1),
        hitung_signifikan(model2),
        hitung_signifikan(model3),
        hitung_signifikan(model4)
      )
    )
    
    print(tabel_model)
    ##          Model       AIC Signifikansi
    ## 1 ARIMA(1,0,0) -785.0950 2 signifikan
    ## 2 ARIMA(2,0,0) -788.1214 3 signifikan
    ## 3 ARIMA(1,0,1) -787.8552 3 signifikan
    ## 4 ARIMA(2,0,1) -786.4684 2 signifikan

Berdasarkan nilai AIC dan uji signifikansi parameter, model 2 yaitu ARIMA(2,0,0) memiliki nilai AIC terkecil dan memiliki 3 parameter signifikan, sehingga dipilih sebagai kandidat terbaik untuk tahap diagnostik residual.

5.2 Uji Normalitas Residual

res <- residuals(model2)
shapiro.test(res)
## 
##  Shapiro-Wilk normality test
## 
## data:  res
## W = 0.98645, p-value = 0.7451
  • Hipotesis:

    𝐻0: Residual berdistribusi normal

    𝐻1: Residual tidak berdistribusi normal

  • Taraf signifikansi: 𝛼 = 0.05

  • Statistik Uji:

    Diperoleh dari output di atas pada kolom p - value sebesar 0.7451

  • Daerah Kritis:

    H0 ditolak jika p - value < 𝛼 (0.05)

  • Keputusan:

    H0 ditolak karena p - value (0.7451) < 𝛼 (0.05)

  • Kesimpulan:

    Pada taraf signifikansi 𝛼 = 0.05, H0 ditolak, karena nilai p - value (0.7451) > 𝛼 (0.05). Sehingga dapat disimpulkan model ARIMA(2,0,0) berdistribusi normal.

hist(res, breaks=10)

qqnorm(res)
qqline(res)

Histogram residual menunjukkan bahwa sebaran residual cenderung membentuk pola yang mendekati distribusi normal dengan pusat distribusi berada di sekitar nilai nol. Hal ini menunjukkan bahwa kesalahan prediksi model relatif simetris dan tidak menunjukkan penyimpangan yang ekstrem. Selain itu, pada grafik Normal Q-Q Plot, sebagian besar titik residual berada di sekitar garis diagonal, yang menunjukkan bahwa distribusi residual mengikuti pola distribusi normal. Meskipun terdapat sedikit penyimpangan pada bagian ekor, secara keseluruhan pola titik masih mengikuti garis normalitas.

5.3 Uji Independensi Residual

Box.test(residuals(model2), type = "Ljung-Box")
## 
##  Box-Ljung test
## 
## data:  residuals(model2)
## X-squared = 0.057682, df = 1, p-value = 0.8102
  • Hipotesis:

    𝐻0: Tidak ada autokorelasi antar lag data

    𝐻1: Ada autokorelasi antar lag data

  • Taraf signifikansi: 𝛼 = 0.05

  • Statistik Uji:

    Diperoleh dari output di atas pada kolom p - value sebesar 0.8102

  • Daerah Kritis:

    H0 ditolak jika p - value < 𝛼 (0.05)

  • Keputusan:

    H0 gagal ditolak karena p - value (0.8102) > 𝛼 (0.05)

  • Kesimpulan:

    Pada taraf signifikansi 𝛼 = 0.05, H0 gagal ditolak, karena nilai p - value (0.8212) > 𝛼 (0.05). Sehingga dapat disimpulkan model ARIMA (2,0,0) tidak terdapat autokorelasi antar lag data.

5.4 Uji Homoskedastisitas Residual

ArchTest(residuals(model2), lags = 12)
## 
##  ARCH LM-test; Null hypothesis: no ARCH effects
## 
## data:  residuals(model2)
## Chi-squared = 21.583, df = 12, p-value = 0.04247
  • Hipotesis:

    𝐻0: Tidak ada terdapat gejala heteroskedastisitas

    𝐻1: Ada gejala heteroskedastisitas

  • Taraf signifikansi: 𝛼 = 0.05

  • Statistik Uji:

    Diperoleh dari output di atas pada kolom p - value sebesar 0.04247

  • Daerah Kritis:

    H0 ditolak jika p - value < 𝛼 (0.05)

  • Keputusan:

    H0 ditolak karena p - value (0.04247) < 𝛼 (0.05)

  • Kesimpulan:

    Pada taraf signifikansi 𝛼 = 0.05, H0 ditolak, karena nilai p - value (0.04247) < 𝛼 (0.05). Sehingga dapat disimpulkan model ARIMA (2,0,0) mengandung efek ARCH atau terjadi heteroskedastisitas. Dengan demikian, asumsi homoskedastisitas tidak terpenuhi.

6 MAPE

mape <- function(actual, pred){

actual <- as.numeric(actual)
pred   <- as.numeric(pred)

mean(abs((actual - pred)/actual))*100
}
smape <- function(actual, pred){

actual <- as.numeric(actual)
pred   <- as.numeric(pred)

mean(abs(actual - pred) / ((abs(actual) + abs(pred))/2))*100
}

6.1 Data Training Testing

n <- length(produksi_ts)

n_train <- floor(0.8 * n)

train <- window(produksi_ts, end = time(produksi_ts)[n_train])
test  <- window(produksi_ts, start = time(produksi_ts)[n_train+1])

length(train)
## [1] 48
length(test)
## [1] 12

Data deret waktu produksi dibagi menjadi dua bagian, yaitu data training (in-sample) dan data testing (out-sample) dengan proporsi 80% : 20%. Dari total 60 observasi data bulanan, diperoleh 48 observasi sebagai data training yang digunakan untuk membangun dan mengestimasi model ARIMA, serta 12 observasi sebagai data testing yang digunakan untuk mengevaluasi kinerja model melalui perhitungan MAPE dan SMAPE.

6.2 Hasil MAPE

model_train <- Arima(train, order = c(2,0,0))
fc_test <- forecast(model_train, h = length(test))

MAPE_test  <- mape(test, fc_test$mean)
SMAPE_test <- smape(test, fc_test$mean)

fit_train <- fitted(model_train)

MAPE_train  <- mape(train, fit_train)
SMAPE_train <- smape(train, fit_train)

tabel_error <- data.frame(
Data = c("Training","Testing"),
MAPE = c(MAPE_train, MAPE_test),
SMAPE = c(SMAPE_train, SMAPE_test)
)

tabel_error
##       Data     MAPE    SMAPE
## 1 Training 5.350868 5.327258
## 2  Testing 8.736790 9.162994

Berdasarkan hasil perhitungan, diperoleh nilai MAPE sebesar 5.35% dan SMAPE sebesar 5.33% pada data training, sedangkan pada data testing diperoleh MAPE sebesar 8.74% dan SMAPE sebesar 9.16%. Nilai kesalahan yang relatif kecil ini menunjukkan bahwa model ARIMA(2,0,0) memiliki kemampuan yang cukup baik dalam memodelkan dan memprediksi data produksi makanan.

7 Forecasting

forecast_model <- forecast(model2, h = 12)
forecast_model
##          Point Forecast     Lo 80     Hi 80     Lo 95     Hi 95
## Jan 2025      0.9959334 0.9955177 0.9963491 0.9952976 0.9965692
## Feb 2025      0.9958762 0.9954189 0.9963335 0.9951768 0.9965756
## Mar 2025      0.9958037 0.9953015 0.9963058 0.9950357 0.9965716
## Apr 2025      0.9957539 0.9952299 0.9962779 0.9949525 0.9965553
## May 2025      0.9957102 0.9951706 0.9962497 0.9948850 0.9965354
## Jun 2025      0.9956758 0.9951266 0.9962249 0.9948359 0.9965156
## Jul 2025      0.9956474 0.9950919 0.9962029 0.9947978 0.9964970
## Aug 2025      0.9956245 0.9950648 0.9961841 0.9947685 0.9964804
## Sep 2025      0.9956058 0.9950434 0.9961682 0.9947456 0.9964659
## Oct 2025      0.9955906 0.9950264 0.9961548 0.9947277 0.9964534
## Nov 2025      0.9955782 0.9950128 0.9961436 0.9947135 0.9964429
## Dec 2025      0.9955682 0.9950020 0.9961343 0.9947023 0.9964341

Berdasarkan hasil prediksi menggunakan model ARIMA(2,0,0) untuk 12 bulan mendatang, terlihat bahwa estimasi produksi makanan diprediksi akan mengalami penurunan sedikit demi sedikit dibandingkan dengan nilai di periode terakhir. Garis biru menunjukkan nilai utama yang diperkirakan, sedangkan area berwarna biru yang semakin meluas menggambarkan interval kepercayaan dari prediksi tersebut. Dengan semakin jauh periode yang diprediksi, ketidakpastian prediksi juga semakin meningkat, yang terlihat dari rentang interval yang semakin lebar. Ini menunjukkan bahwa model masih mampu mencerminkan pola data sejarah, namun tingkat ketidakpastian akan meningkat seiring dengan periode prediksi yang lebih panjang.

autoplot(forecast_model) +
  labs(title = "Forecast Produksi Makanan",
       x = "Tahun",
       y = "Produksi")

Berdasarkan tabel hasil peramalan, nilai point forecast menunjukkan estimasi produksi makanan untuk setiap bulan pada tahun 2025. Terlihat bahwa nilai prediksi mengalami penurunan secara bertahap dari bulan Januari hingga Desember 2025, dengan nilai sekitar 0.9959 pada awal tahun dan menurun hingga sekitar 0.9956 pada akhir tahun. Selain nilai prediksi utama, tabel juga menampilkan interval kepercayaan 80% dan 95% yang terdiri dari batas bawah (Lo) dan batas atas (Hi).