Analisis deret waktu merupakan salah satu analisis yang dilakukan terhadap sekumpulan data dengan salah satu variabel mendefinisikan urutan data dari suatu waktu hingga waktu lainnya. Analisis ini sangat berguna dalam berbagai bidang yang ada, seperti keuangan, lingkungan, pemasaran, hingga ilmu sosial. Pada beberapa tahun terakhir, maraknya perkembangan teknologi menyebabkan terjadinya peningkatan data di berbagai faktor. Perubahan-perubahan yang terjadi mengharuskan kita untuk dapat memahami data yang ada sebagai awal dari melakukan peramalan dan perencanaan. Sehingga, analisis deret waktu tepat digunakan dalam mengidentifikasi tren, pola, faktor hingga pembuatan keputusan pada data.
Analisis Deret Waktu memiliki beberapa metode yang terkait, yaitu:
Decomposition merupakan teknik yang memisahkan data deret waktu menjadi komponen trend, seasonal, dan residual. Komponen trend menjelaskan peningkatan atau penurunan pada suatu data dengan jangka waktu yang panjang. Sementara komponen seasonal mengidentifikasi fluktuasi selama waktu data dalam musim.
Moving Average (MA) adalah rata-rata dari data dalam periode tertentu untuk mengidentifikasi tren jangka panjang.
Autoregressive Integrated Moving Average (ARIMA) merupakan model statistik yang menggunakan differencing (I) dan moving average (MA). Bertujuan untuk meramalkan data deret waktu yang tidak stasioner atau data tidak konstan.
Stasioneritas merupakan sifat statistik data seperti mean dan varians yang sudah stasioner/konstan sepanjang waktunya. Data dilakukan differencing jika data tidak stasioner.
Non-autocorrelation pada analisis deret waktu mengidentifikasikan residual tidak saling berkorelasi. Terjadinya autokorelasi dalam residual menandakan bahwa model tidak sepenuhnya mendefinisikan data.
Normalitas merupakan asumsi bahwa residual berdistribusi normal pada beberapa metode analisis deret waktu.
Linearitas mendefinisikan hubungan antar variabel dapat dijelaskan dengan asumsi hubungan yang linear.
Melakukan analisis deret waktu menggunakan pengamatan yang diperoleh dari sumber yang ada, mengenai data Banyaknya Penumpang Pesawat pada Tahun 1949 hingga 1960. Berikut datanya:
> datats <- read.csv("D:/cooleah/sem 4/komstat/datalaprak2 komstat.csv", sep = ";")
> datats
Month Passengers
1 1949-01 112
2 1949-02 118
3 1949-03 132
4 1949-04 129
5 1949-05 121
6 1949-06 135
7 1949-07 148
8 1949-08 148
9 1949-09 136
10 1949-10 119
11 1949-11 104
12 1949-12 118
13 1950-01 115
14 1950-02 126
15 1950-03 141
16 1950-04 135
17 1950-05 125
18 1950-06 149
19 1950-07 170
20 1950-08 170
21 1950-09 158
22 1950-10 133
23 1950-11 114
24 1950-12 140
25 1951-01 145
26 1951-02 150
27 1951-03 178
28 1951-04 163
29 1951-05 172
30 1951-06 178
31 1951-07 199
32 1951-08 199
33 1951-09 184
34 1951-10 162
35 1951-11 146
36 1951-12 166
37 1952-01 171
38 1952-02 180
39 1952-03 193
40 1952-04 181
41 1952-05 183
42 1952-06 218
43 1952-07 230
44 1952-08 242
45 1952-09 209
46 1952-10 191
47 1952-11 172
48 1952-12 194
49 1953-01 196
50 1953-02 196
51 1953-03 236
52 1953-04 235
53 1953-05 229
54 1953-06 243
55 1953-07 264
56 1953-08 272
57 1953-09 237
58 1953-10 211
59 1953-11 180
60 1953-12 201
61 1954-01 204
62 1954-02 188
63 1954-03 235
64 1954-04 227
65 1954-05 234
66 1954-06 264
67 1954-07 302
68 1954-08 293
69 1954-09 259
70 1954-10 229
71 1954-11 203
72 1954-12 229
73 1955-01 242
74 1955-02 233
75 1955-03 267
76 1955-04 269
77 1955-05 270
78 1955-06 315
79 1955-07 364
80 1955-08 347
81 1955-09 312
82 1955-10 274
83 1955-11 237
84 1955-12 278
85 1956-01 284
86 1956-02 277
87 1956-03 317
88 1956-04 313
89 1956-05 318
90 1956-06 374
91 1956-07 413
92 1956-08 405
93 1956-09 355
94 1956-10 306
95 1956-11 271
96 1956-12 306
97 1957-01 315
98 1957-02 301
99 1957-03 356
100 1957-04 348
101 1957-05 355
102 1957-06 422
103 1957-07 465
104 1957-08 467
105 1957-09 404
106 1957-10 347
107 1957-11 305
108 1957-12 336
109 1958-01 340
110 1958-02 318
111 1958-03 362
112 1958-04 348
113 1958-05 363
114 1958-06 435
115 1958-07 491
116 1958-08 505
117 1958-09 404
118 1958-10 359
119 1958-11 310
120 1958-12 337
121 1959-01 360
122 1959-02 342
123 1959-03 406
124 1959-04 396
125 1959-05 420
126 1959-06 472
127 1959-07 548
128 1959-08 559
129 1959-09 463
130 1959-10 407
131 1959-11 362
132 1959-12 405
133 1960-01 417
134 1960-02 391
135 1960-03 419
136 1960-04 461
137 1960-05 472
138 1960-06 535
139 1960-07 622
140 1960-08 606
141 1960-09 508
142 1960-10 461
143 1960-11 390
144 1960-12 432
Tujuan dilakukan Analisis Deret Waktu pada data penumpang pesawat, yaitu untuk mengidentifikasi tren, pola, dan faktor yang ada pada data. Sehingga, hasil analisis dapat digunakan dalam membuat keputusan dan strategi masa depan yang akurat terkait industri penerbangan.
> library(forecast)
> library(MASS)
> library(tseries)
> library(lmtest)
> datats <- read.csv("D:/cooleah/sem 4/komstat/datalaprak2 komstat.csv", sep = ";")[,2]
> datats
[1] 112 118 132 129 121 135 148 148 136 119 104 118 115 126 141 135 125 149
[19] 170 170 158 133 114 140 145 150 178 163 172 178 199 199 184 162 146 166
[37] 171 180 193 181 183 218 230 242 209 191 172 194 196 196 236 235 229 243
[55] 264 272 237 211 180 201 204 188 235 227 234 264 302 293 259 229 203 229
[73] 242 233 267 269 270 315 364 347 312 274 237 278 284 277 317 313 318 374
[91] 413 405 355 306 271 306 315 301 356 348 355 422 465 467 404 347 305 336
[109] 340 318 362 348 363 435 491 505 404 359 310 337 360 342 406 396 420 472
[127] 548 559 463 407 362 405 417 391 419 461 472 535 622 606 508 461 390 432
> analts <- ts(datats, start = c(1949,1), frequency = 12)
> analts
Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
1949 112 118 132 129 121 135 148 148 136 119 104 118
1950 115 126 141 135 125 149 170 170 158 133 114 140
1951 145 150 178 163 172 178 199 199 184 162 146 166
1952 171 180 193 181 183 218 230 242 209 191 172 194
1953 196 196 236 235 229 243 264 272 237 211 180 201
1954 204 188 235 227 234 264 302 293 259 229 203 229
1955 242 233 267 269 270 315 364 347 312 274 237 278
1956 284 277 317 313 318 374 413 405 355 306 271 306
1957 315 301 356 348 355 422 465 467 404 347 305 336
1958 340 318 362 348 363 435 491 505 404 359 310 337
1959 360 342 406 396 420 472 548 559 463 407 362 405
1960 417 391 419 461 472 535 622 606 508 461 390 432
>
> ts.plot(analts, main = 'Deret Waktu Data Penumpang Pesawat', ylab = "Passengers", xlab = "Year")
> d_analts <- diff(analts,difference=1)
> d_analts
Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
1949 6 14 -3 -8 14 13 0 -12 -17 -15 14
1950 -3 11 15 -6 -10 24 21 0 -12 -25 -19 26
1951 5 5 28 -15 9 6 21 0 -15 -22 -16 20
1952 5 9 13 -12 2 35 12 12 -33 -18 -19 22
1953 2 0 40 -1 -6 14 21 8 -35 -26 -31 21
1954 3 -16 47 -8 7 30 38 -9 -34 -30 -26 26
1955 13 -9 34 2 1 45 49 -17 -35 -38 -37 41
1956 6 -7 40 -4 5 56 39 -8 -50 -49 -35 35
1957 9 -14 55 -8 7 67 43 2 -63 -57 -42 31
1958 4 -22 44 -14 15 72 56 14 -101 -45 -49 27
1959 23 -18 64 -10 24 52 76 11 -96 -56 -45 43
1960 12 -26 28 42 11 63 87 -16 -98 -47 -71 42
>
> ts.plot(d_analts, main = 'Diff-1 Data Penumpang Pesawat', ylab = "Passengers", xlab = "Year" )
> #ragam
> boxcox(lm(analts~1))
> #rata-rata
> adf_a <- adf.test(analts)
> adf_d <- adf.test(d_analts)
> #acf
> acf(d_analts)
> #pacf
> pacf(d_analts)
> arima011 <- Arima(d_analts, order = c(0,1,1), method = "ML")
> arima012 <- Arima(d_analts, order = c(0,1,2), method = "ML")
> arima110 <- Arima(d_analts, order = c(1,1,0), method = "ML")
> arima111 <- Arima(d_analts, order = c(1,1,1), method = "ML")
> arima112 <- Arima(d_analts, order = c(1,1,2), method = "ML")
> aic.model <- data.frame(Model=c("ARIMA(0,1,1)","ARIMA(0,1,2)","ARIMA(1,1,0)",
+ "ARIMA(1,1,1)","ARIMA(1,1,2)"),
+ AIC=c(arima011$aic, arima012$aic, arima110$aic,
+ arima111$aic, arima112$aic))
> terbaik <- checkresiduals(arima112)
Ljung-Box test
data: Residuals from ARIMA(1,1,2)
Q* = 229.27, df = 21, p-value < 2.2e-16
Model df: 3. Total lags used: 24
> ramalan <- forecast(analts, model = arima112, h=12)
> ts.plot(analts, main = 'Deret Waktu Data Penumpang Pesawat', ylab = "Passengers", xlab = "Year")
Data penumpang pesawat menghasilkan gambar grafik yang menunjukkan tren kenaikan jumlah penumpang dari tahun 1949 hingga 1960. Hal ini berarti jumlah penumpang meningkat selama periode tersebut.
Pola pada grafik ini juga menunjukkan adanya kenaikan sekaligus penurunan secara berulang di periode tertentu. Sehingga, mengindikasikan pola musiman.
> ts.plot(d_analts, main = 'Diff-1 Data Penumpang Pesawat', ylab = "Passengers", xlab = "Year" )
Sumbu Y merupakan perubahan pada jumlah penumpang pesawat dari tahun ke tahun. Nilai positif menunjukkan adanya peningkatan dari bulan sebelumnya, sedangkan nilai negatif sebaliknya.
Grafik tersebut menggambarkan perubahan pada jumlah penumpang dari bulan ke bulan sebelumnya. Grafik terlihat lebih stabil dibandingkan dengan data aslinya, dan pola musiman yang ada juga tidak terlalu terlihat pada grafik ini. Namun, fluktuasi atau perubahan setiap bulannya tampak lebih jelas. Hal ini ditandai oleh adanya peningkatan dan penurunan jumlah penumpang yang signifikan.
> boxcox(lm(analts~1))
Nilai lambda tidak berada pada rentang 1, sehingga data perlu
transformasi karena belum stasioner terhadap ragam.
> adf_a
Augmented Dickey-Fuller Test
data: analts
Dickey-Fuller = -7.3186, Lag order = 5, p-value = 0.01
alternative hypothesis: stationary
>
> adf_d
Augmented Dickey-Fuller Test
data: d_analts
Dickey-Fuller = -7.0177, Lag order = 5, p-value = 0.01
alternative hypothesis: stationary
Hipotesis: \[ H_{0} : \text{Data memiliki unit root (tidak stasioner)} \\ H_{1} : \text{Data tidak memiliki unit root (stasioner)} \]
Uji ADF yang dilakukan memperoleh:
\[ p-value = 0.01 \\ \text{ dengan } \alpha = 0.05 \\ p-value < \alpha \rightarrow \text{ tolak }H_{0} \]
Sehingga, disimpulkan bahwa data “analts” dan “d_analts” sudah stasioner, yang mengartikan data tidak memiliki tren yang berubah seiring waktu.
> acf(d_analts)
Sumbu x merupakan jumlah lag yang dianalisis.
Sumbu y merupakan nilai korelasi.
Pada grafik ACF terdapat nilai lag 1 yang sangat tinggi dan signifikan, menunjukkan korelasi kuat antara nilai deret waktu saat ini dengan nilai satu periode sebelumnya.
> pacf(d_analts)
Sumbu x merupakan jumlah lag yang dianalisis.
Sumbu y merupakan nilai korelasi parsial.
Pada plot PACF diketahui nilai lag 1 yaitu 0.2 yang menunjukkan korelasi cukup kuat antara nilai deret waktu saat ini dengan nilai satu periode sebelumnya.
Sehingga dapat diperoleh:
Komponen AR (p) = 1 (PACF signifikan pada lag 1)
Komponen Dif (d) = 1 (dilakukan dofferencing 1 kali)
Komponen MA (q) = 2 (ACF signifikan pada lag 1 dan 2)
> arima011
Series: d_analts
ARIMA(0,1,1)
Coefficients:
ma1
-1.000
s.e. 0.018
sigma^2 = 1147: log likelihood = -703.68
AIC=1411.37 AICc=1411.45 BIC=1417.28
>
> arima012
Series: d_analts
ARIMA(0,1,2)
Coefficients:
ma1 ma2
-0.5932 -0.4068
s.e. 0.0911 0.0896
sigma^2 = 1014: log likelihood = -694.19
AIC=1394.37 AICc=1394.55 BIC=1403.24
>
> arima110
Series: d_analts
ARIMA(1,1,0)
Coefficients:
ar1
-0.2012
s.e. 0.0844
sigma^2 = 1527: log likelihood = -721.51
AIC=1447.03 AICc=1447.11 BIC=1452.94
>
> arima111
Series: d_analts
ARIMA(1,1,1)
Coefficients:
ar1 ma1
0.3130 -1.0000
s.e. 0.0805 0.0176
sigma^2 = 1049: log likelihood = -696.46
AIC=1398.93 AICc=1399.1 BIC=1407.8
>
> arima112
Series: d_analts
ARIMA(1,1,2)
Coefficients:
ar1 ma1 ma2
-0.4710 -0.1369 -0.8631
s.e. 0.1163 0.0743 0.0738
sigma^2 = 986: log likelihood = -691.96
AIC=1391.91 AICc=1392.2 BIC=1403.73
Model ARIMA (Autoregressive Integrated Moving Average) digunakan untuk melakukan analisis dan peramalan dengan menggunakan hasil nilai AIC.
> aic.model
Model AIC
1 ARIMA(0,1,1) 1411.368
2 ARIMA(0,1,2) 1394.373
3 ARIMA(1,1,0) 1447.028
4 ARIMA(1,1,1) 1398.929
5 ARIMA(1,1,2) 1391.910
Memilih nilai AIC terkecil sebagai model ARIMA terbaik, yaitu ARIMA(1,1,2).
> terbaik
Ljung-Box test
data: Residuals from ARIMA(1,1,2)
Q* = 229.27, df = 21, p-value < 2.2e-16
Diperoleh hasil:
\[ p-value = 2.2×10^{-16} \\ \text{ dengan } \alpha = 0.05 \\ p-value < \alpha \rightarrow \text{ tolak }H_{0} \]
Keputusan tersebut menunjukkan adanya autokorelasi residual antar lag. Sehingga model ARIMA(1,1,2) kurang mendefinisikan struktur data dengan baik.
> ramalan
Point Forecast Lo 80 Hi 80 Lo 95 Hi 95
Jan 1961 332.6770 292.2963 373.0576 270.9201 394.4338
Feb 1961 255.7406 212.2653 299.2159 189.2509 322.2303
Mar 1961 291.9739 247.9292 336.0186 224.6134 359.3344
Apr 1961 274.9098 230.6986 319.1209 207.2947 342.5249
May 1961 282.9462 238.7176 327.1748 215.3043 350.5880
Jun 1961 279.1614 234.9198 323.4030 211.4997 346.8231
Jul 1961 280.9438 236.7037 325.1840 213.2843 348.6034
Aug 1961 280.1044 235.8625 324.3463 212.4423 347.7665
Sep 1961 280.4997 236.2584 324.7411 212.8385 348.1610
Oct 1961 280.3136 236.0719 324.5552 212.6518 347.9753
Nov 1961 280.4012 236.1597 324.6427 212.7397 348.0628
Dec 1961 280.3599 236.1184 324.6015 212.6983 348.0216
> plot(ramalan)
Hasil dari peramalan yaitu menunjukkan kemungkinan selanjutnya dari data penumpang pesawat pada satu tahun berikutnya (1961). Kolom “Point” menunjukkan perikraan penumpang pada bulan dan tahun tertentu. Kolom “Lo 80” dan “Hi 80” menunjukkan batas bawah dan atas penumpang dari interval kepercayaan 80%. Begitu pula dengan “Lo 95” dan “Hi 95” menunjukkan batas bawah dan atas dari interval kepercayaan 95%.
Berdasarkan analisis deret waktu yang telah dilakukan, diperoleh hasil ramalan jumlah penumpang pesawat pada 12 bulan berikutnya yaitu, jumlah penumpang akan menunjukkan pada interval angka 200 hingga 400 penumpang.
kaggle.com, 06 Agustus 2021, Air Passenger Data for Time Series Analysis, 30 Mei 2024, https://www.kaggle.com/datasets/ashfakyeafi/air-passenger-data-for-time-series-analysis?resource=download
Terima Kasih!