##ANALISIS TIME SERIES MUSIMAN

Analisis deret waktu musiman adalah proses memahami, memodelkan, dan meramalkan data yang memiliki pola musiman atau siklus teratur. Data deret waktu musiman adalah data yang menunjukkan fluktuasi periodik atau pola teratur yang terjadi dalam interval waktu tertentu, seperti harian, bulanan, kuartalan, atau tahunan. Analisis deret waktu musiman penting dalam berbagai bidang, termasuk ekonomi, keuangan, meteorologi, dan produksi.

Berikut adalah beberapa langkah pendahuluan yang umum dilakukan dalam analisis deret waktu musiman:

Pengamatan Data: Langkah pertama adalah mengamati data deret waktu untuk mengidentifikasi pola musiman. Ini melibatkan visualisasi data menggunakan grafik deret waktu dan histogram, serta pengamatan terhadap fluktuasi yang berulang dalam interval waktu tertentu.

Differencing: Jika data tidak stasioner, langkah berikutnya adalah menerapkan differencing untuk membuat data menjadi stasioner. Differencing dapat dilakukan untuk menghilangkan tren dan/atau musim.

Identifikasi Model: Setelah data menjadi stasioner, langkah selanjutnya adalah mengidentifikasi model yang sesuai untuk meramalkan deret waktu musiman. Ini melibatkan pemilihan model ARIMA (Autoregressive Integrated Moving Average) atau model musiman seperti SARIMA (Seasonal ARIMA) berdasarkan analisis ACF (Autocorrelation Function) dan PACF (Partial Autocorrelation Function).

Estimasi Parameter: Setelah model diidentifikasi, parameter model harus diestimasi menggunakan metode seperti Maksimum Likelihood (ML) atau Metode Kuadrat Terkecil (OLS).

Uji Model: Penting untuk menguji kecocokan model terhadap data, seperti uji kecocokan, uji heteroskedastisitas, dan uji autokorelasi untuk memastikan bahwa model yang dibangun cocok dengan data.

Validasi dan Peramalan: Setelah model dinyatakan sesuai, itu dapat digunakan untuk membuat peramalan untuk periode yang akan datang. Validasi peramalan dapat dilakukan dengan membandingkan hasil peramalan dengan data aktual dan mengukur tingkat akurasi model.

Evaluasi: Akhirnya, model dapat dievaluasi berdasarkan kinerja peramalan, kesesuaian dengan data, dan kemampuan model untuk menangkap pola musiman yang mungkin terjadi dalam data.

Analisis deret waktu musiman memungkinkan pemahaman yang lebih baik tentang pola yang terjadi dalam data dan membantu dalam pengambilan keputusan yang lebih baik dalam merencanakan, memprediksi, dan mengelola proses atau fenomena yang memiliki sifat musiman.

library(tseries)
## Warning: package 'tseries' was built under R version 4.3.2
## Registered S3 method overwritten by 'quantmod':
##   method            from
##   as.zoo.data.frame zoo
library(forecast)
## Warning: package 'forecast' was built under R version 4.3.3
library(lmtest)
## Warning: package 'lmtest' was built under R version 4.3.2
## Loading required package: zoo
## 
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
## 
##     as.Date, as.Date.numeric
library(NormalityAssessment)
## Warning: package 'NormalityAssessment' was built under R version 4.3.2
library(nortest)
library(readxl)
## Warning: package 'readxl' was built under R version 4.3.2

*library(tseries): Ini adalah perintah untuk memuat paket “tseries” di R. Paket ini berisi berbagai fungsi untuk analisis deret waktu.

library(forecast): Ini adalah perintah untuk memuat paket “forecast” di R. Paket ini berisi fungsi-fungsi yang digunakan untuk meramalkan data deret waktu.

library(lmtest): Ini adalah perintah untuk memuat paket “lmtest” di R. Paket ini menyediakan berbagai tes untuk memeriksa asumsi-asumsi dalam model regresi linear.

library(NormalityAssessment): Ini adalah perintah untuk memuat paket “NormalityAssessment” di R. Paket ini menyediakan fungsi-fungsi untuk mengevaluasi normalitas distribusi data.

library(nortest): Ini adalah perintah untuk memuat paket “nortest” di R. Paket ini berisi berbagai tes untuk menguji normalitas distribusi data.

library(readxl): Ini adalah perintah untuk memuat paket “readxl” di R. Paket ini menyediakan fungsi-fungsi untuk membaca file Excel (.xls dan .xlsx).

