library(ggplot2)
library(tsibble)
## 
## Attaching package: 'tsibble'
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, union
library(tseries)
## Registered S3 method overwritten by 'quantmod':
##   method            from
##   as.zoo.data.frame zoo
library(MASS)
library("rio")

Impor Data

Data yang digunakan adalah data penumpang masuk menurut maskapai penerbangan. Data penumpang maskapai China Eastern Airlines tujuan ke China.

data1 = import("https://raw.githubusercontent.com/khenihikmah/praktikummpdw/main/Pertemuan1/Data%20Penumpang%20Pesawat.csv")
data1
##     Month Passengers
## 1       1      13224
## 2       2      10789
## 3       3       6434
## 4       4       6433
## 5       5       4002
## 6       6       3540
## 7       7       7214
## 8       8       5294
## 9       9       4570
## 10     10       7315
## 11     11       7210
## 12     12       7801
## 13     13      10677
## 14     14      13367
## 15     15       8047
## 16     16       7286
## 17     17       5440
## 18     18       6423
## 19     19      10193
## 20     20       8830
## 21     21       8170
## 22     22      10606
## 23     23       9898
## 24     24      12807
## 25     25      18810
## 26     26      14584
## 27     27       8525
## 28     28       7987
## 29     29       7595
## 30     30       8146
## 31     31      14233
## 32     32      11762
## 33     33      10758
## 34     34      13648
## 35     35      11995
## 36     36      12600
## 37     37      16191
## 38     38      13642
## 39     39      14349
## 40     40      14261
## 41     41      12606
## 42     42      12565
## 43     43      15547
## 44     44      13013
## 45     45      12823
## 46     46      15167
## 47     47      17486
## 48     48      18651
## 49     49      21201
## 50     50      22568
## 51     51      19143
## 52     52      18401
## 53     53      15417
## 54     54      14021
## 55     55      17872
## 56     56      14866
## 57     57      16354
## 58     58      15542
## 59     59      15501
## 60     60      17671
## 61     61      28195
## 62     62      23112
## 63     63      15725
## 64     64      14801
## 65     65      13887
## 66     66      12924
## 67     67      17184
## 68     68      14702
## 69     69      13758
## 70     70      16287
## 71     71      14964
## 72     72      22199
## 73     73      27937
## 74     74      28596
## 75     75      19387
## 76     76      15145
## 77     77      14393
## 78     78      13101
## 79     79      16482
## 80     80      14852
## 81     81      16740
## 82     82      21313
## 83     83      20606
## 84     84      24804
## 85     85      35429
## 86     86      36264
## 87     87      23066
## 88     88      23386
## 89     89      17894
## 90     90      17799
## 91     91      22409
## 92     92      16729
## 93     93      17522
## 94     94      21301
## 95     95      24107
## 96     96      32365
## 97     97      45646
## 98     98      37151
## 99     99      29907
## 100   100      30467
## 101   101      24784
## 102   102      22659
## 103   103      33972
## 104   104      26180
## 105   105      23997
## 106   106      30318
## 107   107      26439
## 108   108      32959
## 109   109      43647
## 110   110      45129
## 111   111      33745
## 112   112      29896
## 113   113      22655
## 114   114      21210
## 115   115      32686
## 116   116      27857
## 117   117      23826
## 118   118      31235
## 119   119      30048
## 120   120      37872
## 121   121      50330
## 122   122      47541
## 123   123      31185
## 124   124      31263
## 125   125      32392
## 126   126      29729
## 127   127      36012
## 128   128      33170
## 129   129      30961
## 130   130      38057
## 131   131      37204
## 132   132      39130
data <- ts(data1$Passengers)

Plot Time Series

ts.plot(data, xlab="Time Period ", ylab="Penumpang China Eastern Airlines", 
        main = "Time Series Plot")
points(data)

