Anda di halaman 1dari 38

TUGAS 1 MATA KULIAH KAPITA SELEKTA

Penerapan Time Series Clustering


(Studi Kasus : Peramalan Harga Telur Ayam 32 Provinsi di Indonesia)

Oleh :
ANGGITA RIZKY FADILAH NRP. G152180151

SEKOLAH PASCASARJANA
INSTITUT PERTANIAN BOGOR
BOGOR
2019
PENDAHULUAN

Latar Belakang
Seiring meningkatkan tingkat kepadatan masyarakat, mendorong pula peningkatan
kebutuhan pangan, khususnya di Indonesia. Telur ayam merupakan salah satu sumber protein yang
kerap dikonsumsi hampir tiap hari oleh masyarakat di Indonesia dikarenakan harga yang cukup
terjangkau dan mudah didapat. Sehingga menyebabkan menjamurnya peternakan ayam di
berbagai wilayah dalam memenuhi kebutuhan telur bagi masyarakat.
Melonjaknya harga telur ayam beberapa waktu terakhir sempat mengakibatkan masyarakat
was – was untuk membeli telur ayam. Sehingga perlu dilakukan peramalan harga telur ayam.
Pentingnya mengetahui peramalan harga telur ayam di waktu selanjutnya dapat membantu
masyarakat dalam memenuhi kebutuhan sehari – hari. Agar diperoleh hasil peramalan yang baik,
maka diperlukan metode yang tepat untuk digunakan dalam peramalan.
Analisis deret waktu merupakan metode yang sesuai untuk peramalan. Dikarenakan metode
ini fleksibel dan mudah digunakan sehingga metode ini sering digunakan dalam peramalan
berbagai permasalahan, seperti harga saham, inflasi, nilai tukar, tingkat kepadatan penduduk, dll.
Apabila objek yang hendak diramal sangat banyak, maka dalam kasus ini pendekatan yang dapat
digunakan adalah time series clustering atau penggerombolan data deret waktu. Penggerombolan
(clustering) dimaksudkan untuk mereduksi dimensi data agar mempermudah peneliti dalam
meramalkan objek yang sangat banyak namun dengan waktu yang cukup ringkas. Pentingnya
metode penggerombolan ini adalah mengiefisiensikan waktu dan tahap analisis sehingga peneliti
tetap memperoleh hasil yang maksimum.

Rumusan Masalah
Tujuan penelitian ini adalah mengkaji hasil pemodelan ARIMA secara individu di tiap provinsi
dengan pemodelan ARIMA pada data gerombol yang terbentuk serta mengevaluasi tingkat
kebaikan pendugaan dari kedua jenis pemodelan ARIMA tersebut sehingga diperoleh pemodelan
ARIMA yang terbaik.
TINJAUAN PUSTAKA

Model Autoregressive Integrated Moving Average (ARIMA)


Model Generalized Space Time Autoregressive Integrated Moving Average (GSTARIMA)
adalah suatu model time series multivariat yang memperhitungkan faktor lokasi (spasial) ke dalam
peramalan terhadap periode waktu tertentu. Model GSTARIMA merupakan perngembangan dari
Space Time Autoregressive Integrated Moving Average (STARIMA). Pada model ini, diasumsikan
bahwa setiap lokasi memiliki bobot tersendiri. Model GSTARIMA (𝑝𝜆𝑘 , 𝑑, 𝑞𝜆𝑘 ) dengan 𝑝𝜆𝑘
adalah ordo otoregresif, 𝑑 adalah differencing atau pembedaan, dan 𝑞𝜆𝑘 adalah ordo rataan
bergerak pada lag waktu ke-k dapat dituliskan sebagai berikut

𝜆 𝜆
𝒁𝒕 = ∑𝑝𝑘−1 ∑𝑙=0
𝑘
𝚽𝑘𝑙 𝑾(𝑙) 𝒁𝑡−𝑘 − ∑𝑞𝑘−1 ∑𝑙=0
𝑘
𝚯𝑘𝑙 𝑾(𝑙) 𝒆𝑡−𝑘 − 𝒂𝑡 (1)

dengan 𝚽𝑘𝑙 merupakan matriks diagonal parameter otoregresif pada lag waktu ke-k dan lag spasial
ke-l, 𝑾(𝑙) merupakan matriks pembobot spasial lag ke-l, dan 𝚯𝑘𝑙 meruapakan matriks diagonal
parameter rataan bergerak pada lag waktu ke-k dan lag spasial ke-l.

Mean Absolute Percentage Error (MAPE)


Salah satu ukuran kebaikan peramalan yang digunakan dalam metodee deret waktu adalah Mean
Absolute Percentage Error (MAPE). Definisi MAPE dalam Montgomery et. Al. (2008) adalah
1 ̂𝑡
𝑦𝑡 −𝑦
𝑀𝐴𝑃𝐸 = 𝑛 ∑𝑛𝑡=1 | | (2)
𝑦𝑡

Jarak Dynamic Time Warping (DTW)


Salah satu metode jarak atau ukuran ketidakmiripan yang termasuk dalam pendekatan tanpa model
tertentu adalah Dynamic Time Warping (DTW). Jarak DTW merupakan minimum jarak antara
dua pasang titik dengan memperhitungkan kemungkinan pergeseran titik yang didefenisikan
sebagai berikut:
𝐷𝑇𝑊(𝑆, 𝑇) = 𝑚𝑖𝑛𝑊 |∑𝑝𝑘=1 𝛿(𝑤𝑘 )| (3)
METODOLOGI PENELITIAN

Data
Data yang digunakan dalam peneltian ini adalah data sekunder yang diambil dari Pusat
Informasi Harga Pangan Strategis Nasional yang dapat diakses melalui hargapangan.id. data ini
mengenai harga telur ayam (per kilogram) 32 provinsi di Indonesia. Terdapat 89 amatan di setiap
provinsi, terhitung dari minggu pertama Bulan Juli 2017 hingga minggu kedua Bulan Maret 2019.
Berikut ringkasan peubah yang digunakan dalam penelitian ini:
Tabel 1 Peubah yang digunakan dalam penelitian
Peubah Keterangan Tipe Peubah Satuan
𝑍1 Harga telur ayam Provinsi Aceh Rasio Ribu rupiah
(kg)
𝑍2 Harga telur ayam Provinsi Rasio Ribu rupiah
Sumatera Utara (kg)
… …. … …
… …. … …
𝑍31 Harga telur ayam Provinsi Papua Rasio Ribu rupiah
(kg)
𝑍32 Harga telur ayam Provinsi Papua Rasio Ribu rupiah
Barat (kg)

Langkah – Langkah Analisis