data <- read.csv("C:/Users/dayah/Downloads/penumpang.csv", sep=";")
data
##       t  zt
## 1     1 112
## 2     2 118
## 3     3 132
## 4     4 129
## 5     5 121
## 6     6 135
## 7     7 148
## 8     8 148
## 9     9 136
## 10   10 119
## 11   11 104
## 12   12 118
## 13   13 115
## 14   14 126
## 15   15 141
## 16   16 135
## 17   17 125
## 18   18 149
## 19   19 170
## 20   20 170
## 21   21 158
## 22   22 133
## 23   23 114
## 24   24 140
## 25   25 145
## 26   26 150
## 27   27 178
## 28   28 163
## 29   29 172
## 30   30 178
## 31   31 199
## 32   32 199
## 33   33 184
## 34   34 162
## 35   35 146
## 36   36 166
## 37   37 171
## 38   38 180
## 39   39 193
## 40   40 181
## 41   41 183
## 42   42 218
## 43   43 230
## 44   44 242
## 45   45 209
## 46   46 191
## 47   47 172
## 48   48 194
## 49   49 196
## 50   50 196
## 51   51 236
## 52   52 235
## 53   53 229
## 54   54 243
## 55   55 264
## 56   56 272
## 57   57 237
## 58   58 211
## 59   59 180
## 60   60 201
## 61   61 204
## 62   62 188
## 63   63 235
## 64   64 227
## 65   65 234
## 66   66 264
## 67   67 302
## 68   68 293
## 69   69 259
## 70   70 229
## 71   71 203
## 72   72 229
## 73   73 242
## 74   74 233
## 75   75 267
## 76   76 269
## 77   77 270
## 78   78 315
## 79   79 364
## 80   80 347
## 81   81 312
## 82   82 274
## 83   83 237
## 84   84 278
## 85   85 284
## 86   86 277
## 87   87 317
## 88   88 313
## 89   89 318
## 90   90 374
## 91   91 413
## 92   92 405
## 93   93 355
## 94   94 306
## 95   95 271
## 96   96 306
## 97   97 315
## 98   98 301
## 99   99 356
## 100 100 348
## 101 101 355
## 102 102 422
## 103 103 465
## 104 104 467
## 105 105 404
## 106 106 347
## 107 107 305
## 108 108 336
## 109 109 340
## 110 110 318
## 111 111 362
## 112 112 348
## 113 113 363
## 114 114 435
## 115 115 491
## 116 116 505
## 117 117 404
## 118 118 359
## 119 119 310
## 120 120 337
## 121 121 360
## 122 122 342
## 123 123 406
## 124 124 396
## 125 125 420
## 126 126 472
## 127 127 548
## 128 128 559
## 129 129 463
## 130 130 407
## 131 131 362
## 132 132 405
## 133 133 417
## 134 134 391
## 135 135 419
## 136 136 461
## 137 137 472
## 138 138 535
## 139 139 622
## 140 140 606
## 141 141 508
## 142 142 461
## 143 143 390
## 144 144 432
head(data)
##   t  zt
## 1 1 112
## 2 2 118
## 3 3 132
## 4 4 129
## 5 5 121
## 6 6 135
tail(data)
##       t  zt
## 139 139 622
## 140 140 606
## 141 141 508
## 142 142 461
## 143 143 390
## 144 144 432
##plot time series
#melabel data zt dengan"hasil penjual"
penumpang<-data$zt
Bulan<-data$t

sintaks penumpang <- data\(zt mengambil nilai-nilai dari kolom "zt" dan menyimpannya dalam objek penumpang, sementara sintaks Bulan <- data\)t mengambil nilai-nilai dari kolom “t” dan menyimpannya dalam objek Bulan.

#Tahap identifikasi
ts.plot(penumpang)

acf(penumpang, lag.max = 85)

Fungsi ts.plot() digunakan untuk membuat plot deret waktu dari data yang disimpan dalam objek penumpang. Ini akan menampilkan grafik yang menunjukkan bagaimana data penumpang berubah sepanjang waktu. Plot ini bisa membantu untuk melihat pola-pola atau tren yang mungkin ada dalam data. Fungsi acf() digunakan untuk menghitung dan memplot fungsi korelasi otokorelasi (ACF) dari deret waktu. Dalam kasus ini, deret waktu yang digunakan adalah penumpang. Argumen lag.max = 144 menentukan jumlah maksimum lag yang akan dihitung untuk ACF. Dalam hal ini, maksimum lag yang dihitung adalah 144, yang mungkin sesuai dengan asumsi bulanan jika data waktu diukur dalam bulan. #Kedua perintah ini membantu dalam menganalisis pola dan korelasi dalam data deret waktu, yang penting untuk pemodelan dan peramalan.

#cek kestasioneran data
adf.test(penumpang)
## Warning in adf.test(penumpang): p-value smaller than printed p-value
## 
##  Augmented Dickey-Fuller Test
## 
## data:  penumpang
## Dickey-Fuller = -7.3186, Lag order = 5, p-value = 0.01
## alternative hypothesis: stationary

adf.test(penumpang) digunakan untuk melakukan tes Augmented Dickey-Fuller (ADF) terhadap data yang disimpan dalam objek penumpang. Tes ini umumnya digunakan untuk menguji keberadaan kestasioneran dalam data deret waktu. #Dengan menggunakan perintah ini, Anda dapat mengevaluasi apakah data penumpang menunjukkan keberadaan kestasioneran atau tidak.

#plot autokorelasi dan partial
acf(penumpang, lag.max = 80)
par(mfrow=c(1,2))
acf(penumpang, lag.max = 80)
pacf(penumpang, lag.max = 80)

acf(penumpang, lag.max = 80): Fungsi acf() digunakan untuk menghitung dan memplot fungsi korelasi otokorelasi (ACF) dari deret waktu yang disimpan dalam objek penumpang. Dalam hal ini, argumen lag.max = 80 menentukan bahwa hanya korelasi hingga lag maksimum 80 yang akan dihitung dan ditampilkan. Ini membantu dalam melihat pola korelasi otokorelasi dalam deret waktu.

par(mfrow=c(1,2)): Fungsi par() digunakan untuk mengatur parameter gambar di R. Argumen mfrow=c(1,2) mengatur layout gambar menjadi satu baris dan dua kolom. Ini berarti gambar-gambar berikutnya akan diatur dalam dua kotak secara horizontal.