mean(data)
## [1] 19937.08
plot_stas <- data |> as_tsibble() |> 
  ggplot(aes(x = index, y = value)) + geom_line() + theme_bw() +
  xlab("Obs") + ylab("Nilai")
plot_stas

mean(data)
## [1] 19937.08

Plot deret waktu di atas menunjukkan bahwa data tidak stasioner dalam rataan, ditandai dengan data yang tidak menyebar di sekitar nilai tengahnya dan tidak stasioner dalam ragam, ditandai dengan lebar pita yang cenderung berbeda. Sehingga dapat dikatakan bahwa data AirPassengers tidak stasioner dan mengandung musiman.

Plot ACF

acf(data)

Berdasarkan plot ACF, terlihat bahwa plot ACF pada data tersebut cenderung tails off (meluruh menjadi nol secara asimptotik) yang mengindikasikan bahwa data tidak stasioner.

Uji ADF

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

\(H_0\) : Data tidak stasioner dalam rataan

\(H_1\) : Data stasioner dalam rataan

Berdasarkan uji ADF tersebut, didapat p-value sebesar 0.01 yang lebih kecil dari taraf nyata 5% sehingga tolak \(H_0\) dan menandakan bahwa data stasioner dalam rataan. Hal ini tidak sesuai dengan hasil eksplorasi menggunakan plot time series dan plot ACF. Jika menggunakan hasil eksplorasi menandakan data tidak stasioner dalam rataan karena data trend.

Kemudian dilanjutkan uji KPSS untuk uji statioer rataanya.

kpss.test(data,null="Level")
## Warning in kpss.test(data, null = "Level"): p-value smaller than printed
## p-value
## 
##  KPSS Test for Level Stationarity
## 
## data:  data
## KPSS Level = 2.3729, Truncation lag parameter = 4, p-value = 0.01

\(H_0\) : Data tidak stasioner dalam rataan

\(H_1\) : Data stasioner dalam rataan

Berdasarkan uji ADF tersebut, didapat p-value sebesar 0.01 yang lebih kecil dari taraf nyata 5% sehingga tolak \(H_0\) dan menandakan bahwa data stasioner dalam rataan.

Maka dari itu, harus dilakukan diferensiasi. Diferensiasi yang pertama adalah diferensiasi guna menghilangkan efek musiman pada data yang menyebabkan data menjadi tidak stasioner.

AP.dslog=diff(log(data),differences=1,lag=24)
adf.test(AP.dslog)
## 
##  Augmented Dickey-Fuller Test
## 
## data:  AP.dslog
## Dickey-Fuller = -2.9551, Lag order = 4, p-value = 0.1804
## alternative hypothesis: stationary

\(H_0\) : Data tidak stasioner dalam rataan

\(H_1\) : Data stasioner dalam rataan

Berdasarkan uji ADF tersebut, didapat p-value sebesar 0.1804 yang lebih besar dari taraf nyata 5% sehingga terima \(H_0\) dan menandakan bahwa data tidak stasioner dalam rataan. Hal ini sesuai dengan hasil eksplorasi menggunakan plot time series dan plot ACF.

Plot Box-Cox

index <- seq(1:132)
bc = boxcox(data~index, lambda = seq(-4,6, by=0.01))

#Nilai Rounded Lambda
lambda <- bc$x[which.max(bc$y)]
lambda
## [1] 0.27
#SK
bc$x[bc$y > max(bc$y) - 1/2 * qchisq(.95,1)]
##  [1] 0.10 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.20 0.21 0.22 0.23 0.24
## [16] 0.25 0.26 0.27 0.28 0.29 0.30 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39
## [31] 0.40 0.41 0.42 0.43 0.44 0.45

Gambar di atas menunjukkan nilai rounded value (\(\lambda\)) optimum sebesar 0.27 dan pada selang kepercayaan 95% nilai memiliki batas bawah 0.10 dan batas atas 0.45. Selang tersebut tidak memuat nilai satu sehingga dapat dikatakan bahwa data bangkitan tidak stasioner dalam ragam.