Berikut langkah – langkah analisis yang dilakukan dalam penelitian ini :
1. Mengeksplorasi data harga telur ayam
a. Dilakukan pengecekan pada data apakah ada data missing atau tidak. Kemudian dilanjutkan
dengan analisis deskriptif untuk melihat persebaran data harga telur ayam pada 32 provinsi
tersebut.
b. Membagi data harga telur ayam menjadi dua bagian, yaitu data training dan data testing.
Data training diambil sebanyak 65 pengamatan pertama yang akan digunakan untuk
pemodelan, sedangkan data testing sebanyak 24 pengamatan terakhir akan digunakan untuk
peramalan.
c. Mengecek kestasioneran data training melalui plot deret waktu dan Uji Augmented Dickey-
Fuller (ADF).
d. Apabila data tidak stasioner dalam mean, maka akan dilakukan pembedaan ordo d
(differencing) hingga data stasioner.
2. Memodelkan ARIMA pada data harga telur ayam secara individu di tiap provinsi
a. Menentukan ordo p, d, dan q secara tentative melalui Plot ACF, Plot PACF, dan EACF.
b. Menduga parameter model ARIMA sesuai dengan ordo p, d, dan q yang diperoleh.
c. Memilih model ARIMA terbaik berdasarkan nilai AIC terkecil dan hasil diagnostik sisaan.
d. Melakukan peramalan dengan model ARIMA terbaik untuk 24 periode selanjutnya
e. Menghitung nilai MAPE berdasarkan data testing dan hasil peramalan sebelumnya.
f. Mengulang langkah poin a hingga poin e untuk provinsi selanjutnya.
3. Analisis gerombol pada data harga telur ayam
a. Menghitung jarak atau ukuran ketidakmiripan pada data harga telur ayam di 32 provinsi
dengan ukuran jarak DTW.
b. Melakukan penggerombolan hirarki dengan metode pautan rataan.
c. Menentukan banyaknya gerombol berdasarkan dendogram yang terbentuk.
d. Melakukan idetifikasi anggota-anggota pada tiap gerombol.
e. Menghitung data perwakilan tiap gerombol. Aghabozorgi et.al (2015) menjelaskan dalam
penelitiannya bahwa teknik menghitung rataan dilakukan untuk setiap deret waktunya (t)
pada satu gerombol dengan menghitung rataan dari t=1 hingga t=n sehingga terbentuk deret
rataan. Contohnya, gerombol X memiliki 5 provinsi yang merupakan data deret waktu dari
minggu pertama Bulan Juli 2017 hingga minggu keempat Bulan September 2018 sehingga
terdapat 65 amatan (minggu). Pada t=1, nilai rataan dihitung dari jumlah data provinsi ke-
1 hingga ke-5 kemudian dibagi dengan 5. Begitu pula untuk t=2 hingga t=65. Sehingga akan
diperoleh runtutan amatan baru sebagai perwakilan dari gerombol X. Langkah ini diulangi
untuk gerombol selanjutnya.
4. Memodelkan ARIMA pada data gerombol
a. Mengecek kestasioneran data training gerombol melalui plot deret waktu dan Uji
Augmented Dickey-Fuller (ADF).
b. Apabila data tidak stasioner dalam mean, maka akan dilakukan pembedaan ordo d
(differencing) hingga data stasioner.
c. Menentukan ordo p, d, dan q secara tentative melalui Plot ACF, Plot PACF, dan EACF.
d. Menduga parameter model ARIMA sesuai dengan ordo p, d, dan q yang diperoleh.
e. Memilih model ARIMA terbaik berdasarkan nilai AIC terkecil dan hasil diagnostik sisaan.
f. Melakukan peramalan dengan model ARIMA terbaik untuk 24 periode selanjutnya.
g. Menghitung nilai MAPE berdasarkan data gerombol dan hasil peramalan sebelumnya.
h. Mengulang langkah poin e hingga poin j untuk gerombol selanjutnya
5. Mengevaluasi hasil kedua model dari poin 2 dan poin 4 menggunakan nilai MAPE sehingga
diperoleh model terbaik untuk data harga telur ayam di 32 provinsi.
HASIL DAN PEMBAHASAN

Eksplorasi Data
Pada penelitian ini, perkembangan harga telur ayam per kilogram sejak minggu ke-1 Bulan
Juli 2017 hingga minggu ke-2 Bulan Maret 2019 diambil dari 32 provinsi, yaitu Aceh, Sumatera
Utara, Sumatera Barat, Riau, Kepulauan Riau, Jambi, Bengkulu, Kepulauan Bangka Belitung,
Lampung, Jawa Barat, DKI Jakarta, Jawa Tengah, DIY Yogyakarta, Jawa Timur, Bali, Nusa
Tenggara Barat, Nusa Tenggara Timur, Kalimantan Barat, Kalimantan Selatan, Kalimantan
Tengah, Kalimantan Timur, Kalimantan Utara, Gorontalo, Sulawesi Selatan, Sulawesi Tenggara,
Sulawesi Tengah, Sulawesi Utara, Sulawesi Barat, Maluku, Maluku Utara, Papua, Dan Papua
Barat.

Gambar 1. Plot Rata-Rata Harga Telur Ayam (per kg) di Provinsi Aceh – Bali Periode Juli 2017
(minggu 1) - Maret 2019 (minggu 2)

Gambar 2. Plot Rata-Rata Harga Telur Ayam (per kg) di Provinsi Nusa Tenggara Barat - Papua
Barat Periode Juli 2017 (minggu 1) - Maret 2019 (minggu 2)
Berdasarkan Gambar 1 dan Gambar 2 di atas, rata – rata harga telur ayam (kg) tertinggi terjadi
pada Provinsi Papua dan rata – rata harga telur ayam (kg) terendah terjadi pada Provinsi Sulawesi
Barat. Secara rataan, rata – rata harga telur ayam (kg) di Indonesia sekitar Rp 24.155,85 atau
dibulatkan menjadi Rp 24.200 dan keragaman dari rata – rata harga antar provinsi sebesar Rp
3.659,17 atau dibulatkan menjadi Rp 3.700.

Pemodelan ARIMA Individu di Tiap Provinsi


Pada pemodelan ARIMA dapat dilakukan jika data stasioner. Cara mengetahui kestasioneran
data ada 2 macam, melalui grafik dan uji hipotesis. Terkadang penggambaran kestasioneran data
dalam plot deret waktu (time series plot) bersifat subjektif sehingga kurang akurat apabila untuk
melihat data harga telur ayam yang fluktuatif, sehingga perlu dilakukan uji Augmented Dickey-
Fuller (ADF). Hipotesia yang digunakan dalam Uji ADF sebagai berikut:
𝐻0 : 𝜌 = 0 (data tidak stasioner dalam rataan)
𝐻1 : 𝜌 ≠ 0 (data tstasioner dalam rataan)
Hasil pengujian ADF pada data asli adalah bahwa semua data harga telur ayam (kg) di 32
provinsi tidak stasioner. kemudian dilakukan pembedaan (differencing) ordo 1 sehingga diperoleh
data differencing ordo 1. Lalu dilakukan pengujian ADF kembali terhadap data differencing ordo
1 tersebut dan didapatkan hasil bahwa masih ada data 13 provinsi yang belum stasioner. Kemudian
dilakukan pembedaan (differencing) ordo 2 pada 13 provinsi tersebut dan diperoleh hasil bahwa
data semua provinsi sudah stasioner. Plot deret waktu dapat dilihat pada Lampiran 3 dan ringkasan
hasil uji ADF terhadap data dari 32 provinsi berada dalam Lampiran 4 – 6. Dilanjutkan dengan
penentuan ordo untuk model ARIMA (p,d,q) melalui Plot ACF, Plot PACF dan EACF. Salah satu
provinsi yang dimodelkan adalah Aceh. Berikut plot deret waktu, ACF, PACF dan EACF pada
data harga telur ayam di aceh yang telah dideferensiasi ordo 2.

Gambar 3. Plot Deret Waktu Data Harga Telur Ayam Dif 2 di Aceh
Gambar 4. Plot ACF Harga Telur Ayam Dif 2 di Aceh

Gambar 5. Plot PACF Harga Telur Ayam Dif 2 di Aceh

Gambar 6. Plot EACF Harga Telur Ayam Dif 2 di Aceh

Berdasarkan Gambar 3, data harga telur ayam sudah stasioner setelah dideferensiasi ordo 2.
Kemudian pada Gambar 4, ACF cuts off setelah lag 1 dan pada Gambar 5 PACF cuts off setelah
lag 1 sehingga kandidat model yang terbentuk sementara adalah ARIMA (1,2,0) dan ARIMA
(0,2,1). Kemudian pada Gambar 6, kandidat model ARIMA sementara yang terbentuk adalah
ARIMA (0,2,1), ARIMA (0,2,7) dan ARIMA (1,2,1). Setelah diperoleh kandidat model
sementara, dilanjutkan dengan diagnostik sisaan pada model dengan AIC paling minimum. Jika
model dengan AIC minimum tidak memenuhi asumsi sisaan, maka model dengan AIC minimum
kedua didiagnostik sisaannya dan apabila memenuhi, maka model tersebut menjadi model yang
terbaik dan layak digunakan.
Tabel 2. Kandidat Model ARIMA dan AIC Provinsi Aceh
Kandidat model AIC
ARIMA (1,2,0) 955,04
ARIMA (0,2,1) 957,85
ARIMA (0,2,7) 949,34
ARIMA (1,2,1) 947,55

Berdasarkan tabel 2 di atas, model ARIMA (1,2,1) memiliki nilai AIC minimum.
Selanjutnya dilakukan diagnostik sisaan, yaitu sisaan yang mengikuti sebaran normal dan saling
bebas (tidak berkorelasi). Untuk mengetahui sebaran sisaan plot Q-Q Normal dapat digunakan
serta Plot Residual dan Uji Ljung-Box digunakan untuk mengetahui kebebasan residual. Berikut
hasil Plot Q-Q Normal, Plot Residual, dan Uji Ljung-Box.

Gambar 7. Plot Q-Q Normal Sisaan Model ARIMA (1,2,1)

Gambar 8. Plot Residual Model ARIMA (1,2,1)

Gambar 9. Hasil Uji Ljung – Box Pada Sisaan Model ARIMA (1,2,1)
Pada Gambar 7, terlihat bahwa sebaran sisaan model ARIMA (1,2,1) sudah mengikuti garis normal
sehingga dapat dikatakan sebaran sisaan model ARIMA (1,2,1) mengikuti sebaran normal.
Sedangkan antar sisaan sudah saling bebas, terlihat dari Gambar 8 dan pada hasil Uji Ljung-Box
terlihat bahwa p-value sudah lebih besar alfa (5%) sehingga terima H0 atau antar sisaan tidak
saling berkorelasi. Berdasarkan hasil diagnostic model, dapat dikatakan bahwa model ARIMA
(1,2,1) merupakan model terbaik dan layak untuk data harga telur ayam di Provinsi Aceh.