Setelah pengaturan parameter gambar, dua plot akan ditampilkan:

Plot pertama adalah ACF (Autocorrelation Function) dari deret waktu penumpang, dengan lag maksimum 80. Plot kedua adalah PACF (Partial Autocorrelation Function) dari deret waktu yang sama, juga dengan lag maksimum 80. Ini membantu untuk memahami pola korelasi otokorelasi dan parsial otokorelasi dalam deret waktu, yang berguna dalam pemodelan dan peramalan.

#differencing 1 non musiman dengan beberapa cara
differencing1 <- diff(penumpang, differences=1)
differencing1
##   [1]    6   14   -3   -8   14   13    0  -12  -17  -15   14   -3   11   15   -6
##  [16]  -10   24   21    0  -12  -25  -19   26    5    5   28  -15    9    6   21
##  [31]    0  -15  -22  -16   20    5    9   13  -12    2   35   12   12  -33  -18
##  [46]  -19   22    2    0   40   -1   -6   14   21    8  -35  -26  -31   21    3
##  [61]  -16   47   -8    7   30   38   -9  -34  -30  -26   26   13   -9   34    2
##  [76]    1   45   49  -17  -35  -38  -37   41    6   -7   40   -4    5   56   39
##  [91]   -8  -50  -49  -35   35    9  -14   55   -8    7   67   43    2  -63  -57
## [106]  -42   31    4  -22   44  -14   15   72   56   14 -101  -45  -49   27   23
## [121]  -18   64  -10   24   52   76   11  -96  -56  -45   43   12  -26   28   42
## [136]   11   63   87  -16  -98  -47  -71   42

Sintaks diff(penumpang, differences=1) digunakan untuk melakukan differencing pada deret waktu yang disimpan dalam objek penumpang. Differencing sering digunakan dalam analisis deret waktu untuk membuat data menjadi stasioner dengan menghapus tren atau pola musiman.

Argumen differences=1 menunjukkan bahwa differencing pertama akan dilakukan. Ini berarti nilai saat ini dalam deret waktu akan dikurangi dengan nilai sebelumnya dalam deret waktu. Hasilnya adalah deret waktu baru yang berisi perbedaan antara nilai-nilai berturut-turut dalam deret waktu awal.

Hasil differencing pertama disimpan dalam objek baru yang disebut differencing1. Anda dapat menggunakan objek ini untuk melanjutkan analisis lebih lanjut, seperti memeriksa stasioneritas, membangun model, atau melakukan peramalan.

differencing2 <- diff(penumpang)
differencing2
##   [1]    6   14   -3   -8   14   13    0  -12  -17  -15   14   -3   11   15   -6
##  [16]  -10   24   21    0  -12  -25  -19   26    5    5   28  -15    9    6   21
##  [31]    0  -15  -22  -16   20    5    9   13  -12    2   35   12   12  -33  -18
##  [46]  -19   22    2    0   40   -1   -6   14   21    8  -35  -26  -31   21    3
##  [61]  -16   47   -8    7   30   38   -9  -34  -30  -26   26   13   -9   34    2
##  [76]    1   45   49  -17  -35  -38  -37   41    6   -7   40   -4    5   56   39
##  [91]   -8  -50  -49  -35   35    9  -14   55   -8    7   67   43    2  -63  -57
## [106]  -42   31    4  -22   44  -14   15   72   56   14 -101  -45  -49   27   23
## [121]  -18   64  -10   24   52   76   11  -96  -56  -45   43   12  -26   28   42
## [136]   11   63   87  -16  -98  -47  -71   42

Sintaks diff(penumpang) digunakan untuk melakukan differencing pada deret waktu yang disimpan dalam objek penumpang. Dalam perintah ini, karena tidak ada argumen differences yang diberikan, secara default diff() akan melakukan differencing pertama.

Differencing pertama adalah mengurangkan setiap titik data dari titik data sebelumnya dalam deret waktu. Namun, dalam beberapa kasus, differencing pertama saja mungkin tidak cukup untuk membuat data menjadi stasioner. Oleh karena itu, differencing kedua dapat digunakan sebagai alternatif. Differencing kedua melibatkan differencing dari deret waktu hasil differencing pertama. Ini dilakukan dengan mengurangkan setiap titik data dari titik data sebelumnya dalam deret waktu hasil differencing pertama.

Hasil differencing kedua disimpan dalam objek baru yang disebut differencing2. Anda dapat menggunakan objek ini untuk analisis stasioneritas lebih lanjut atau untuk membangun model dan melakukan peramalan.

differencing3 <- diff(penumpang, lag=18)
differencing3
##   [1]   58   52   26    4   -7    5   -3    2   42   44   68   60   84   73   43
##  [16]   27   21   17    1   10   35   48   69   78   85   92   31   28    0   16
##  [31]   -3   -3   52   73   83   77   93   92   44   30   -3  -17  -26  -54   26
##  [46]   36   62   70  106   97   23   -6  -26  -14  -22  -39   30   58   90  114
##  [61]  160  159   77   47    3   14  -18  -16   58   84  115  145  171  172   88
##  [76]   37    1   -9  -49  -46   44   74  118  144  181  190   87   34  -13  -38
##  [91]  -73  -87    7   42   92  129  176  204   48   11  -45  -85 -105 -125    2
## [106]   49  115  136  208  241  101   59   -1  -30  -74 -114   15  102  162  198
## [121]  262  264  102   65  -30  -40

