Email : brigita.melantika@student.matanauniversity.ac.id
RPubs : https://rpubs.com/brigitatiaraem/
Jurusan : Statistika
Address : ARA Center, Matana University Tower
Jl. CBD Barat Kav, RT.1, Curug Sangereng, Kelapa Dua, Tangerang, Banten 15810.
Analisis time series yaitu analisis yang melibatkan penggunaan data deret waktu atau data time series untuk membuat model yang akan digunakan sebagai dasar peramalan. Berbeda dari data cross-section yang merupakan data pada banyak entitas pada titik waktu yang sama. Pemodelan dan peramalan yang melibatkan penggunaan data cross section lebih banyak dibahas dalam materi analisis regresi, sedangkan pemodelan dan peramalan berdasarkan data panel dibahas dalam materi ekonometrika.
Data time series ini memungkinkan estimasi efek pada [Kesalahan Pemrosesan Matematika] dari perubahan [Kesalahan Pemrosesan Matematika] dari waktu ke waktu. Maka, para ekonometrika menyebutnya sebagai efek kausal dinamis.
Dalam analisis time series ini diperlukan visualisasi data berupa plot data tersebut yang mana bisa melihat pola, pengamatan yang tidak biasa, perubahan dari waktu ke waktu, dan bagaimana hubungan antar variabel yangdapat diperoleh dengan berbagai metode peramalan. Analisis time series secara komersial penting karena kebutuhan dan relevansi industri terutama peramalan w.r.t (permintaan, penjualan, penawaran, harga saham, nilai tukar, inflasi, dll).
Time Series dapat dianggap sebagai daftar angka, bersama dengan beberapa informasi tentang berapa kali angka-angka itu dicatat. Informasi ini dapat disimpan sebagai objek ts dengan fungsi ts() di R.
Berikut contoh data time series.
dt <- ts(c(30, 60, 90, 120, 150, 180, 210, 240, 270, 300, 330,360,390, 420), start=2007)
dt## Time Series:
## Start = 2007
## End = 2020
## Frequency = 1
## [1] 30 60 90 120 150 180 210 240 270 300 330 360 390 420
Jika menggunakan data tahunan, dengan satu pengamatan per tahun, maka hanya perlu memberikan tahun awal (atau tahun akhir).
Namun jika pengamatannya lebih sering dari sekali per tahun, maka hanya menambahkan argumen frekuensi. Dengan contoh data bulanan sudah disimpan sebagai vektor numerik dt, maka itu dapat diubah menjadi objek ts seperti dibawah ini.
y <- ts(dt, start=2020, frequency=12)
y## Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
## 2020 30 60 90 120 150 180 210 240 270 300 330 360
## 2021 390 420
Hampir semua data yang digunakan dalam buku ini sudah disimpan sebagai objek ts. Tetapi jika ingin menganalisa dengan data sendiri, maka diperlukna fungsi ts() sebelum melanjutkan dengan analisis.
Note: “Frekuensi” adalah jumlah pengamatan sebelum pola musiman berulang 1 Saat menggunakan fungsi ts() di R, dengan ketentuan data annual atau tahunan memiliki frekuensi 1, data quarterly atau triwulan memiliki frekuensi 4, data monthly atau bulanan memiliki frekuensi 12, dan data weekly atau mingguan memiliki frekuensi 52.
Untuk data time series menggunakan grafik berupa plot waktu yang mana pengamatan diplot terhadap waktu pengamatan, dengan pengamatan berurutan bergabung dengan garis lurus.
Plot di bawah menunjukkan beban penumpang ekonomi mingguan di Ansett Airlines antara dua kota terbesar di Australia.
library(fpp) # Data for "Forecasting: principles and practice"## Warning: package 'fpp' was built under R version 4.1.3
## Loading required package: forecast
## Warning: package 'forecast' was built under R version 4.1.3
## Registered S3 method overwritten by 'quantmod':
## method from
## as.zoo.data.frame zoo
## Loading required package: fma
## Warning: package 'fma' was built under R version 4.1.3
## Loading required package: expsmooth
## Warning: package 'expsmooth' was built under R version 4.1.3
## Loading required package: lmtest
## Loading required package: zoo
##
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
##
## as.Date, as.Date.numeric
## Loading required package: tseries
library (DT)
datatable(melsyd,
caption = htmltools::tags$caption(
style = 'caption-side: bottom; text-align: center;',
htmltools::em('Table 1: Passengers: Melbourne-Sydney')),
options = list (dom='t'))library(ggplot2)
autoplot(melsyd[, "Economy.Class"]) +
ggtitle("Figure 1: Economy class passengers: Melbourne-Sydney")+
xlab ("Year") +
ylab ("Thousands")Dengan menggunakan fungsi autoplot() maka secara otomatis menghasilkan plot yang sesuai dari apa pun yang ada di argumen pertama. Sehingga dapat mengenali melsyd[,“Economy.Class”] sebagai deret waktu dan menghasilkan plot waktu.
Plot waktu segera mengungkapkan beberapa fitur menarik.
Ada periode pada tahun 1989 ketika tidak ada penumpang yang diangkut - ini karena perselisihan industri.
Ada masa pengurangan beban pada tahun 1992. Hal ini disebabkan oleh uji coba di mana beberapa kursi kelas ekonomi digantikan oleh kursi kelas bisnis.
Peningkatan besar dalam beban penumpang terjadi pada paruh kedua tahun 1991.
Ada beberapa penurunan besar dalam beban sekitar awal setiap tahun. Ini karena efek liburan.
Ada fluktuasi jangka panjang dalam tingkat seri yang meningkat selama tahun 1987, menurun pada tahun 1989, dan meningkat lagi melalui tahun 1990 dan 1991.
Ada beberapa periode pengamatan yang hilang.
Model apa pun perlu mempertimbangkan semua fitur ini untuk memperkirakan beban penumpang secara efektif di masa mendatang.
Rangkaian waktu yang lebih sederhana ditunjukkan pada plot dibawah ini dengan Penjualan bulanan obat antidiabetes di Australia.
autoplot(a10)+
ggtitle("Figure 2: Antidiabetic drug sales")+
ylab("$ million")+
xlab ("Year")Pada plot diatas terlihat bahwa tren jelas dan meningkat. Ada juga pola musiman yang kuat yang bertambah besar seiring dengan meningkatnya level seri. Namun terjadi penurunan yang berada pada setiap awal tahun disebabkan oleh skema subsidi pemerintah yang membuat pasien hemat biaya untuk menimbun obat di akhir tahun kalender.
Dalam menggambarkan rangkaian waktu ini, maka menggunakan kata-kata seperti “tren” dan “musiman” yang perlu didefinisikan lebih hati-hati.
Tren akan muncul ketika terjadinya kenaikan atau penurunan jangka panjang dalam suatu data. Tren juga dapat diartikan sebagai perubahan arah jika arah grafiknya berubah. Pada visualisasi tren ini tidak harus linear. Pada plot sebelumnya telah menunjukan tren data penjualan obat antidiabetes.
Pola musiman pada analisis time series ini muncul ketika deret waktu dipengaruhi oleh faktor musiman seperti waktu dalam setahun atau hari dalam seminggu atau bisa disebut dengan frekuensi. Penjualan bulanan obat antidiabetes di atas menunjukkan musim yang sebagian disebabkan oleh perubahan harga obat pada akhir tahun kalender.
Siklus terjadi ketika data menunjukkan naik dan turun yang tidak dari frekuensi tetap. Fluktuasi ini biasanya disebabkan oleh kondisi ekonomi, dan sering dikaitkan dengan “siklus bisnis” yang biasanya memiliki durasi minimal 2 tahun. Dalam hal ini, kika fluktuasi bukan frekuensi tetap, maka fluktuasi tersebut bersifat siklus. Namun jika frekuensinya tidak berubah dan terkait dengan beberapa aspek kalender, maka polanya musiman.
Pada umumnya panjang rata-rata siklus lebih panjang dari panjang pola musiman, dan besaran siklus cenderung lebih bervariasi daripada besaran pola musiman. Banyak deret waktu termasuk tren, siklus, dan musiman. Saat memilih metode peramalan, yang pertama dengan mengidentifikasi pola deret waktu dalam data dan memilih metode yang mampu menangkap pola dengan benar.
Contoh pada Gambar dibawah menunjukkan kombinasi yang berbeda dari komponen di atas.
Penjualan perumahan bulanan (plot pertama) menunjukkan musim yang kuat dalam setiap tahun, serta beberapa perilaku siklus yang kuat dengan jangka waktu sekitar 6-10 tahun. Tidak ada tren yang jelas dalam data selama periode ini.
Kontrak treasury bill AS (plot kedua) menunjukkan hasil dari pasar Chicago selama 100 hari perdagangan berturut-turut pada tahun 1981. Di sini tidak ada musim namun tren mengalami penurunan yang jelas.Pada plot ini hanya dalam 100 hari, maka tren tersebut tampaknya menjadi tren.
Produksi listrik triwulanan Australia (plot ketiga) menunjukkan tren peningkatan yang kuat, dengan musim yang kuat. Tidak ada bukti perilaku siklik di sini.
Perubahan harian pada harga saham penutupan Google (plot keempat) tidak memiliki tren, musiman, atau perilaku siklus. Ada fluktuasi acak yang tampaknya tidak dapat diprediksi, dan tidak ada pola kuat yang akan membantu mengembangkan model peramalan.
Plot musiman mirip dengan plot waktu kecuali bahwa data diplot terhadap “musim” individu di mana data diamati. Sebuah contoh diberikan di bawah ini menunjukkan penjualan obat antidiabetes.
ggseasonplot(a10, year.labels=TRUE, year.labels.left=TRUE)+
ylab ("$ million")+
ggtitle("Figure 4: Seasonal plot antidiabetic drug sales")Pada plot diatas terlihat tumpang tindih pada setiap musim. Plot musiman memungkinkan pola musiman yang mendasarinya terlihat lebih jelas, dan sangat berguna dalam mengidentifikasi tahun-tahun di mana pola tersebut berubah.
Dari plot diatas dapat dilihat dengan jelas bahwa terjadi lonjakan penjualan yang besar di bulan Januari setiap tahunnya. Sebenarnya, ini mungkin penjualan pada akhir Desember sebagai persediaan pelanggan sebelum akhir tahun kalender, tetapi penjualan tidak terdaftar di pemerintah sampai satu atau dua minggu kemudian. Grafik juga menunjukkan bahwa ada jumlah penjualan yang sangat kecil di bulan Maret 2008. Sedikitnya jumlah penjualan pada bulan Juni 2008 kemungkinan disebabkan karena belum lengkapnya penghitungan penjualan pada saat pendataan.
Variasi yang berguna pada plot musiman menggunakan koordinat kutub. Atur polar=TRUE membuat sumbu deret waktu menjadi melingkar dan bukan horizontal, seperti yang ditunjukkan di bawah ini.
ggseasonplot (a10, polar=TRUE)+
ylab ("$ million")+
ggtitle("Figure 5: Polar seasonal plot 2 antidiabetic drug sales")Plot alternatif yang menekankan pola musiman adalah dimana data untuk setiap musim dikumpulkan bersama dalam plot waktu mini yang terpisah.
ggsubseriesplot(a10)+
ylab("$ million")+
ggtitle("Figure 6: Seasonal subseries plot antidiabetic drug sales")Garis horizontal menunjukkan rata-rata untuk setiap bulan. Bentuk plot ini memungkinkan pola musim yang mendasarinya terlihat jelas, dan juga menunjukkan perubahan musim dari waktu ke waktu. Hal ini sangat berguna dalam mengidentifikasi perubahan dalam musim tertentu. Dalam contoh ini, plotnya tidak terlalu terbuka, namun dalam beberapa kasus, ini adalah cara yang paling berguna untuk melihat perubahan musim dari waktu ke waktu.
Plot dibawah ini menunjukkan dua deret waktu: permintaan listrik setengah jam (dalam Gigawatt) dan suhu (dalam derajat Celcius), untuk tahun 2014 di Victoria, Australia. Suhu untuk Melbourne, kota terbesar di Victoria, sedangkan nilai permintaan untuk seluruh negara bagian.
library(fpp2) #Half-hourly and daily electricity demand for Victoria, Australia, in 2014 ## Warning: package 'fpp2' was built under R version 4.1.3
##
## Attaching package: 'fpp2'
## The following objects are masked from 'package:fpp':
##
## ausair, ausbeer, austa, austourists, debitcards, departures,
## elecequip, euretail, guinearice, oil, sunspotarea, usmelec
autoplot(elecdemand[,c("Demand","Temperature")], facets=TRUE)+
xlab ("Year: 2014") + ylab("") +
ggtitle("Figure 7: Half-hourly electricity demand ~ Victoria, Australia")(Kode sebenarnya untuk plot ini sedikit lebih rumit daripada yang ditampilkan untuk memasukkan bulan pada sumbu x.)
Kita dapat mempelajari hubungan antara permintaan dan suhu dengan memplot satu seri terhadap yang lain.
qplot (Temperature, Demand, data=as.data.frame(elecdemand)) +
ylab ("Demand (GW)") + xlab ("Temperature (Celsius)")Ketika ada beberapa variabel prediktor potensial, akan berguna untuk memplot setiap variabel terhadap satu sama lain variabel. Perhatikan lima rangkaian waktu yang ditunjukkan di bawah ini, yang menunjukkan jumlah pengunjung triwulanan untuk lima wilayah New South Wales, Australia.
autoplot(visnights[,1:5], facets=TRUE) +
ylab ("Number of visitor nights each quarter (millions)")Untuk melihat hubungan antara kelima deret waktu ini, kita dapat memplot setiap deret waktu terhadap deret waktu lainnya. Plot-plot ini dapat diatur dalam matriks scatterplot, seperti yang ditunjukkan pada Gambar di bawah. (Plot ini membutuhkan packages GGally untuk diinstal.)
GGally::ggpairs(as.data.frame(visnights[,1:5]))## Registered S3 method overwritten by 'GGally':
## method from
## +.gg ggplot2
Untuk setiap panel, variabel pada sumbu vertikal diberikan oleh nama variabel pada baris tersebut, dan variabel pada sumbu horizontal diberikan oleh nama variabel pada kolom tersebut. Ada banyak pilihan yang tersedia untuk menghasilkan plot yang berbeda dalam setiap panel. Dalam versi default, korelasi ditampilkan di bagian kanan atas plot, sedangkan scatterplot ditampilkan di bagian bawah. Pada diagonal ditampilkan plot kepadatan.
Nilai dari matriks scatterplot adalah memungkinkan tampilan cepat dari hubungan antara semua pasangan variabel. Dalam contoh ini, plot kolom kedua menunjukkan ada hubungan positif yang kuat antara pengunjung pantai utara NSW dan pengunjung pantai selatan NSW, tetapi tidak ada hubungan yang terdeteksi antara pengunjung pantai utara NSW dan pengunjung ke pedalaman selatan NSW. Pencilan juga bisa terlihat. Ada satu kuartal yang sangat tinggi untuk wilayah Metropolitan NSW, sesuai dengan Olimpiade Sydney 2000. Hal ini paling mudah terlihat pada dua plot pertama di kolom kiri Gambar di atas, di mana nilai terbesar untuk NSW Metro terpisah dari awan utama pengamatan.
Gambar di bawah ini menampilkan sebar produksi bir Australia triwulanan, di mana sumbu horizontal menunjukkan nilai lag dari deret waktu. Setiap grafik menunjukkan [Kesalahan Pemrosesan Matematika] diplot terhadap [Kesalahan Pemrosesan Matematika] untuk nilai yang berbeda dari [Kesalahan Pemrosesan Matematika]
library(tsibbledata)## Warning: package 'tsibbledata' was built under R version 4.1.3
library(tsibble)## Warning: package 'tsibble' was built under R version 4.1.3
##
## Attaching package: 'tsibble'
## The following object is masked from 'package:zoo':
##
## index
## The following objects are masked from 'package:base':
##
## intersect, setdiff, union
library(stats)
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(feasts)## Warning: package 'feasts' was built under R version 4.1.3
## Loading required package: fabletools
## Warning: package 'fabletools' was built under R version 4.1.3
##
## Attaching package: 'fabletools'
## The following objects are masked from 'package:forecast':
##
## accuracy, forecast
library(fabletools)
library(lubridate)##
## Attaching package: 'lubridate'
## The following object is masked from 'package:tsibble':
##
## interval
## The following objects are masked from 'package:base':
##
## date, intersect, setdiff, union
recent_production <- aus_production %>%
filter (year(Quarter) >= 2000)
recent_production %>%
gg_lag(Beer, geom= "point")Di sini warna menunjukkan seperempat variabel pada sumbu vertikal. Garis menghubungkan titik-titik dalam urutan kronologis. Hubungannya sangat positif pada lag 4 dan 8, mencerminkan musim yang kuat dalam data. Hubungan negatif terlihat untuk lag 2 dan 6 terjadi karena puncak (di Q4) diplot melawan palung (di Q2)
Fungsi window() yang digunakan di sini sangat berguna saat mengekstrak sebagian dari deret waktu. Dalam hal ini, kemudian mengekstrak data dari ausbeer, mulai tahun 1992.
Sama seperti korelasi mengukur sejauh mana hubungan linier antara dua variabel, autokorelasi mengukur hubungan linier antara nilai-nilai tertinggal dari deret waktu.
Ada beberapa koefisien autokorelasi, sesuai dengan setiap panel di plot lag. Misalnya, [Kesalahan Pemrosesan Matematika] mengukur hubungan antara [Kesalahan Pemrosesan Matematika] dan [Kesalahan Pemrosesan Matematika] mengukur hubungan antara [Kesalahan Pemrosesan Matematika] dan [Kesalahan Pemrosesan Matematika],$ dan seterusnya.
Nilai rk dapat ditulis sebagai [Kesalahan Pemrosesan Matematika], di mana [Kesalahan Pemrosesan Matematika] adalah panjang deret waktu.
Sembilan koefisien autokorelasi pertama untuk data produksi bir diberikan dalam tabel berikut.
Ini sesuai dengan sembilan scatterplot pada Gambar di bawah. Koefisien autokorelasi diplot untuk menunjukkan fungsi autokorelasi atau ACF.
recent_production %>% ACF (Beer, lag_max = 9)## # A tsibble: 9 x 2 [1Q]
## lag acf
## <lag> <dbl>
## 1 1Q -0.0530
## 2 2Q -0.758
## 3 3Q -0.0262
## 4 4Q 0.802
## 5 5Q -0.0775
## 6 6Q -0.657
## 7 7Q 0.00119
## 8 8Q 0.707
## 9 9Q -0.0888
Nilai dalam kolom acf adalah [Math Processing Error] yang sesuai dengan sembilan scatterplot pada Gambar di bawah. Bbiasanya memplot ACF untuk melihat bagaimana korelasi berubah dengan lag [Kesalahan Pemrosesan Matematika]. Plot kadang-kadang dikenal sebagai correlogram.
recent_production %>%
ACF (Beer) %>%
autoplot()+labs (title="Australian beer production")Dalam grafik ini:
[Kesalahan Pemrosesan Matematika] lebih tinggi daripada lag lainnya. Hal ini disebabkan pola musiman dalam data: puncak cenderung terpisah empat perempat dan palung cenderung terpisah empat perempat.
[Kesalahan Pemrosesan Matematika] lebih negatif daripada kelambatan lainnya karena palung cenderung dua perempat di belakang puncak.
Garis putus-putus berwarna biru menunjukkan apakah korelasi berbeda nyata dari nol. Ini dijelaskan di bagian berikutnya (White Noise).
Ketika data memiliki tren, autokorelasi untuk lag kecil cenderung besar dan positif karena pengamatan yang berdekatan dalam waktu juga berukuran dekat. Jadi ACF dari rangkaian waktu yang tren cenderung memiliki nilai positif yang perlahan-lahan menurun seiring dengan peningkatan lag.
Ketika data bersifat musiman, autokorelasi akan lebih besar untuk lag musiman (pada kelipatan frekuensi musiman) daripada lag lainnya.
Saat data sedang tren dan musiman, Anda melihat kombinasi dari efek ini. Rangkaian permintaan listrik bulanan Australia yang diplot pada Gambar 2.15 menunjukkan tren dan musiman. ACF-nya ditunjukkan pada Gambar di bawah ini:
aelec <- window(elec, start=1980)
autoplot (aelec) + xlab ("Year") + ylab ("GWh")ggAcf(aelec, lag=48)Deret waktu yang tidak menunjukkan autokorelasi disebut white noise. Gambar di bawah ini memberikan contoh rangkaian white noise.
library(forecast)
library(ggplot2)
set.seed (30)
y <- ts(rnorm(50))
autoplot(y)+ ggtitle("White noise")ggAcf(y)Untuk seri white noise, dengan berharap setiap autokorelasi mendekati nol. Tentu saja, mereka tidak akan sama persis dengan nol karena ada beberapa variasi acak. Untuk deret derau putih, dengan memperkirakan 95% lonjakan di ACF terletak di dalam [Kesalahan Pemrosesan Matematika] di mana T adalah panjang deret waktu. Adalah umum untuk memplot batas-batas ini pada grafik ACF (garis putus-putus biru di atas). Jika satu atau lebih paku besar berada di luar batas ini, atau jika secara substansial lebih dari 5% paku berada di luar batas ini, maka rangkaian tersebut mungkin bukan white noise.
Dalam contoh ini, T=50 dan batasnya berada di [Kesalahan Pemrosesan Matematika]. Semua koefisien autokorelasi berada dalam batas-batas ini, mengkonfirmasikan bahwa datanya adalah white noise.