Partisi Data

Bagian 1

dt_stas1 <- data[1:65] |> ts()
mean(dt_stas1)
## [1] 12566.02
var(dt_stas1)
## [1] 25077822

Plot Time Series

dt_stas1 |> as_tsibble() |> 
  ggplot(aes(x = index, y = value)) +
  geom_line() + theme_bw() +
  xlab("Obs") + ylab("Nilai")

Plot deret waktu di atas menunjukkan bahwa data tidak stasioner dalam rataan, ditandai dengan data yang tidak menyebar di sekitar nilai tengahnya dan tidak stasioner dalam ragam, ditandai dengan lebar pita yang cenderung berbeda. # Plot ACF

acf(data)

Berdasarkan plot ACF, terlihat bahwa plot ACF pada data tersebut cenderung tails off slowly dan membentuk gelombang sinus.

Uji ADF

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

\(H_0\) : Data tidak stasioner dalam rataan

\(H_1\) : Data stasioner dalam rataan

Berdasarkan uji ADF tersebut, didapat p-value sebesar 0.01 yang lebih kecil dari taraf nyata 5% sehingga tolak \(H_0\) dan menandakan bahwa data stasioner dalam rataan. Hal ini tidak sesuai dengan hasil eksplorasi menggunakan plot time series dan plot ACF. Jika menggunakan hasil eksplorasi menandakan data tidak stasioner dalam rataan karena data trend.

Kemudian dilanjutkan uji KPSS untuk uji statioer rataanya.

kpss.test(data,null="Level")
## Warning in kpss.test(data, null = "Level"): p-value smaller than printed
## p-value
## 
##  KPSS Test for Level Stationarity
## 
## data:  data
## KPSS Level = 2.3729, Truncation lag parameter = 4, p-value = 0.01

\(H_0\) : Data tidak stasioner dalam rataan

\(H_1\) : Data stasioner dalam rataan

Berdasarkan uji ADF tersebut, didapat p-value sebesar 0.01 yang lebih kecil dari taraf nyata 5% sehingga tolak \(H_0\) dan menandakan bahwa data stasioner dalam rataan.

Maka dari itu, harus dilakukan diferensiasi. Diferensiasi yang pertama adalah diferensiasi guna menghilangkan efek musiman pada data yang menyebabkan data menjadi tidak stasioner.

AP.dslog=diff(log(data),differences=1,lag=24)
adf.test(AP.dslog)
## 
##  Augmented Dickey-Fuller Test
## 
## data:  AP.dslog
## Dickey-Fuller = -2.9551, Lag order = 4, p-value = 0.1804
## alternative hypothesis: stationary

\(H_0\) : Data tidak stasioner dalam rataan

\(H_1\) : Data stasioner dalam rataan

Berdasarkan uji ADF tersebut, didapat p-value sebesar 0.1804 yang lebih besar dari taraf nyata 5% sehingga terima \(H_0\) dan menandakan bahwa data tidak stasioner dalam rataan. Hal ini sesuai dengan hasil eksplorasi menggunakan plot time series dan plot ACF.

Plot Boxcox

index <- seq(1:65)
bc = boxcox(dt_stas1~index, lambda = seq(-4,7,by=1))

#Nilai Rounded Lambda
lambda <- bc$x[which.max(bc$y)]
lambda
## [1] 0.4444444
#SK
bc$x[bc$y > max(bc$y) - 1/2 * qchisq(.95,1)]
## [1] 0.1111111 0.2222222 0.3333333 0.4444444 0.5555556 0.6666667 0.7777778
## [8] 0.8888889

Gambar di atas menunjukkan nilai rounded value (\(\lambda\)) optimum sebesar 0.4444444 dan pada selang kepercayaan 95% nilai memiliki batas atas 0.8888889 dan batas bawah 0.1111111. Selang tersebut tidak memuat nilai satu sehingga tidak dapat dikatakan bahwa data bangkitan stasioner dalam ragam.