Sintaks diff(penumpang, lag=18) digunakan untuk melakukan differencing pada deret waktu yang disimpan dalam objek penumpang, dengan menggunakan lag atau jarak 18. Ini berarti nilai pada titik waktu ke-t akan dikurangkan dengan nilai pada titik waktu ke-(t-18).

Differencing dengan lag 18 ini dapat berguna untuk menangani pola musiman yang mungkin terjadi dalam data. Dengan mengurangkan nilai pada titik waktu tertentu dengan nilai pada titik waktu yang sama 18 periode sebelumnya, kita dapat menghilangkan beberapa efek musiman dari data.

Hasil differencing dengan lag 18 disimpan dalam objek baru yang disebut differencing3. Anda dapat menggunakan objek ini untuk menganalisis lebih lanjut atau untuk membangun model dan melakukan peramalan.

#plot time series, autokorelasi dan patial
ts.plot(differencing1)

acf(differencing1, lag.max = 18)

ts.plot(differencing1): Fungsi ts.plot() digunakan untuk membuat plot deret waktu dari data yang telah mengalami differencing pertama dan disimpan dalam objek differencing1. Ini akan menampilkan grafik yang menunjukkan bagaimana deret waktu telah berubah setelah differencing pertama. Plot ini dapat membantu dalam melihat apakah tren atau pola musiman telah dihilangkan setelah differencing.

acf(differencing1, lag.max = 18): Fungsi acf() digunakan untuk menghitung dan memplot fungsi korelasi otokorelasi (ACF) dari deret waktu yang telah mengalami differencing pertama dan disimpan dalam objek differencing1. Dalam hal ini, argumen lag.max = 18 menentukan bahwa hanya korelasi hingga lag maksimum 18 yang akan dihitung dan ditampilkan. Ini membantu dalam melihat pola korelasi otokorelasi dalam deret waktu yang telah stasioner setelah differencing.

Kedua perintah ini berguna dalam analisis deret waktu untuk memeriksa stasioneritas dan pola korelasi otokorelasi setelah proses differencing.

#cek kestasioneran data
adf.test(differencing1)
## Warning in adf.test(differencing1): p-value smaller than printed p-value
## 
##  Augmented Dickey-Fuller Test
## 
## data:  differencing1
## Dickey-Fuller = -7.0177, Lag order = 5, p-value = 0.01
## alternative hypothesis: stationary

Perintah adf.test(differencing1) digunakan untuk melakukan tes Augmented Dickey-Fuller (ADF) terhadap data yang telah mengalami differencing pertama dan disimpan dalam objek differencing1.

Tes ADF berguna untuk menguji keberadaan kestasioneran dalam data deret waktu. Hasil tes akan memberikan statistik uji dan nilai p-value yang membantu dalam menentukan apakah hipotesis nol dapat ditolak atau tidak. Hipotesis nol dari tes ADF adalah bahwa deret waktu memiliki akar unit, yang menunjukkan bahwa data tidak stasioner. Jika nilai p-value cukup rendah (biasanya di bawah tingkat signifikansi yang dipilih, misalnya 0.05), maka kita dapat menyimpulkan bahwa ada cukup bukti untuk menolak hipotesis nol, yang berarti deret waktu mungkin stasioner setelah differencing.

Dengan menggunakan perintah ini, Anda dapat mengevaluasi apakah differencing pertama telah membuat data differencing1 menjadi stasioner atau tidak.

#differencing 1 musiman 15 dari data yang sudah didiferencing
diffnonmus_mus12 <- diff(differencing1, lag = 15)
diffnonmus_mus12
##   [1]  -16   10   24    8  -26  -38  -19   38   22   20   14  -12   -2   -9   27
##  [16]   10  -39  -43  -16   32   30   28  -13  -17   -3    7   27    3  -39  -39
##  [31]  -19   37   24   16   20   -6  -15    1   33    6  -70  -38  -43   54   21
##  [46]    3   25  -10    7  -10   39   -3  -48  -51  -34   61   39   22   13   -1
##  [61]   17   -2   57  -24  -65  -76  -28   75   36   19   14  -17   14   22   37
##  [76]   -9  -95  -98  -18   70   47   23   14  -14   14   27   47   -3 -119  -96
##  [91]  -34   81   53   13    9  -23   29   17   64    7 -168  -88  -51   90   80
## [106]   24   33  -14   46    8   90   -4 -168 -112  -59  144   57   23    1   19
## [121]   29   -1   97  -40 -150 -123  -82  138

Sintaks diff(differencing1, lag = 15) digunakan untuk melakukan differencing pada deret waktu yang telah mengalami differencing pertama dan disimpan dalam objek differencing1, dengan menggunakan lag atau jarak 15. Ini berarti nilai pada titik waktu ke-t akan dikurangkan dengan nilai pada titik waktu ke-(t-15).

Differencing dengan lag 15 ini mungkin digunakan untuk menangani pola musiman yang mungkin masih ada dalam data setelah differencing pertama. Dengan mengurangkan nilai pada titik waktu tertentu dengan nilai pada titik waktu yang sama 15 periode sebelumnya, kita dapat mengurangi beberapa efek musiman dari data.