Pembentukan Gerombol pada Data


Data training sebanyak 65 pengamatan pada masing – masing provinsi akan digerombolkan
menggunakan pendekatan hirarki dengan metode pautan rataan. Diawali dengan penghitungan
jarak DTW pada data harga telur ayam (kg) antara satu provinsi dengan provinsi yang lain
kemudian akan dihasilkan matriks jarak. Matriks jarak tersebut yang selanjutnya digunakan untuk
menentukan jumlah gerombol (k) melalui metode pautan rataan (average). Lalu diperoleh
dendogram yang berisi pembagian gerombol beserta provinsi – provinsi sebagai anggota tiap
gerombol.

Gambar 10. Dendogram


Berdasarkan dendogram pada Gambar 10 di atas, dapat dibentuk beberapa gerombol. Pada
penelitian ini, akan dicobakan 2 gerombol, 3 gerombol, dan 4 gerombol untuk selanjutnya
dievaluasi banyaknya gerombol yang optimum untuk data. Gerombol 2 dengan gerombol ke-1
beranggotakan provinsi Sulawesi Utara, Kalimantan Utara, hingga Jambi dan gerombol ke-2
beranggotakan Provinsi Papua, Maluku Utara, dan Papua Barat. Gerombol 3 dengan gerombol ke-
1 beranggotakan Provinsi Sulawesi Utara, Kalimantan Utara, Kepulauan Riau, Kepulauan Bangka
Belitung, Nusa Tenggara Timur, dan Kalimantan Tengah; gerombol ke-2 beranggotakan Provinsi
Sumatera Utara, Sulawesi Barat, hingga Jambi dan gerombol ke-3 beranggotakan Provinsi Papua,
Maluku Utara, Maluku, dan Papua Barat. Terakhir, gerombol 4 dengan anggota gerombol ke-1
adalah Provinsi Sulawesi Utara, Kalimantan Utara, Kepulauan Riau, Kepulauan Bangka Belitung,
Nusa Tenggara Timur, dan Kalimantan Tengah; anggota gerombol ke-2 adalah Provinsi Sumatera
Utara, Sulawesi Barat, hingga Jambi; anggota gerombol ke-3 adalah Provinsi Papua; dan anggota
gerombol ke-4 adalah Provinsi Maluku Utara, Maluku, dan Papua Barat. Ringkasan ketiga jenis
gerombol tersebut dapat dilihat pada Lampiran

Pemodelan ARIMA pada Data Gerombol


Setelah diperoleh data gerombol, yaitu gerombol 2, gerombol 3, dan gerombol 4, maka dilakukan
pengecekan apakah data gerombol 2, gerombol 3, dan gerombol 4 sudah stasioner dalam rataan.
Kemudian apabila data sudah stasioner, dilanjutkan dengan menentukan kandidat model ARIMA
(p,d,q) dengan plot ACF, plot, PACF, dan EACF. Selanjutnya sama seperti tahap pada pemodelan
ARIMA secara individu, berikut model ARIMA terbaik dan layak untuk masing – masing
gerombol.
Tabel 3. Model ARIMA Terbaik untuk Tiap Gerombol
Banyaknya
Gerombol ke- Model ARIMA (p,d,q)
Gerombol
2 Gerombol 1 ARIMA (1,1,1)
2 ARIMA (1,3,2)
3 Gerombol 1 ARIMA (2,1,0)
2 ARIMA (1,1,1)
3 ARIMA (1,2,1)
4 Gerombol 1 ARIMA (2,1,0)
2 ARIMA (1,1,1)
3 ARIMA (1,1,1)
4 ARIMA (1,3,2)
Evaluasi Kebaikan Pendugaan
Berdasarkan hasil peramalan menggunakan model ARIMA secara individu dan model
ARIMA pada data 2 gerombol, 3 gerombol, dan 4 gerombol, maka diperoleh nilai MAPE yang
ditampilkan pada Tabel 4.
Tabel 4. Nilai MAPE dari Model ARIMA Individu dan ARIMA Gerombol
Jenis Gerombol ke- Model MAPE Rataan MAPE
1 Gerombol 1 (individu) ARIMA (1,2,1) 7.660057 7.660057
2 Gerombol 1 ARIMA (1,1,1) 7.503941
12.11623
2 ARIMA (1,3,2) 16.7285
3 Gerombol 1 ARIMA (2,1,0) 11.56375
2 ARIMA (1,1,1) 6.547701 7.373227
3 ARIMA (1,2,1) 4.008231
4 Gerombol 1 ARIMA (2,1,0) 11.56375
2 ARIMA (1,1,1) 6.547701
9.7242095
3 ARIMA (1,1,1) 1.864637
4 ARIMA (1,3,2) 18.92075

Berdasarkan hasil di atas, nilai rataan MAPE minimum dimiliki oleh model ARIMA pada data 3
gerombol. Sehingga dapat dikatakan bahwa model ARIMA 3 gerombol memberikan hasil
peramalan yang baik bagi data harga telur ayam 32 provinsi di Indonesia.

PENUTUP

Kesimpulan
Berdasarkan hasil penelitian ini, diperoleh hasil bahwa model ARIMA pada 3 data gerombol
memberikan hasil peramalan yang cukup baik dibanding ARIMA secara individu dan ARIMA 2
dan 4 gerombol berdasarkan nilai MAPE minimum. Sehingga dapat ditarik kesimpulan bahwa
analisis gerombol pada data deret waktu baik digunakan apabila data memiliki tingkat keragaman
yang cukup tinggi.

Saran
Untuk penelitian selanjutnya, dapat dikembangkan dengan menggunakan metode jarak atau
pengukuran ketidakmiripan lainnya agar diperoleh hasil yang lebih baik.
DAFTAR PUSTAKA

Aghabozorgi S, Shirkhorshidi AS, Wah TY. 2015. Time-series clustering – A decade review.
Information Systems. 2015: 16-38.
Cryer JD, Chan KS. 2008. Time Series Analysis With Applications in R Second Edition. New
York: Springer.
Dinov IA. 2014. Hierarchical Clustering Pada Data Time Series Hotspot Provinsi Riau {Skripsi}.
IPB.
Montgomery DC, Jennings CL, Kulahci M. 2008. Introduction to Time Series Analysis and
Forecasting. New Jersey:John Wiley & Sons.
LAMPIRAN
Lampiran 1 Syntax Pemodelan ARIMA Individu
library(tseries)
library(forecast)
library(dtw)
library(cluster)
library(proxy)
library(TTR)
library(TSA)

#----------------------------ARIMA 34 PROVINSI------------------------------#

#membagi data train sama data test-------------------------------------------


data <- read.csv("D:S2/Semester 2/Kapita Selekta Terapan/data 1.csv", header=T)
train <- data[1:65,-1]
test <- data[66:89,-1]

#mengecek stasioner dan homogen ragam dari data train untuk arima individu---
provinsi <- ncol(train)
pengamatan <- nrow(train)
hasil.adf <- rep(0, provinsi)
kesimpulan <- NULL
for(j in 1:provinsi)
{
hasil.adf[j] <- adf.test(train[, j])[["p.value"]]
kesimpulan[j] <- ifelse(hasil.adf[j]<0.05, "stasioner", "tidak stasioner")
}
hasil.adf <- cbind(hasil.adf, kesimpulan) #hasilnya semua provinsi tidak stasioner

#data dif 1 (semua provinsi)


ydif1 <- matrix(0,pengamatan-1,provinsi)
hasil.adf1 <- rep(0, provinsi)
kesimpulan1 <- NULL
for(j in 1:provinsi)
{
ydif1[,j] <- diff(train[,j], differences = 1)
hasil.adf1[j] <- adf.test(ydif1[, j])[["p.value"]]
kesimpulan1[j] <- ifelse(hasil.adf1[j]<0.05, "stasioner", "tidak stasioner")
}
hasil.adf1 <- cbind(hasil.adf1, kesimpulan1)

#data dif 2 (hanya 13 provinsi yang belum stasioner)