Bagian 2

dt_stas2 <- data[1:114] |> ts()
mean(dt_stas2)
## [1] 17642.08
var(dt_stas2)
## [1] 79774344

Plot Time Series

dt_stas2 |> as_tsibble() |> 
  ggplot(aes(x = index, y = value)) +
  geom_line() + theme_bw() +
  xlab("Obs") + ylab("Nilai")

Plot deret waktu di atas menunjukkan bahwa data tidak stasioner dalam rataan, ditandai dengan data yang tidak menyebar di sekitar nilai tengahnya dan tidak stasioner dalam ragam, ditandai dengan lebar pita yang cenderung berbeda.

Plot ACF

acf(data)

Berdasarkan plot ACF, terlihat bahwa plot ACF pada data tersebut cenderung tails off slowly dan membentuk gelombang sinus.

Uji ADF

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

\(H_0\) : Data tidak stasioner dalam rataan

\(H_1\) : Data stasioner dalam rataan

Berdasarkan uji ADF tersebut, didapat p-value sebesar 0.01 yang lebih kecil dari taraf nyata 5% sehingga tolak \(H_0\) dan menandakan bahwa data stasioner dalam rataan. Hal ini tidak sesuai dengan hasil eksplorasi menggunakan plot time series dan plot ACF. Jika menggunakan hasil eksplorasi menandakan data tidak stasioner dalam rataan karena data trend.

Kemudian dilanjutkan uji KPSS untuk uji statioer rataanya.

kpss.test(data,null="Level")
## Warning in kpss.test(data, null = "Level"): p-value smaller than printed
## p-value
## 
##  KPSS Test for Level Stationarity
## 
## data:  data
## KPSS Level = 2.3729, Truncation lag parameter = 4, p-value = 0.01

\(H_0\) : Data tidak stasioner dalam rataan

\(H_1\) : Data stasioner dalam rataan

Berdasarkan uji ADF tersebut, didapat p-value sebesar 0.01 yang lebih kecil dari taraf nyata 5% sehingga tolak \(H_0\) dan menandakan bahwa data stasioner dalam rataan.

Maka dari itu, harus dilakukan diferensiasi. Diferensiasi yang pertama adalah diferensiasi guna menghilangkan efek musiman pada data yang menyebabkan data menjadi tidak stasioner.

AP.dslog=diff(log(data),differences=1,lag=24)
adf.test(AP.dslog)
## 
##  Augmented Dickey-Fuller Test
## 
## data:  AP.dslog
## Dickey-Fuller = -2.9551, Lag order = 4, p-value = 0.1804
## alternative hypothesis: stationary

\(H_0\) : Data tidak stasioner dalam rataan

\(H_1\) : Data stasioner dalam rataan

Berdasarkan uji ADF tersebut, didapat p-value sebesar 0.1804 yang lebih besar dari taraf nyata 5% sehingga terima \(H_0\) dan menandakan bahwa data tidak stasioner dalam rataan. Hal ini sesuai dengan hasil eksplorasi menggunakan plot time series dan plot ACF.

Plot Boxcox

index <- seq(1:114)
bc = boxcox(dt_stas2~index, lambda = seq(-4,5,by=1))

#Nilai Rounded Lambda
lambda <- bc$x[which.max(bc$y)]
lambda
## [1] 0.1818182
#SK
bc$x[bc$y > max(bc$y) - 1/2 * qchisq(.95,1)]
## [1] 0.00000000 0.09090909 0.18181818 0.27272727 0.36363636

Gambar di atas menunjukkan nilai rounded value (\(\lambda\)) optimum sebesar 0.1818182 dan pada selang kepercayaan 95% nilai memiliki batas bawah 0.00000000 dan batas atas 0.36363636. Selang tersebut tidak memuat nilai satu sehingga tidak dapat dikatakan bahwa data bangkitan stasioner dalam ragam.