Hasil differencing dengan lag 15 disimpan dalam objek baru yang disebut diffnonmus_mus12. Anda dapat menggunakan objek ini untuk menganalisis lebih lanjut atau untuk membangun model dan melakukan peramalan.

#plot time series, plot Autokorelasi data hasil differencing 
ts.plot(diffnonmus_mus12)

par(mfrow=c(1,2))
acf(diffnonmus_mus12, lag.max = 75)
pacf(diffnonmus_mus12, lag.max = 75)

ts.plot(diffnonmus_mus12): Ini adalah fungsi untuk memplot deret waktu yang disimpan dalam objek diffnonmus_mus12. Plot ini akan menampilkan perubahan dalam deret waktu setelah proses differencing dengan lag 15. Ini membantu dalam memahami pola-pola baru yang mungkin muncul setelah mengurangi efek musiman dari data.

par(mfrow=c(1,2)): Fungsi par() digunakan untuk mengatur parameter gambar di R. Dalam hal ini, mfrow=c(1,2) mengatur layout gambar menjadi satu baris dan dua kolom.

acf(diffnonmus_mus12, lag.max = 75): Fungsi acf() digunakan untuk menghitung dan memplot fungsi korelasi otokorelasi (ACF) dari deret waktu yang disimpan dalam objek diffnonmus_mus12. Argumen lag.max = 75 menunjukkan bahwa hanya korelasi hingga lag maksimum 75 yang akan dihitung dan ditampilkan.

pacf(diffnonmus_mus12, lag.max = 75): Fungsi pacf() digunakan untuk menghitung dan memplot fungsi korelasi parsial otokorelasi (PACF) dari deret waktu yang sama. Argumen lag.max = 75 menunjukkan bahwa hanya korelasi parsial hingga lag maksimum 75 yang akan dihitung dan ditampilkan.

Dengan menggunakan perintah-perintah ini, Anda dapat menganalisis deret waktu yang telah mengalami differencing dengan lag 15, serta memeriksa pola korelasi otokorelasi dan parsial otokorelasi dalam data.

## terdapat beberapa dugaan model ARIMA sementara yaitu ARIMA(0,1,1)(0,1,1) periode=12 atau
#ARIMA(0,1,1)(1,1,1) atau ARIMA(0,1,1)(1,1,0)
#ARIMA(0,1,1)(0,1,1) 
fit1<-arima(penumpang, order=c(0,1,1), seasonal = list(order=c(0,1,1), periode=12), method = "ML")
fit1
## 
## Call:
## arima(x = penumpang, order = c(0, 1, 1), seasonal = list(order = c(0, 1, 1), 
##     periode = 12), method = "ML")
## 
## Coefficients:
##           ma1     sma1
##       -0.3087  -0.1074
## s.e.   0.0890   0.0828
## 
## sigma^2 estimated as 135.4:  log likelihood = -507.5,  aic = 1021

Sintaks arima(penumpang, order=c(0,1,1), seasonal = list(order=c(0,1,1), period=12), method = “ML”) digunakan untuk membangun model ARIMA (Autoregressive Integrated Moving Average) pada deret waktu yang disimpan dalam objek penumpang.

Argumen penumpang adalah deret waktu yang akan dimodelkan.

Argumen order=c(0,1,1) menunjukkan bahwa model ARIMA yang dibangun memiliki komponen differencing pertama (d=1) dan komponen moving average (q=1), tetapi tidak memiliki komponen autoregressive (p=0). Ini menunjukkan bahwa differencing pertama dilakukan untuk membuat data stasioner, dan ada satu nilai moving average dalam model.

Argumen seasonal = list(order=c(0,1,1), period=12) menunjukkan adanya komponen musiman dalam model ARIMA. order=c(0,1,1) menunjukkan bahwa komponen musiman juga memiliki komponen differencing pertama (D=1) dan komponen moving average (Q=1), tetapi tidak memiliki komponen autoregressive musiman (P=0). Argumen period=12 menunjukkan bahwa musimnya berlangsung setiap 12 periode.

Argumen method = “ML” menunjukkan bahwa metode estimasi yang digunakan adalah metode Maksimum Likelihood (ML).

Hasilnya, model ARIMA yang sesuai disimpan dalam objek fit1, yang dapat Anda gunakan untuk memperoleh ringkasan model dan melakukan peramalan.

#Diagnosis checking
#1. uji kesignifikanan parameter : uji t
coeftest(fit1)
## 
## z test of coefficients:
## 
##       Estimate Std. Error z value  Pr(>|z|)    
## ma1  -0.308674   0.088950 -3.4702 0.0005201 ***
## sma1 -0.107446   0.082817 -1.2974 0.1944950    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

digunakan untuk melakukan uji statistik terhadap koefisien model yang diperoleh dari model ARIMA yang disimpan dalam objek fit1.

Ini akan menghasilkan statistik uji untuk setiap koefisien model, yang dapat membantu dalam mengevaluasi signifikansi koefisien tersebut dalam mempengaruhi data. Uji statistik yang umum digunakan adalah uji t.

Hasilnya akan berupa tabel yang berisi koefisien model bersama dengan statistik uji dan nilai p-value yang sesuai. Nilai-nilai p-value yang rendah menunjukkan bahwa koefisien tersebut signifikan secara statistik.