train.ns <- train[,c(1,2,3,5,6,7,15,16,23,25,26,29,30)]
provinsi.ns <- ncol(train.ns)
ydif2 <- matrix(0,(pengamatan-2),provinsi.ns)
hasil.adf2 <- rep(0, provinsi.ns)
kesimpulan2 <- NULL
for(j in 1:provinsi.ns)
{
ydif2[,j] <- diff(train.ns[,j], differences = 2)
hasil.adf2[j] <- adf.test(ydif2[,j])[["p.value"]]
kesimpulan2[j]<-ifelse(hasil.adf2[j]<0.05, "stasioner", "tidak stasioner")
}
hasil.adf2 <- cbind(hasil.adf2, kesimpulan2)
#memodelkan arima individu untuk tiap provinsi-------------------------------
#aceh
aceh <- ts(train.ACEH)
plot.ts(aceh)
points(aceh)
aceh.dif <- diff(aceh, differences=2)
plot.ts(aceh.dif)
points(aceh.dif)
acf(aceh.dif)
pacf(aceh.dif)
eacf(aceh.dif)
arima(aceh.dif, order=c(0,0,1), method="ML")
arima(aceh.dif, order=c(1,0,0), method="ML")
arima(aceh.dif, order=c(1,0,1), method="ML")
model.aceh <- arima(aceh, order=c(1,2,1), method="ML")
sisaan.aceh <- model.aceh$residuals
Box.test(sisaan.aceh)
qqnorm(sisaan.aceh)
qqline(sisaan.aceh)
plot(as.numeric(sisaan.aceh))

#sumut
sumut <- ts(train$SUMATERA.UTARA)
plot.ts(sumut)
points(sumut)
sumut.dif <- diff(sumut, differences=2)
plot.ts(sumut.dif)
points(sumut.dif)
acf(sumut.dif)
pacf(sumut.dif)
eacf(sumut.dif)
arima(sumut.dif, order=c(0,0,1), method="ML")
arima(sumut.dif, order=c(1,0,0), method="ML")
arima(sumut.dif, order=c(1,0,1), method="ML")
model.sumut <- arima(sumut, order=c(1,2,1), method="ML")
sisaan.sumut <- model.sumut$residuals
Box.test(sisaan.sumut)
qqnorm(sisaan.sumut)
qqline(sisaan.sumut)
plot(as.numeric(sisaan.sumut))

#sumbar
sumbar <- ts(train$SUMATERA.BARAT)
plot.ts(sumbar)
points(sumbar)
sumbar.dif <- diff(sumbar, differences=2)
plot.ts(sumbar.dif)
points(sumbar.dif)
acf(sumbar.dif)
pacf(sumbar.dif)
eacf(sumbar.dif)
arima(sumbar.dif, order=c(0,0,1), method="ML")
arima(sumbar.dif, order=c(1,0,0), method="ML")
arima(sumbar.dif, order=c(1,0,1), method="ML")
model.sumbar <- arima(sumbar, order=c(1,2,1), method="ML")
sisaan.sumbar <- model.sumbar$residuals
Box.test(sisaan.sumbar)
qqnorm(sisaan.sumbar)
qqline(sisaan.sumbar)
plot(as.numeric(sisaan.sumbar))

. . . . . . . . . . . . . . . . . . hingga

#papua
papua <- ts(train$PAPUA)
plot.ts(papua)
points(papua)
papua.dif <- diff(papua, differences=1)
plot.ts(papua.dif)
points(papua.dif)
acf(papua.dif)
pacf(papua.dif)
eacf(papua.dif)
arima(papua.dif, order=c(0,0,1), method="ML")
arima(papua.dif, order=c(0,0,2), method="ML")
arima(papua.dif, order=c(1,0,1), method="ML")
arima(papua.dif, order=c(1,0,2), method="ML")
arima(papua.dif, order=c(2,0,1), method="ML")
model.papua <- arima(papua, order=c(2,1,1), method="ML")
sisaan.papua <- model.papua$residuals
Box.test(sisaan.papua)
qqnorm(sisaan.papua)
qqline(sisaan.papua)
plot(as.numeric(sisaan.papua))

#papua barat
pabar <- ts(train$PAPUA.BARAT)
plot.ts(pabar)
points(pabar)
pabar.dif <- diff(pabar, differences=1)
plot.ts(pabar.dif)
points(pabar.dif)
acf(pabar.dif)
pacf(pabar.dif)
eacf(pabar.dif)
arima(pabar.dif, order=c(1,0,0), method="ML")
arima(pabar.dif, order=c(0,0,1), method="ML")
arima(pabar.dif, order=c(1,0,1), method="ML")
arima(pabar.dif, order=c(0,0,2), method="ML")
arima(pabar.dif, order=c(2,0,0), method="ML")
model.pabar <- arima(pabar, order=c(1,1,1), method="ML")
sisaan.pabar <- model.pabar$residuals
Box.test(sisaan.pabar)
qqnorm(sisaan.pabar)
qqline(sisaan.pabar)
plot(as.numeric(sisaan.pabar))

#menghitung forecast, mse, dan mape------------------------------------------------


test.aceh <- test$ACEH
test.sumut <- test$SUMATERA.UTARA
test.sumbar <- test$SUMATERA.BARAT
test.riau <- test$RIAU
test.kepri <- test$KEPULAUAN.RIAU
test.jambi <- test$JAMBI
test.bengkulu <- test$BENGKULU
test.batung <- test$KEP..BANGKA.BELITUNG
test.lampung <- test$LAMPUNG
test.jabar <- test$JAWA.BARAT
test.dki <- test$DKI.JAKARTA
test.jateng <- test$JAWA.TENGAH
test.yogya <- test$YOGYAKARTA
test.jatim <- test$JAWA.TIMUR
test.bali <- test$BALI
test.ntb <- test$NUSA.TENGGARA.BARAT
test.ntt <- test$NUSA.TENGGARA.TIMUR
test.kalbar <- test$KALIMANTAN.BARAT
test.kalsel <- test$KALIMANTAN.SELATAN
test.kalteng <- test$KALIMANTAN.TENGAH
test.kaltim <- test$KALIMANTAN.TIMUR
test.kalut <- test$KALIMANTAN.UTARA
test.goron <- test$GORONTALO
test.sulsel <- test$SULAWESI.SELATAN
test.sultengg <- test$SULAWESI.TENGGARA
test.sulteng <- test$SULAWESI.TENGAH
test.sulut <- test$SULAWESI.UTARA
test.sulbar <- test$SULAWESI.BARAT
test.maluku <- test$MALUKU
test.malut <- test$MALUKU.UTARA
test.papua <- test$PAPUA
test.pabar <- test$PAPUA.BARAT

forecast.aceh <- forecast(test.aceh, model=model.aceh, h=24)


forecast.sumut <- forecast(test.sumut, model=model.sumut, h=24)
forecast.sumbar <- forecast(test.sumbar, model=model.sumbar, h=24)
forecast.riau <- forecast(test.riau, model=model.riau, h=24)
forecast.kepri <- forecast(test.kepri, model=model.kepri, h=24)
forecast.jambi <- forecast(test.jambi, model=model.jambi, h=24)
forecast.bengkulu <- forecast(test.bengkulu, model=model.bengkulu, h=24)
forecast.batung <- forecast(test.batung, model=model.batung, h=24)
forecast.lampung <- forecast(test.lampung, model=model.lampung, h=24)
forecast.jabar <- forecast(test.jabar, model=model.jabar, h=24)
forecast.dki <- forecast(test.dki, model=model.dki, h=24)
forecast.jateng <- forecast(test.jateng, model=model.jateng, h=24)
forecast.yogya <- forecast(test.yogya, model=model.yogya, h=24)
forecast.jatim <- forecast(test.jatim, model=model.jatim, h=24)
forecast.bali <- forecast(test.bali, model=model.bali, h=24)
forecast.ntb <- forecast(test.ntb, model=model.ntb, h=24)
forecast.ntt <- forecast(test.ntt, model=model.ntt, h=24)
forecast.kalbar <- forecast(test.kalbar, model=model.kalbar, h=24)
forecast.kalsel <- forecast(test.kalsel, model=model.kalsel, h=24)
forecast.kalteng <- forecast(test.kalteng, model=model.kalteng, h=24)
forecast.kaltim <- forecast(test.kaltim, model=model.kaltim, h=24)
forecast.kalut <- forecast(test.kalut, model=model.kalut, h=24)
forecast.goron <- forecast(test.goron, model=model.goron, h=24)
forecast.sulsel <- forecast(test.sulsel, model=model.sulsel, h=24)
forecast.sultengg <- forecast(test.sultengg, model=model.sultengg, h=24)
forecast.sulteng <- forecast(test.sulteng, model=model.sulteng, h=24)
forecast.sulut <- forecast(test.sulut, model=model.sulut, h=24)
forecast.sulbar <- forecast(test.sulbar, model=model.sulbar, h=24)
forecast.maluku <- forecast(test.maluku, model=model.maluku, h=24)
forecast.malut <- forecast(test.malut, model=model.malut, h=24)
forecast.papua <- forecast(test.papua, model=model.papua, h=24)
forecast.pabar <- forecast(test.pabar, model=model.pabar, h=24)