#2. pengujian residual apakah sudah white noise?
Box.test(fit1$residuals, type = "Ljung")
## 
##  Box-Ljung test
## 
## data:  fit1$residuals
## X-squared = 0.0020647, df = 1, p-value = 0.9638

Perintah Box.test(fit1$residuals, type = “Ljung”) digunakan untuk melakukan tes Box-Ljung terhadap residu dari model ARIMA yang disimpan dalam objek fit1. Tes Box-Ljung adalah salah satu tes yang umum digunakan untuk menguji apakah residu dari model deret waktu bersifat acak atau tidak, dengan memeriksa apakah ada korelasi dalam residu pada berbagai lag.

Argumen type = “Ljung” menentukan bahwa tes yang digunakan adalah tes Box-Ljung yang mengikuti metode Ljung-Box.

Hasilnya akan berisi nilai statistik uji dan nilai p-value yang menunjukkan apakah ada korelasi yang signifikan dalam residu pada berbagai lag. Jika nilai p-value signifikan (biasanya di bawah tingkat signifikansi yang dipilih, misalnya 0.05), maka kita dapat menyimpulkan bahwa residu dari model tidak bersifat acak. Sebaliknya, jika nilai p-value tidak signifikan, maka kita dapat menyimpulkan bahwa tidak ada korelasi yang signifikan dalam residu.

#3.pengujian residual apakah sudah berdistribusi normal?
shapiro.test(fit1$residuals)
## 
##  Shapiro-Wilk normality test
## 
## data:  fit1$residuals
## W = 0.97603, p-value = 0.0125

Perintah shapiro.test(fit1$residuals) digunakan untuk melakukan tes Shapiro-Wilk terhadap residu dari model ARIMA yang disimpan dalam objek fit1. Tes Shapiro-Wilk adalah salah satu tes yang digunakan untuk menguji apakah sampel berasal dari distribusi normal atau tidak.

Hasilnya akan berisi nilai statistik uji dan nilai p-value. Jika nilai p-value yang dihasilkan cukup besar (biasanya lebih dari tingkat signifikansi yang dipilih, misalnya 0.05), maka kita gagal menolak hipotesis nol, yang berarti ada cukup bukti untuk menyimpulkan bahwa residu dari model mengikuti distribusi normal. Sebaliknya, jika nilai p-value cukup kecil, kita dapat menolak hipotesis nol dan menyimpulkan bahwa residu tidak mengikuti distribusi normal.

#shapiro-francia normality test
sf.test(fit1$residuals)
## 
##  Shapiro-Francia normality test
## 
## data:  fit1$residuals
## W = 0.97088, p-value = 0.004843
#ARIMA(0,1,1)(1,1,0) 
fit2<-arima(penumpang, order=c(0,1,1), seasonal = list(order=c(1,1,0), periode=12), method = "ML")
fit2
## 
## Call:
## arima(x = penumpang, order = c(0, 1, 1), seasonal = list(order = c(1, 1, 0), 
##     periode = 12), method = "ML")
## 
## Coefficients:
##           ma1     sar1
##       -0.3096  -0.1459
## s.e.   0.0885   0.0974
## 
## sigma^2 estimated as 134.7:  log likelihood = -507.21,  aic = 1020.43

Sintaks arima(penumpang, order=c(0,1,1), seasonal = list(order=c(1,1,0), period=12), method = “ML”) digunakan untuk membangun model ARIMA pada deret waktu yang disimpan dalam objek penumpang.

Argumen penumpang adalah deret waktu yang akan dimodelkan.

Argumen order=c(0,1,1) menunjukkan bahwa model ARIMA yang dibangun memiliki komponen differencing pertama (d=1) dan komponen moving average (q=1), tetapi tidak memiliki komponen autoregressive (p=0). Ini menunjukkan bahwa differencing pertama dilakukan untuk membuat data stasioner, dan ada satu nilai moving average dalam model.

Argumen seasonal = list(order=c(1,1,0), period=12) menunjukkan adanya komponen musiman dalam model ARIMA. order=c(1,1,0) menunjukkan bahwa komponen musiman memiliki satu komponen autoregressive musiman (P=1), komponen differencing pertama (D=1), tetapi tidak memiliki komponen moving average musiman (Q=0). Argumen period=12 menunjukkan bahwa musimnya berlangsung setiap 12 periode.

Argumen method = “ML” menunjukkan bahwa metode estimasi yang digunakan adalah metode Maksimum Likelihood (ML).

Hasilnya, model ARIMA yang sesuai disimpan dalam objek fit2, yang dapat Anda gunakan untuk memperoleh ringkasan model dan melakukan peramalan.

## Diagnosis checking
#1. uji kesignifikanan parameter : uji t
coeftest(fit2)
## 
## z test of coefficients:
## 
##       Estimate Std. Error z value  Pr(>|z|)    
## ma1  -0.309644   0.088520  -3.498 0.0004687 ***
## sar1 -0.145874   0.097445  -1.497 0.1343964    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Perintah coeftest(fit2) digunakan untuk melakukan uji statistik terhadap koefisien model yang diperoleh dari model ARIMA yang disimpan dalam objek fit2.

Ini akan menghasilkan statistik uji untuk setiap koefisien model, yang dapat membantu dalam mengevaluasi signifikansi koefisien tersebut dalam mempengaruhi data. Uji statistik yang umum digunakan adalah uji t.

Hasilnya akan berupa tabel yang berisi koefisien model bersama dengan statistik uji dan nilai p-value yang sesuai. Nilai-nilai p-value yang rendah menunjukkan bahwa koefisien tersebut signifikan secara statistik.

#2. pengujian residual apakah sudah white noise?
Box.test(fit2$residuals, type = "Ljung")
## 
##  Box-Ljung test
## 
## data:  fit2$residuals
## X-squared = 0.0017501, df = 1, p-value = 0.9666

Perintah Box.test(fit2$residuals, type = “Ljung”) digunakan untuk melakukan tes Box-Ljung terhadap residu dari model ARIMA yang disimpan dalam objek fit2.

Tes Box-Ljung adalah salah satu tes yang umum digunakan untuk menguji apakah residu dari model deret waktu bersifat acak atau tidak, dengan memeriksa apakah ada korelasi dalam residu pada berbagai lag.

Argumen type = “Ljung” menentukan bahwa tes yang digunakan adalah tes Box-Ljung yang mengikuti metode Ljung-Box.

Hasilnya akan berisi nilai statistik uji dan nilai p-value yang menunjukkan apakah ada korelasi yang signifikan dalam residu pada berbagai lag. Jika nilai p-value signifikan (biasanya di bawah tingkat signifikansi yang dipilih, misalnya 0.05), maka kita dapat menyimpulkan bahwa residu dari model tidak bersifat acak. Sebaliknya, jika nilai p-value tidak signifikan, kita dapat menolak hipotesis nol dan menyimpulkan bahwa tidak ada korelasi yang signifikan dalam residu.

#3.pengujian residual apakah sudah berdistribusi normal?
shapiro.test(fit2$residuals)
## 
##  Shapiro-Wilk normality test
## 
## data:  fit2$residuals
## W = 0.97477, p-value = 0.009215

Perintah shapiro.test(fit2$residuals) digunakan untuk melakukan tes Shapiro-Wilk terhadap residu dari model ARIMA yang disimpan dalam objek fit2.

Tes Shapiro-Wilk adalah salah satu tes yang digunakan untuk menguji apakah sampel berasal dari distribusi normal atau tidak.

Hasilnya akan berisi nilai statistik uji dan nilai p-value. Jika nilai p-value yang dihasilkan cukup besar (biasanya lebih dari tingkat signifikansi yang dipilih, misalnya 0.05), maka kita gagal menolak hipotesis nol, yang berarti ada cukup bukti untuk menyimpulkan bahwa residu dari model mengikuti distribusi normal. Sebaliknya, jika nilai p-value cukup kecil, kita dapat menolak hipotesis nol dan menyimpulkan bahwa residu tidak mengikuti distribusi normal.

#shapiro-francia normality test
sf.test(fit2$residuals)
## 
##  Shapiro-Francia normality test
## 
## data:  fit2$residuals
## W = 0.96971, p-value = 0.003831
#ARIMA(0,1,1)(1,1,1) 
fit3<-arima(penumpang, order=c(0,1,1), seasonal = list(order=c(1,1,1), periode=12), method = "ML")
fit3
## 
## Call:
## arima(x = penumpang, order = c(0, 1, 1), seasonal = list(order = c(1, 1, 1), 
##     periode = 12), method = "ML")
## 
## Coefficients:
##           ma1     sar1    sma1
##       -0.3439  -0.9320  0.8459
## s.e.   0.0880   0.2159  0.3289
## 
## sigma^2 estimated as 130.7:  log likelihood = -506.16,  aic = 1020.33

Sintaks arima(penumpang, order=c(0,1,1), seasonal = list(order=c(1,1,1), period=12), method = “ML”) digunakan untuk membangun model ARIMA pada deret waktu yang disimpan dalam objek penumpang.

Argumen penumpang adalah deret waktu yang akan dimodelkan.

Argumen order=c(0,1,1) menunjukkan bahwa model ARIMA yang dibangun memiliki komponen differencing pertama (d=1) dan komponen moving average (q=1), tetapi tidak memiliki komponen autoregressive (p=0). Ini menunjukkan bahwa differencing pertama dilakukan untuk membuat data stasioner, dan ada satu nilai moving average dalam model.

Argumen seasonal = list(order=c(1,1,1), period=12) menunjukkan adanya komponen musiman dalam model ARIMA. order=c(1,1,1) menunjukkan bahwa komponen musiman memiliki satu komponen autoregressive musiman (P=1), satu komponen differencing pertama musiman (D=1), dan satu komponen moving average musiman (Q=1). Argumen period=12 menunjukkan bahwa musimnya berlangsung setiap 12 periode.

Argumen method = “ML” menunjukkan bahwa metode estimasi yang digunakan adalah metode Maksimum Likelihood (ML).

Hasilnya, model ARIMA yang sesuai disimpan dalam objek fit3, yang dapat Anda gunakan untuk memperoleh ringkasan model dan melakukan peramalan.

## Diagnosis checking
#1. uji kesignifikanan parameter : uji t
coeftest(fit3)
## 
## z test of coefficients:
## 
##      Estimate Std. Error z value Pr(>|z|)    
## ma1  -0.34387    0.08804 -3.9058 9.39e-05 ***
## sar1 -0.93199    0.21588 -4.3172 1.58e-05 ***
## sma1  0.84590    0.32893  2.5716  0.01012 *  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Perintah coeftest(fit3) digunakan untuk melakukan uji statistik terhadap koefisien model yang diperoleh dari model ARIMA yang disimpan dalam objek fit3.