error.aceh <- as.numeric(test.aceh)-as.numeric(forecast.aceh$mean)


error.sumut <- as.numeric(test.sumut)-as.numeric(forecast.sumut$mean)
error.sumbar <- as.numeric(test.sumbar)-as.numeric(forecast.sumbar$mean)
error.riau <- as.numeric(test.riau)-as.numeric(forecast.riau$mean)
error.kepri <- as.numeric(test.kepri)-as.numeric(forecast.kepri$mean)
error.jambi <- as.numeric(test.jambi)-as.numeric(forecast.jambi$mean)
error.bengkulu <- as.numeric(test.bengkulu)-as.numeric(forecast.bengkulu$mean)
error.batung <- as.numeric(test.batung)-as.numeric(forecast.batung$mean)
error.lampung <- as.numeric(test.lampung)-as.numeric(forecast.lampung$mean)
error.jabar <- as.numeric(test.jabar)-as.numeric(forecast.jabar$mean)
error.dki <- as.numeric(test.dki)-as.numeric(forecast.dki$mean)
error.jateng <- as.numeric(test.jateng)-as.numeric(forecast.jateng$mean)
error.yogya <- as.numeric(test.yogya)-as.numeric(forecast.yogya$mean)
error.jatim <- as.numeric(test.jatim)-as.numeric(forecast.jatim$mean)
error.bali <- as.numeric(test.bali)-as.numeric(forecast.bali$mean)
error.ntb <- as.numeric(test.ntb)-as.numeric(forecast.ntb$mean)
error.ntt <- as.numeric(test.ntt)-as.numeric(forecast.ntt$mean)
error.kalbar <- as.numeric(test.kalbar)-as.numeric(forecast.kalbar$mean)
error.kalsel <- as.numeric(test.kalsel)-as.numeric(forecast.kalsel$mean)
error.kalteng <- as.numeric(test.kalteng)-as.numeric(forecast.kalteng$mean)
error.kaltim <- as.numeric(test.kaltim)-as.numeric(forecast.kaltim$mean)
error.kalut <- as.numeric(test.kalut)-as.numeric(forecast.kalut$mean)
error.goron <- as.numeric(test.goron)-as.numeric(forecast.goron$mean)
error.sulsel <- as.numeric(test.sulsel)-as.numeric(forecast.sulsel$mean)
error.sultengg <- as.numeric(test.sultengg)-as.numeric(forecast.sultengg$mean)
error.sulteng <- as.numeric(test.sulteng)-as.numeric(forecast.sulteng$mean)
error.sulut <- as.numeric(test.sulut)-as.numeric(forecast.sulut$mean)
error.sulbar <- as.numeric(test.sulbar)-as.numeric(forecast.sulbar$mean)
error.maluku <- as.numeric(test.maluku)-as.numeric(forecast.maluku$mean)
error.malut <- as.numeric(test.malut)-as.numeric(forecast.malut$mean)
error.papua <- as.numeric(test.papua)-as.numeric(forecast.papua$mean)
error.pabar <- as.numeric(test.pabar)-as.numeric(forecast.pabar$mean)

mape.aceh <- sum(abs(error.aceh/as.numeric(test.aceh)*100))/24


mape.sumut <- sum(abs(error.sumut/as.numeric(test.sumut)*100))/24
mape.sumbar <- sum(abs(error.sumbar/as.numeric(test.sumbar)*100))/24
mape.riau <- sum(abs(error.riau/as.numeric(test.riau)*100))/24
mape.kepri <- sum(abs(error.kepri/as.numeric(test.aceh)*100))/24
mape.jambi <- sum(abs(error.jambi/as.numeric(test.jambi)*100))/24
mape.bengkulu <- sum(abs(error.bengkulu/as.numeric(test.bengkulu)*100))/24
mape.batung <- sum(abs(error.batung/as.numeric(test.batung)*100))/24
mape.lampung <- sum(abs(error.lampung/as.numeric(test.lampung)*100))/24
mape.jabar <- sum(abs(error.jabar/as.numeric(test.jabar)*100))/24
mape.dki <- sum(abs(error.dki/as.numeric(test.dki)*100))/24
mape.jateng <- sum(abs(error.jateng/as.numeric(test.jateng)*100))/24
mape.yogya <- sum(abs(error.yogya/as.numeric(test.yogya)*100))/24
mape.jatim <- sum(abs(error.jatim/as.numeric(test.jatim)*100))/24
mape.bali <- sum(abs(error.bali/as.numeric(test.bali)*100))/24
mape.ntb <- sum(abs(error.ntb/as.numeric(test.ntb)*100))/24
mape.ntt <- sum(abs(error.ntt/as.numeric(test.ntt)*100))/24
mape.kalbar <- sum(abs(error.kalbar/as.numeric(test.kalbar)*100))/24
mape.kalsel <- sum(abs(error.kalsel/as.numeric(test.kalsel)*100))/24
mape.kalteng <- sum(abs(error.kalteng/as.numeric(test.kalteng)*100))/24
mape.kaltim <- sum(abs(error.kaltim/as.numeric(test.kaltim)*100))/24
mape.kalut <- sum(abs(error.kalut/as.numeric(test.kalut)*100))/24
mape.goron <- sum(abs(error.goron/as.numeric(test.goron)*100))/24
mape.sulsel <- sum(abs(error.sulsel/as.numeric(test.sulsel)*100))/24
mape.sultengg <- sum(abs(error.sultengg/as.numeric(test.sultengg)*100))/24
mape.sulteng <- sum(abs(error.sulteng/as.numeric(test.sulteng)*100))/24
mape.sulut <- sum(abs(error.sulut/as.numeric(test.sulut)*100))/24
mape.sulbar <- sum(abs(error.sulbar/as.numeric(test.sulbar)*100))/24
mape.maluku <- sum(abs(error.maluku/as.numeric(test.maluku)*100))/24
mape.malut <- sum(abs(error.malut/as.numeric(test.malut)*100))/24
mape.papua <- sum(abs(error.papua/as.numeric(test.papua)*100))/24
mape.pabar <- sum(abs(error.pabar/as.numeric(test.pabar)*100))/24

mape.individu <- sum(mape.aceh, mape.bali, mape.batung, mape.bengkulu, mape.dki,


mape.goron, mape.jabar, mape.jambi, mape.jateng, mape.jatim,
mape.kalbar, mape.kalsel, mape.kalteng, mape.kaltim, mape.kalut,
mape.kepri, mape.lampung, mape.maluku, mape.malut, mape.ntb,
mape.ntt, mape.pabar, mape.papua, mape.riau, mape.sulbar,
mape.sulsel, mape.sulteng, mape.sultengg, mape.sulut,
mape.sumbar, mape.sumut, mape.yogya)/provinsi
Lampiran 2. Syntax Pemodelan ARIMA pada Data Gerombol

library(tseries)
library(forecast)
library(dtw)
library(cluster)
library(proxy)
library(TTR)
library(TSA)

#membagi data train dan data test


data <- read.csv("D:S2/Semester 2/Kapita Selekta Terapan/data 1.csv",
header=T)
train <- data[1:65,-1]
test <- data[66:89,-1]

#-------------------------ARIMA CLUSTERING-----------------------#
#menentukan gerombol pakek dtw
train2 <- t(train)
matriks <- dist(train2,method = "DTW")
bb<-hclust(matriks,method = "average")
plot(bb, hang=0.3)

#memasukkan data gerombol baru habis dirata2


data2 <- read.csv("D:S2/Semester 2/Kapita Selekta Terapan/data 2.csv",
header=T)
data2 <- ts(data2)

#mengecek kestasioneran data gerombol----------------------------------


train.12 <- ts(data2[1:65,2])
test.12 <- ts(data2[66:89,2])
train.22 <- ts(data2[1:65,3])
test.22 <- ts(data2[66:89,3])
train.13 <- ts(data2[1:65,4])
train.23 <- ts(data2[1:65,5])
train.33 <- ts(data2[1:65,6])
test.13 <- ts(data2[66:89,4])
test.23 <- ts(data2[66:89,5])
test.33 <- ts(data2[66:89,6])
train.14 <- ts(data2[1:65,7])
test.14 <- ts(data2[66:89,7])
train.24 <- ts(data2[1:65,8])
test.24 <- ts(data2[66:89,8])
train.34 <- ts(data2[1:65,9])
test.34 <- ts(data2[66:89,9])
train.44 <- ts(data2[1:65,10])
test.44 <- ts(data2[66:89,10])

kesimpulan <- NULL


hasil.adf <- NULL
for(i in 2:10)
{
hasil.adf[i] <- adf.test(train[1:65,i])[["p.value"]]
kesimpulan[i] <- ifelse(hasil.adf[i]<0.05, "stasioner", "tidak
stasioner")
}
tabel.adf <- cbind(hasil.adf[2:10], kesimpulan[2:10])

#memodelkan arima clustering (k)


#k = 2-----------------------------------------------------------------
#arima gerombol 1 (k=2)
plot.ts(train.12)
points(train.12)
acf(train.12)
pacf(train.12)

traindif.12 <- diff(train.12, differences = 1)


plot.ts(traindif.12)
points(traindif.12)
acf(traindif.12)
pacf(traindif.12)
eacf(traindif.12)
arima(traindif.12, order=c(1,0,1), method = "ML")
#kandidat model : (0,1,1) aic 917.31, (2,1,0) aic 917.21, (1,1,1) aic
913.72, (0,1,2) aic 914.7
model.12 <- arima(train.12, order=c(1,1,1), method = "ML")
tsdiag(model.12)
sisaandif.12<-model.12$residuals
Box.test(sisaan.12)
qqnorm(sisaan.12)
qqline(sisaan.12)
shapiro.test(sisaan.12)
plot(as.numeric(sisaan.12)) #model terbaik gerombol 1 (k=2) : ARIMA
(1,1,1)

auto.arima(train.12, max.p=5, max.q=5, method="ML")


#arima gerombol 2 (k=2)
plot.ts(train.22)
points(train.22)
acf(train.22)
pacf(train.22)

traindif3.22 <- diff(train.22, differences = 3)


plot.ts(traindif.22)
acf(traindif.22)
pacf(traindif.22)
eacf(traindif.22)
model.22 <- arima(train.22, order=c(1,3,2), method = "ML")
sisaan.22 <- model.22$residuals
Box.test(sisaan.22)
shapiro.test(sisaan.22)
qqnorm(sisaan.22)
qqline(sisaan.22)
plot(as.numeric(sisaan.22)) #model terbaik gerombol 2 (k=2) : ARIMA
(1,3,2)

#k = 3----------------------------------------------------------------
#arima gerombol 1 (k=3)
plot.ts(train.13)
points(train.13)
acf(train.13)
pacf(train.13)
eacf(train.13)

traindif.13 <- diff(train.13, differences = 1)


plot.ts(traindif.13)
acf(traindif.13)
pacf(traindif.13)
eacf(traindif.13)
#kandidat model : (0,1,1) aic 970.37, (1,1,0) aic 970.17, (1,1,1) aic
969.16
model.13 <- arima(train.13, order=c(2,1,0), method = "ML")
sisaan.13 <- model.13$residuals
Box.test(sisaan.13)
shapiro.test(sisaan.13)
qqnorm(sisaan.13)
qqline(sisaan.13)
plot(as.numeric(sisaan.13)) #model terbaik gerombol 1 (k=3) : ARIMA
(2,1,0)

#arima gerombol 2 (k=3)


plot.ts(train.23)
points(train.23)
acf(train.23)
pacf(train.23)
eacf(train.23)

traindif.23 <- diff(train.23, differences = 1)


acf(traindif.23)
pacf(traindif.23)
eacf(traindif.23)

model.23 <- arima(train.23, order=c(1,1,1), method = "ML")


sisaan.23 <- model.23$residuals
Box.test(sisaan.23)
shapiro.test(sisaan.23)
qqnorm(sisaan.23)
qqline(sisaan.23)
plot(as.numeric(sisaan.23)) #model terbaik gerombol 2 (k=3) : ARIMA
(1,1,1)

#arima gerombol 3 (k=3)-


plot.ts(train.33)
points(train.33)
acf(train.33)
pacf(train.33)
eacf(train.33)

traindif.33 <- diff(train.33, differences = 2)


plot.ts(traindif.33)
acf(traindif.33)
pacf(traindif.33)
eacf(traindif.33)

model.33 <- arima(train.33, order=c(1,2,1), method = "ML")


sisaan.33 <- model.23$residuals
Box.test(sisaan.33)
shapiro.test(sisaan.33)
qqnorm(sisaan.33)
qqline(sisaan.33)
plot(as.numeric(sisaan.33)) #model terbaik gerombol 3 (k=3) : ARIMA
(1,2,1)

#k = 4----------------------------------------------------------------
#arima gerombol ke 1 (k=4)
plot.ts(train.14)
points(train.14)
acf(train.14)
pacf(train.14)

traindif.14 <- diff(train.14, differences = 1)


plot.ts(traindif.14)
acf(traindif.14)
pacf(traindif.14)
eacf(traindif.14)

model.14 <- arima(train.14, order=c(2,1,0), method = "ML")


tsdiag(model.14)
sisaan.14<-model.14$residuals
Box.test(sisaan.14)
qqnorm(sisaan.14)
qqline(sisaan.14)
shapiro.test(sisaan.14)
plot(as.numeric(sisaan.14)) #model terbaik gerombol 1 (k=4) : ARIMA
(2,1,0)

#arima gerombol ke 2 (k=4)


plot.ts(train.24)
points(train.24)
acf(train.24)
pacf(train.24)

traindif.24 <- diff(train.24, differences = 1)


plot.ts(traindif.24)
acf(traindif.24)
pacf(traindif.24)
eacf(traindif.24)

model.24 <- arima(train.24, order=c(1,1,1), method = "ML")


sisaan.24 <- model.24$residuals
Box.test(sisaan.24)
shapiro.test(sisaan.24)
qqnorm(sisaan.24)
qqline(sisaan.24)
plot(as.numeric(sisaan.24)) #model terbaik gerombol 2 (k=4) : ARIMA
(1,1,1)

#arima gerombol ke 3 (k=4)


plot.ts(train.34)
points(train.34)
traindif.34 <- diff(train.34, differences = 2)
plot.ts(traindif.34)
points(traindif.34)
acf(traindif.34)
pacf(traindif.34)
eacf(traindif.34)
model.34 <- arima(train.34, order=c(1,1,1), method = "ML")
sisaan.34 <- model.34$residuals
Box.test(sisaan.34)
shapiro.test(sisaan.34)
qqnorm(sisaan.34)
qqline(sisaan.34)
plot(as.numeric(sisaan.34)) #model terbaik gerombol 3 (k=4) : ARIMA
(1,0,0)

#arima gerombol ke 4 (k=4)


plot.ts(train.44)
points(train.44)
acf(train.44)
pacf(train.44)
traindif.44 <- diff(train.44, differences = 3)
plot.ts(traindif.44)
points(traindif.44)
acf(traindif.44)
pacf(traindif.44)
eacf(traindif.44)
model.44 <- arima(train.44, order=c(1,3,2), method = "ML")
sisaan.44 <- model.44$residuals
Box.test(sisaan.44)
shapiro.test(sisaan.44)
qqnorm(sisaan.44)
qqline(sisaan.44)
plot(as.numeric(sisaan.44)) #model terbaik gerombol 4 (k=4) : ARIMA
(1,3,2)

#menghitung forecast, mse, dan mape------------------------------------


test.aceh <- test$ACEH
test.sumut <- test$SUMATERA.UTARA
test.sumbar <- test$SUMATERA.BARAT
test.riau <- test$RIAU
test.kepri <- test$KEPULAUAN.RIAU
test.jambi <- test$JAMBI
test.bengkulu <- test$BENGKULU
test.batung <- test$KEP..BANGKA.BELITUNG
test.lampung <- test$LAMPUNG
test.jabar <- test$JAWA.BARAT
test.dki <- test$DKI.JAKARTA
test.jateng <- test$JAWA.TENGAH
test.yogya <- test$YOGYAKARTA
test.jatim <- test$JAWA.TIMUR
test.bali <- test$BALI
test.ntb <- test$NUSA.TENGGARA.BARAT
test.ntt <- test$NUSA.TENGGARA.TIMUR
test.kalbar <- test$KALIMANTAN.BARAT
test.kalsel <- test$KALIMANTAN.SELATAN
test.kalteng <- test$KALIMANTAN.TENGAH
test.kaltim <- test$KALIMANTAN.TIMUR
test.kalut <- test$KALIMANTAN.UTARA
test.goron <- test$GORONTALO
test.sulsel <- test$SULAWESI.SELATAN
test.sultengg <- test$SULAWESI.TENGGARA
test.sulteng <- test$SULAWESI.TENGAH
test.sulut <- test$SULAWESI.UTARA
test.sulbar <- test$SULAWESI.BARAT
test.maluku <- test$MALUKU
test.malut <- test$MALUKU.UTARA
test.papua <- test$PAPUA
test.pabar <- test$PAPUA.BARAT

forecast.aceh <- forecast(test.aceh, model=model.24, h=24)


forecast.sumut <- forecast(test.sumut, model=model.24, h=24)
forecast.sumbar <- forecast(test.sumbar, model=model.24, h=24)
forecast.riau <- forecast(test.riau, model=model.24, h=24)
forecast.kepri <- forecast(test.kepri, model=model.14, h=24)
forecast.jambi <- forecast(test.jambi, model=model.24, h=24)
forecast.bengkulu <- forecast(test.bengkulu, model=model.24, h=24)
forecast.batung <- forecast(test.batung, model=model.14, h=24)
forecast.lampung <- forecast(test.lampung, model=model.24, h=24)
forecast.jabar <- forecast(test.jabar, model=model.24, h=24)
forecast.dki <- forecast(test.dki, model=model.24, h=24)
forecast.jateng <- forecast(test.jateng, model=model.24, h=24)
forecast.yogya <- forecast(test.yogya, model=model.24, h=24)
forecast.jatim <- forecast(test.jatim, model=model.24, h=24)
forecast.bali <- forecast(test.bali, model=model.24, h=24)
forecast.ntb <- forecast(test.ntb, model=model.24, h=24)
forecast.ntt <- forecast(test.ntt, model=model.14, h=24)
forecast.kalbar <- forecast(test.kalbar, model=model.24, h=24)
forecast.kalsel <- forecast(test.kalsel, model=model.24, h=24)
forecast.kalteng <- forecast(test.kalteng, model=model.14, h=24)
forecast.kaltim <- forecast(test.kaltim, model=model.24, h=24)
forecast.kalut <- forecast(test.kalut, model=model.14, h=24)
forecast.goron <- forecast(test.goron, model=model.24, h=24)
forecast.sulsel <- forecast(test.sulsel, model=model.24, h=24)
forecast.sultengg <- forecast(test.sultengg, model=model.24, h=24)
forecast.sulteng <- forecast(test.sulteng, model=model.24, h=24)
forecast.sulut <- forecast(test.sulut, model=model.14, h=24)
forecast.sulbar <- forecast(test.sulbar, model=model.24, h=24)
forecast.maluku <- forecast(test.maluku, model=model.44, h=24)
forecast.malut <- forecast(test.malut, model=model.44, h=24)
forecast.papua <- forecast(test.papua, model=model.34, h=24)
forecast.pabar <- forecast(test.pabar, model=model.44, h=24)

error.aceh <- as.numeric(test.aceh)-as.numeric(forecast.aceh$mean)


error.sumut <- as.numeric(test.sumut)-as.numeric(forecast.sumut$mean)
error.sumbar <- as.numeric(test.sumbar)-
as.numeric(forecast.sumbar$mean)
error.riau <- as.numeric(test.riau)-as.numeric(forecast.riau$mean)
error.kepri <- as.numeric(test.kepri)-as.numeric(forecast.kepri$mean)
error.jambi <- as.numeric(test.jambi)-as.numeric(forecast.jambi$mean)
error.bengkulu <- as.numeric(test.bengkulu)-
as.numeric(forecast.bengkulu$mean)
error.batung <- as.numeric(test.batung)-
as.numeric(forecast.batung$mean)
error.lampung <- as.numeric(test.lampung)-
as.numeric(forecast.lampung$mean)
error.jabar <- as.numeric(test.jabar)-as.numeric(forecast.jabar$mean)
error.dki <- as.numeric(test.dki)-as.numeric(forecast.dki$mean)
error.jateng <- as.numeric(test.jateng)-
as.numeric(forecast.jateng$mean)
error.yogya <- as.numeric(test.yogya)-as.numeric(forecast.yogya$mean)
error.jatim <- as.numeric(test.jatim)-as.numeric(forecast.jatim$mean)
error.bali <- as.numeric(test.bali)-as.numeric(forecast.bali$mean)
error.ntb <- as.numeric(test.ntb)-as.numeric(forecast.ntb$mean)
error.ntt <- as.numeric(test.ntt)-as.numeric(forecast.ntt$mean)
error.kalbar <- as.numeric(test.kalbar)-
as.numeric(forecast.kalbar$mean)
error.kalsel <- as.numeric(test.kalsel)-
as.numeric(forecast.kalsel$mean)
error.kalteng <- as.numeric(test.kalteng)-
as.numeric(forecast.kalteng$mean)
error.kaltim <- as.numeric(test.kaltim)-
as.numeric(forecast.kaltim$mean)
error.kalut <- as.numeric(test.kalut)-as.numeric(forecast.kalut$mean)
error.goron <- as.numeric(test.goron)-as.numeric(forecast.goron$mean)
error.sulsel <- as.numeric(test.sulsel)-
as.numeric(forecast.sulsel$mean)
error.sultengg <- as.numeric(test.sultengg)-
as.numeric(forecast.sultengg$mean)
error.sulteng <- as.numeric(test.sulteng)-
as.numeric(forecast.sulteng$mean)
error.sulut <- as.numeric(test.sulut)-as.numeric(forecast.sulut$mean)
error.sulbar <- as.numeric(test.sulbar)-
as.numeric(forecast.sulbar$mean)
error.maluku <- as.numeric(test.maluku)-
as.numeric(forecast.maluku$mean)
error.malut <- as.numeric(test.malut)-as.numeric(forecast.malut$mean)
error.papua <- as.numeric(test.papua)-as.numeric(forecast.papua$mean)
error.pabar <- as.numeric(test.pabar)-as.numeric(forecast.pabar$mean)

mape.aceh <- sum(abs(error.aceh/as.numeric(test.aceh)*100))/24


mape.sumut <- sum(abs(error.sumut/as.numeric(test.sumut)*100))/24
mape.sumbar <- sum(abs(error.sumbar/as.numeric(test.sumbar)*100))/24
mape.riau <- sum(abs(error.riau/as.numeric(test.riau)*100))/24
mape.kepri <- sum(abs(error.kepri/as.numeric(test.aceh)*100))/24
mape.jambi <- sum(abs(error.jambi/as.numeric(test.jambi)*100))/24
mape.bengkulu <-
sum(abs(error.bengkulu/as.numeric(test.bengkulu)*100))/24
mape.batung <- sum(abs(error.batung/as.numeric(test.batung)*100))/24
mape.lampung <-
sum(abs(error.lampung/as.numeric(test.lampung)*100))/24
mape.jabar <- sum(abs(error.jabar/as.numeric(test.jabar)*100))/24
mape.dki <- sum(abs(error.dki/as.numeric(test.dki)*100))/24
mape.jateng <- sum(abs(error.jateng/as.numeric(test.jateng)*100))/24
mape.yogya <- sum(abs(error.yogya/as.numeric(test.yogya)*100))/24
mape.jatim <- sum(abs(error.jatim/as.numeric(test.jatim)*100))/24
mape.bali <- sum(abs(error.bali/as.numeric(test.bali)*100))/24
mape.ntb <- sum(abs(error.ntb/as.numeric(test.ntb)*100))/24
mape.ntt <- sum(abs(error.ntt/as.numeric(test.ntt)*100))/24
mape.kalbar <- sum(abs(error.kalbar/as.numeric(test.kalbar)*100))/24
mape.kalsel <- sum(abs(error.kalsel/as.numeric(test.kalsel)*100))/24
mape.kalteng <-
sum(abs(error.kalteng/as.numeric(test.kalteng)*100))/24
mape.kaltim <- sum(abs(error.kaltim/as.numeric(test.kaltim)*100))/24
mape.kalut <- sum(abs(error.kalut/as.numeric(test.kalut)*100))/24
mape.goron <- sum(abs(error.goron/as.numeric(test.goron)*100))/24
mape.sulsel <- sum(abs(error.sulsel/as.numeric(test.sulsel)*100))/24
mape.sultengg <-
sum(abs(error.sultengg/as.numeric(test.sultengg)*100))/24
mape.sulteng <-
sum(abs(error.sulteng/as.numeric(test.sulteng)*100))/24
mape.sulut <- sum(abs(error.sulut/as.numeric(test.sulut)*100))/24
mape.sulbar <- sum(abs(error.sulbar/as.numeric(test.sulbar)*100))/24
mape.maluku <- sum(abs(error.maluku/as.numeric(test.maluku)*100))/24
mape.malut <- sum(abs(error.malut/as.numeric(test.malut)*100))/24
mape.papua <- sum(abs(error.papua/as.numeric(test.papua)*100))/24
mape.pabar <- sum(abs(error.pabar/as.numeric(test.pabar)*100))/24

mape.12 <- sum(mape.aceh, mape.bali, mape.batung, mape.bengkulu,


mape.dki, mape.goron, mape.jabar,
mape.jambi, mape.jateng, mape.jatim, mape.kalbar,
mape.kalsel, mape.kalteng, mape.kaltim,
mape.kalut, mape.kepri, mape.lampung, mape.ntb,
mape.ntt,
mape.riau, mape.sulbar, mape.sulsel,
mape.sulteng, mape.sultengg,
mape.sulut, mape.sumbar, mape.sumut,
mape.yogya)/28
mape.22 <- sum(mape.maluku, mape.malut, mape.pabar, mape.papua)/4

mape.13 <- sum(mape.ntt, mape.kepri, mape.batung, mape.kalteng,


mape.kalut, mape.sulut)/6
mape.23 <- sum(mape.aceh, mape.bali, mape.bengkulu, mape.dki,
mape.goron, mape.jabar,
mape.jambi, mape.jateng, mape.jatim, mape.kalbar,
mape.kalsel, mape.kaltim,
mape.lampung, mape.ntb,
mape.riau, mape.sulbar, mape.sulsel, mape.sulteng,
mape.sultengg,
mape.sumbar, mape.sumut, mape.yogya)/22
mape.33 <- sum(mape.maluku, mape.malut, mape.pabar, mape.papua)/4
Lampiran 3. Plot Deret Waktu Data Harga Telur Ayam di 32 provinsi
Lampiran 4. Hasil Uji ADF pada Data Training

Provinsi P-Value Kesimpulan


Aceh 0.288349995 Tidak Stasioner
Sumatera Utara 0.11834848 Tidak Stasioner
Sumatera Barat 0.433000959 Tidak Stasioner
Riau 0.407841842 Tidak Stasioner
Kepulauan Riau 0.738826398 Tidak Stasioner
Jambi 0.621264395 Tidak Stasioner
Bengkulu 0.097665345 Tidak Stasioner
Kep. Bangka Belitung 0.374673165 Tidak Stasioner
Lampung 0.385286266 Tidak Stasioner
Jawa Barat 0.220803349 Tidak Stasioner
DKI Jakarta 0.193516777 Tidak Stasioner
Jawa Tengah 0.215142425 Tidak Stasioner
Yogyakarta 0.075536031 Tidak Stasioner
Jawa Timur 0.213830622 Tidak Stasioner
Bali 0.072259852 Tidak Stasioner
Nusa Tenggara Barat 0.091292671 Tidak Stasioner
Nusa Tenggara Timur 0.165786284 Tidak Stasioner
Kalimantan Barat 0.463934775 Tidak Stasioner
Kalimantan Selatan 0.18055945 Tidak Stasioner
Kalimantan Tengah 0.102119401 Tidak Stasioner
Kalimantan Timur 0.188450075 Tidak Stasioner
Kalimantan Utara 0.304419831 Tidak Stasioner
Gorontalo 0.099266081 Tidak Stasioner
Sulawesi Selatan 0.300492931 Tidak Stasioner
Sulawesi Tenggara 0.340340572 Tidak Stasioner
Sulawesi Tengah 0.205335342 Tidak Stasioner
Sulawesi Utara 0.556815769 Tidak Stasioner
Sulawesi Barat 0.438046407 Tidak Stasioner
Maluku 0.379261423 Tidak Stasioner
Maluku Utara 0.360206322 Tidak Stasioner
Papua 0.33853454 Tidak Stasioner
Papua Barat 0.054545295 Tidak Stasioner
Lampiran 5. Hasil Uji ADF pada Data Training Dif 1

Provinsi P-Value Kesimpulan


Aceh 0.070103358 Tidak Stasioner
Sumatera Utara 0.052584725 Tidak Stasioner
Sumatera Barat 0.333087337 Tidak Stasioner
Riau 0.01 Stasioner
Kepulauan Riau 0.162546742 Tidak Stasioner
Jambi 0.050818423 Tidak Stasioner
Bengkulu 0.066662737 Tidak Stasioner
Kep. Bangka Belitung 0.023846095 Stasioner
Lampung 0.01 Stasioner
Jawa Barat 0.01 Stasioner
DKI Jakarta 0.01 Stasioner
Jawa Tengah 0.01 Stasioner
Yogyakarta 0.01 Stasioner
Jawa Timur 0.01 Stasioner
Bali 0.07582012 Tidak Stasioner
Nusa Tenggara Barat 0.180058362 Tidak Stasioner
Nusa Tenggara Timur 0.01 Stasioner
Kalimantan Barat 0.01 Stasioner
Kalimantan Selatan 0.01 Stasioner
Kalimantan Tengah 0.01 Stasioner
Kalimantan Timur 0.012601551 Stasioner
Kalimantan Utara 0.01 Stasioner
Gorontalo 0.23882708 Tidak Stasioner
Sulawesi Selatan 0.0265337 Stasioner
Sulawesi Tenggara 0.148453779 Tidak Stasioner
Sulawesi Tengah 0.214108991 Tidak Stasioner
Sulawesi Utara 0.020927893 Stasioner
Sulawesi Barat 0.017158177 Stasioner
Maluku 0.053581903 Tidak Stasioner
Maluku Utara 0.128561022 Tidak Stasioner
Papua 0.01 Stasioner
Papua Barat 0.01 Stasioner
Lampiran 6. Hasil Uji ADF pada Data Training Dif 2 (13 Provinsi)

Provinsi P-Value Kesimpulan


Aceh 0.01 Stasioner
Sumatera Utara 0.01 Stasioner
Sumatera Barat 0.01 Stasioner
Kepulauan Riau 0.01 Stasioner
Jambi 0.01 Stasioner
Bengkulu 0.01 Stasioner
Bali 0.01 Stasioner
Nusa Tenggara Barat 0.01 Stasioner
Gorontalo 0.01 Stasioner
Sulawesi Tenggara 0.01 Stasioner
Sulawesi Tengah 0.01 Stasioner
Maluku 0.01 Stasioner
Maluku Utara 0.01 Stasioner
Lampiran 7. Penggerombolan Data Deret Waktu Berdasarkan Dendogram

2 Gerombol 3 Gerombol 4 Gerombol


No
k=1 k=2 k=1 k=2 k=3 k=1 k=2 k=3 k=4
Nusa Nusa Nusa
Maluku
1 Tenggara Papua Tenggara Riau Papua Tenggara Riau Papua
Utara
Timur Timur Timur
Kepulauan Maluku Kepulauan Maluku Kepulauan
2 Jawa Barat Jawa Barat Maluku
Riau Utara Riau Utara Riau
Kep. Bangka Kep. Bangka Kep. Bangka Papua
3 Maluku DKI Jakarta Maluku DKI Jakarta
Belitung Belitung Belitung Barat
Nusa Nusa
Kalimantan Papua Kalimantan Papua Kalimantan
4 Tenggara Tenggara
Tengah Barat Tengah Barat Tengah
Barat Barat
Kalimantan Kalimantan Kalimantan Kalimantan Kalimantan
5
Utara Utara Selatan Utara Selatan
Sulawesi Kalimantan Sulawesi Kalimantan
6 Riau
Utara Timur Utara Timur
7 Jawa Barat Gorontalo Gorontalo
Sulawesi Sulawesi
8 DKI Jakarta
Tenggara Tenggara
Nusa
Sulawesi Sulawesi
9 Tenggara
Tengah Tengah
Barat
Kalimantan
10 Aceh Aceh
Selatan
Kalimantan Sumatera Sumatera
11
Timur Utara Utara
Sumatera Sumatera
12 Gorontalo
Barat Barat
Sulawesi
13 Jambi Jambi
Tenggara
Sulawesi
14 Bengkulu Bengkulu
Tengah
Sulawesi
15 Lampung Lampung
Utara
16 Aceh Jawa Tengah Jawa Tengah
Sumatera
17 Yogyakarta Yogyakarta
Utara
Sumatera
18 Jawa Timur Jawa Timur
Barat
19 Jambi Bali Bali
Kalimantan Kalimantan
20 Bengkulu
Barat Barat
Sulawesi Sulawesi
21 Lampung
Selatan Selatan
Sulawesi Sulawesi
22 Jawa Tengah
Barat Barat
23 Yogyakarta
24 Jawa Timur
25 Bali
Kalimantan
26
Barat
Sulawesi
27
Selatan
Sulawesi
28
Barat
Lampiran 8. Plot Deret Waktu Data 2 Gerombol, 3 Gerombol, dan 4 Gerombol

a. 2 gerombol

b. 3 gerombol
c. 4 gerombol