Ini akan menghasilkan statistik uji untuk setiap koefisien model, yang dapat membantu dalam mengevaluasi signifikansi koefisien tersebut dalam mempengaruhi data. Uji statistik yang umum digunakan adalah uji t.

Hasilnya akan berupa tabel yang berisi koefisien model bersama dengan statistik uji dan nilai p-value yang sesuai. Nilai-nilai p-value yang rendah menunjukkan bahwa koefisien tersebut signifikan secara statistik.

#2. pengujian residual apakah sudah white noise?
Box.test(fit3$residuals, type = "Ljung")
## 
##  Box-Ljung test
## 
## data:  fit3$residuals
## X-squared = 0.0022009, df = 1, p-value = 0.9626

Perintah Box.test(fit3$residuals, type = “Ljung”) digunakan untuk melakukan tes Box-Ljung terhadap residu dari model ARIMA yang disimpan dalam objek fit3.

Tes Box-Ljung adalah salah satu tes yang umum digunakan untuk menguji apakah residu dari model deret waktu bersifat acak atau tidak, dengan memeriksa apakah ada korelasi dalam residu pada berbagai lag.

Argumen type = “Ljung” menentukan bahwa tes yang digunakan adalah tes Box-Ljung yang mengikuti metode Ljung-Box.

Hasilnya akan berisi nilai statistik uji dan nilai p-value yang menunjukkan apakah ada korelasi yang signifikan dalam residu pada berbagai lag. Jika nilai p-value signifikan (biasanya di bawah tingkat signifikansi yang dipilih, misalnya 0.05), maka kita dapat menyimpulkan bahwa residu dari model tidak bersifat acak. Sebaliknya, jika nilai p-value tidak signifikan, kita dapat menolak hipotesis nol dan menyimpulkan bahwa tidak ada korelasi yang signifikan dalam residu.

#3.pengujian residual apakah sudah berdistribusi normal?
shapiro.test(fit3$residuals)
## 
##  Shapiro-Wilk normality test
## 
## data:  fit3$residuals
## W = 0.97594, p-value = 0.01223

Perintah shapiro.test(fit3$residuals) digunakan untuk melakukan tes Shapiro-Wilk terhadap residu dari model ARIMA yang disimpan dalam objek fit3.

Tes Shapiro-Wilk adalah salah satu tes yang digunakan untuk menguji apakah sampel berasal dari distribusi normal atau tidak.

Hasilnya akan berisi nilai statistik uji dan nilai p-value. Jika nilai p-value yang dihasilkan cukup besar (biasanya lebih dari tingkat signifikansi yang dipilih, misalnya 0.05), maka kita gagal menolak hipotesis nol, yang berarti ada cukup bukti untuk menyimpulkan bahwa residu dari model mengikuti distribusi normal. Sebaliknya, jika nilai p-value cukup kecil, kita dapat menolak hipotesis nol dan menyimpulkan bahwa residu tidak mengikuti distribusi normal.

#shapiro-francia normality test
sf.test(fit3$residuals)
## 
##  Shapiro-Francia normality test
## 
## data:  fit3$residuals
## W = 0.97089, p-value = 0.004854
#forecasting untuk 12 tahap kedepan berdasarkan model terbaik
forcesting <- forecast(penumpang, model=fit1, h=12)
forcesting
##     Point Forecast    Lo 80    Hi 80    Lo 95    Hi 95
## 145       447.0532 432.1396 461.9668 424.2448 469.8616
## 146       421.8774 403.7469 440.0080 394.1492 449.6057
## 147       453.5262 432.6691 474.3832 421.6281 485.4243
## 148       489.9008 466.6346 513.1670 454.3182 525.4834
## 149       502.1835 476.7352 527.6318 463.2637 541.1033
## 150       564.2246 536.7671 591.6822 522.2320 606.2173
## 151       649.7953 620.4659 679.1247 604.9398 694.6508
## 152       636.7146 605.6258 667.8035 589.1684 684.2609
## 153       538.9209 506.1670 571.6748 488.8282 589.0136
## 154       491.0672 456.7290 525.4055 438.5514 543.5831
## 155       422.8242 386.9716 458.6769 367.9923 477.6562
## 156       464.7525 427.4468 502.0582 407.6984 521.8067

forecast(penumpang, model=fit1, h=12) digunakan untuk melakukan peramalan menggunakan model ARIMA yang disimpan dalam objek fit1 terhadap deret waktu penumpang. Argumen h=12 menunjukkan bahwa peramalan akan dilakukan untuk 12 periode ke depan.

Hasilnya, peramalan untuk 12 periode ke depan disimpan dalam objek forcesting. Anda dapat menggunakan objek ini untuk memeriksa peramalan dan melihat prediksi untuk setiap periode ke depan.

plot(forcesting, main="plot hasil peramalan")

Perintah plot(forcesting, main=“plot hasil peramalan”) digunakan untuk membuat plot hasil peramalan yang disimpan dalam objek forcesting.

Argumen main=“plot hasil peramalan” digunakan untuk memberikan judul pada plot.

Ini akan menghasilkan plot yang menunjukkan deret waktu asli, dengan hasil peramalan yang ditampilkan untuk 12 periode ke depan.

Jika Anda menjalankan perintah ini, Anda akan melihat plot hasil peramalan dengan judul “plot hasil peramalan”.