library(ggplot2)
library(tsibble)
## Warning: package 'tsibble' was built under R version 4.3.3
## Registered S3 method overwritten by 'tsibble':
## method from
## as_tibble.grouped_df dplyr
##
## Attaching package: 'tsibble'
## The following objects are masked from 'package:base':
##
## intersect, setdiff, union
library(tseries)
## Warning: package 'tseries' was built under R version 4.3.3
## Registered S3 method overwritten by 'quantmod':
## method from
## as.zoo.data.frame zoo
library(MASS)
set.seed(8990)
Pada dasarnya, pembangkitan data ARIMA akan menghasilkan data yang
stasioner dalam rataan dan ragam karena akan mengikuti fungsi
default-nya yang mengikuti pembangkitan bilangan acak normal
dengan mean=0
dan ragam=1
.
stas <- arima.sim(n=200, list(order=c(1,0,1),ar= .2, ma=.2),mean=12)
plot_stas <- stas |> as_tsibble() |>
ggplot(aes(x = index, y = value)) + geom_line() + theme_bw() +
xlab("Obs") + ylab("Nilai")
plot_stas
mean(stas)
## [1] 18.06022
Plot deret waktu di atas menunjukkan bahwa data stasioner dalam rataan, ditandai dengan data yang menyebar di sekitar nilai tengahnya (18) dan stasioner dalam ragam, ditandai dengan lebar pita yang cenderung sama.
acf(stas)
Berdasarkan plot ACF, terlihat bahwa plot ACF pada data tersebut cenderung tails off dan membentuk gelombang sinus.
lattice::densityplot(as.vector(stas))
tseries::adf.test(stas)
## Warning in tseries::adf.test(stas): p-value smaller than printed p-value
##
## Augmented Dickey-Fuller Test
##
## data: stas
## Dickey-Fuller = -5.5322, 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 sesuai dengan hasil eksplorasi menggunakan plot time series dan plot ACF.
index <- seq(1:200)
bc = boxcox(stas~index, lambda = seq(0,4,by=0.01))
#Nilai Rounded Lambda
lambda <- bc$x[which.max(bc$y)]
lambda
## [1] 1.97
#SK
bc$x[bc$y > max(bc$y) - 1/2 * qchisq(.95,1)]
## [1] 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.30 0.31 0.32 0.33 0.34 0.35 0.36
## [16] 0.37 0.38 0.39 0.40 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.50 0.51
## [31] 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.60 0.61 0.62 0.63 0.64 0.65 0.66
## [46] 0.67 0.68 0.69 0.70 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.80 0.81
## [61] 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.90 0.91 0.92 0.93 0.94 0.95 0.96
## [76] 0.97 0.98 0.99 1.00 1.01 1.02 1.03 1.04 1.05 1.06 1.07 1.08 1.09 1.10 1.11
## [91] 1.12 1.13 1.14 1.15 1.16 1.17 1.18 1.19 1.20 1.21 1.22 1.23 1.24 1.25 1.26
## [106] 1.27 1.28 1.29 1.30 1.31 1.32 1.33 1.34 1.35 1.36 1.37 1.38 1.39 1.40 1.41
## [121] 1.42 1.43 1.44 1.45 1.46 1.47 1.48 1.49 1.50 1.51 1.52 1.53 1.54 1.55 1.56
## [136] 1.57 1.58 1.59 1.60 1.61 1.62 1.63 1.64 1.65 1.66 1.67 1.68 1.69 1.70 1.71
## [151] 1.72 1.73 1.74 1.75 1.76 1.77 1.78 1.79 1.80 1.81 1.82 1.83 1.84 1.85 1.86
## [166] 1.87 1.88 1.89 1.90 1.91 1.92 1.93 1.94 1.95 1.96 1.97 1.98 1.99 2.00 2.01
## [181] 2.02 2.03 2.04 2.05 2.06 2.07 2.08 2.09 2.10 2.11 2.12 2.13 2.14 2.15 2.16
## [196] 2.17 2.18 2.19 2.20 2.21 2.22 2.23 2.24 2.25 2.26 2.27 2.28 2.29 2.30 2.31
## [211] 2.32 2.33 2.34 2.35 2.36 2.37 2.38 2.39 2.40 2.41 2.42 2.43 2.44 2.45 2.46
## [226] 2.47 2.48 2.49 2.50 2.51 2.52 2.53 2.54 2.55 2.56 2.57 2.58 2.59 2.60 2.61
## [241] 2.62 2.63 2.64 2.65 2.66 2.67 2.68 2.69 2.70 2.71 2.72 2.73 2.74 2.75 2.76
## [256] 2.77 2.78 2.79 2.80 2.81 2.82 2.83 2.84 2.85 2.86 2.87 2.88 2.89 2.90 2.91
## [271] 2.92 2.93 2.94 2.95 2.96 2.97 2.98 2.99 3.00 3.01 3.02 3.03 3.04 3.05 3.06
## [286] 3.07 3.08 3.09 3.10 3.11 3.12 3.13 3.14 3.15 3.16 3.17 3.18 3.19 3.20 3.21
## [301] 3.22 3.23 3.24 3.25 3.26 3.27 3.28 3.29 3.30 3.31 3.32 3.33 3.34 3.35 3.36
## [316] 3.37 3.38 3.39 3.40 3.41 3.42 3.43 3.44 3.45 3.46 3.47 3.48 3.49 3.50 3.51
## [331] 3.52 3.53 3.54 3.55 3.56 3.57 3.58 3.59 3.60 3.61 3.62 3.63 3.64 3.65 3.66
## [346] 3.67 3.68 3.69 3.70 3.71 3.72 3.73
Gambar di atas menunjukkan nilai rounded value (\(\lambda\)) optimum sebesar 1,97 dan pada selang kepercayaan 95% nilai memiliki batas bawah 0,22 dan batas atas 3,73. Selang tersebut memuat nilai satu sehingga dapat dikatakan bahwa data bangkitan stasioner dalam ragam.
dt_stas1 <- stas[1:67] |> ts()
mean(dt_stas1)
## [1] 18.08483
var(dt_stas1)
## [1] 1.141982
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 stasioner dalam rataan, ditandai dengan data yang menyebar di sekitar nilai tengahnya (18) dan stasioner dalam ragam, ditandai dengan lebar pita yang cenderung sama.
acf(dt_stas1)
Berdasarkan plot ACF, terlihat bahwa plot ACF pada data tersebut cenderung tails off dan membentuk gelombang sinus.
tseries::adf.test(dt_stas1)
##
## Augmented Dickey-Fuller Test
##
## data: dt_stas1
## Dickey-Fuller = -3.5663, Lag order = 4, p-value = 0.043
## 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.043 yang lebih kecil dari taraf nyata 5% sehingga tolak \(H_0\) dan menandakan bahwa data stasioner dalam rataan. Hal ini sesuai dengan hasil eksplorasi menggunakan plot time series dan plot ACF.
index <- seq(1:67)
bc = boxcox(dt_stas1~index, lambda = seq(-2,6,by=1))
#Nilai Rounded Lambda
lambda <- bc$x[which.max(bc$y)]
lambda
## [1] 2.20202
#SK
bc$x[bc$y > max(bc$y) - 1/2 * qchisq(.95,1)]
## [1] -1.03030303 -0.94949495 -0.86868687 -0.78787879 -0.70707071 -0.62626263
## [7] -0.54545455 -0.46464646 -0.38383838 -0.30303030 -0.22222222 -0.14141414
## [13] -0.06060606 0.02020202 0.10101010 0.18181818 0.26262626 0.34343434
## [19] 0.42424242 0.50505051 0.58585859 0.66666667 0.74747475 0.82828283
## [25] 0.90909091 0.98989899 1.07070707 1.15151515 1.23232323 1.31313131
## [31] 1.39393939 1.47474747 1.55555556 1.63636364 1.71717172 1.79797980
## [37] 1.87878788 1.95959596 2.04040404 2.12121212 2.20202020 2.28282828
## [43] 2.36363636 2.44444444 2.52525253 2.60606061 2.68686869 2.76767677
## [49] 2.84848485 2.92929293 3.01010101 3.09090909 3.17171717 3.25252525
## [55] 3.33333333 3.41414141 3.49494949 3.57575758 3.65656566 3.73737374
## [61] 3.81818182 3.89898990 3.97979798 4.06060606 4.14141414 4.22222222
## [67] 4.30303030 4.38383838 4.46464646 4.54545455 4.62626263 4.70707071
## [73] 4.78787879 4.86868687 4.94949495 5.03030303 5.11111111 5.19191919
## [79] 5.27272727 5.35353535 5.43434343 5.51515152
Gambar di atas menunjukkan nilai rounded value (\(\lambda\)) optimum sebesar 2,2 dan pada selang kepercayaan 95% nilai memiliki batas bawah -1,03 dan batas atas 5,52. Selang tersebut memuat nilai satu sehingga dapat dikatakan bahwa data bangkitan stasioner dalam ragam.
dt_stas2 <- stas[1:134] |> ts()
mean(dt_stas2)
## [1] 17.93724
var(dt_stas2)
## [1] 1.128205
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 stasioner dalam rataan, ditandai dengan data yang menyebar di sekitar nilai tengahnya (18) dan stasioner dalam ragam, ditandai dengan lebar pita yang cenderung sama.
acf(dt_stas2)
Berdasarkan plot ACF, terlihat bahwa plot ACF pada data tersebut cenderung tails off dan membentuk gelombang sinus.
adf.test(dt_stas2)
## Warning in adf.test(dt_stas2): p-value smaller than printed p-value
##
## Augmented Dickey-Fuller Test
##
## data: dt_stas2
## Dickey-Fuller = -4.4004, 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 sesuai dengan hasil eksplorasi menggunakan plot time series dan plot ACF.
index <- seq(1:134)
bc = boxcox(dt_stas2~index, lambda = seq(0,6,by=1))
#Nilai Rounded Lambda
lambda <- bc$x[which.max(bc$y)]
lambda
## [1] 2.848485
#SK
bc$x[bc$y > max(bc$y) - 1/2 * qchisq(.95,1)]
## [1] 0.4848485 0.5454545 0.6060606 0.6666667 0.7272727 0.7878788 0.8484848
## [8] 0.9090909 0.9696970 1.0303030 1.0909091 1.1515152 1.2121212 1.2727273
## [15] 1.3333333 1.3939394 1.4545455 1.5151515 1.5757576 1.6363636 1.6969697
## [22] 1.7575758 1.8181818 1.8787879 1.9393939 2.0000000 2.0606061 2.1212121
## [29] 2.1818182 2.2424242 2.3030303 2.3636364 2.4242424 2.4848485 2.5454545
## [36] 2.6060606 2.6666667 2.7272727 2.7878788 2.8484848 2.9090909 2.9696970
## [43] 3.0303030 3.0909091 3.1515152 3.2121212 3.2727273 3.3333333 3.3939394
## [50] 3.4545455 3.5151515 3.5757576 3.6363636 3.6969697 3.7575758 3.8181818
## [57] 3.8787879 3.9393939 4.0000000 4.0606061 4.1212121 4.1818182 4.2424242
## [64] 4.3030303 4.3636364 4.4242424 4.4848485 4.5454545 4.6060606 4.6666667
## [71] 4.7272727 4.7878788 4.8484848 4.9090909 4.9696970 5.0303030 5.0909091
## [78] 5.1515152 5.2121212 5.2727273
Gambar di atas menunjukkan nilai rounded value (\(\lambda\)) optimum sebesar 2,85 dan pada selang kepercayaan 95% nilai memiliki batas bawah 0,48 dan batas atas 5,27. Selang tersebut memuat nilai satu sehingga dapat dikatakan bahwa data bangkitan stasioner dalam ragam.
Bagaimana cara mensimulasikan data dengan tren tertentu?
Kunci dari simulasi tersebut berada di \(Y_{t}-Y_{t-1}\), atau first difference, atau selisih antara observasi di waktu ke \(t\) dan observasi sebelumnya. Jika suatu deret waktu memiliki tren naik, misal, maka selisih tersebut akan positif. Sebaliknya, jika suatu deret memiliki tren turun, maka selisih akan negatif. Jika suatu deret stasioner, selisih akan memiliki rata-rata nol.
Ini dapat diilustrasikan dengan fungsi cumsum
.
cumsum
adalah jumlah kumulatif. Untuk mengerti logika dari
pengunaan jumlah kumulatif, bayangkan ada deret waktu dengan nilai awal
\(c\):
\[ Y_1 = c \]
Lalu definsikan \(d_i\), di mana \(i = 2, 3, \ldots\) sebagai selisih observasi ke-i dengan observasi sebelumnya:
\[ d_i = Y_i-Y_{i-1} \]
Perhatikan bahwa:
\[ \begin{aligned} Y_3-Y_{1} & = d_3+d_2\\ &= Y_3-Y_2+Y_2-Y_1 \end{aligned} \]
Cukup jelas bahwa sifat tersebut berarti:
\[ \begin{aligned} Y_t-Y_1 &= \sum_{i=2}^t d_i\\ Y_t &= Y_1 + \sum_{i=2}^t d_i \end{aligned} \]
Atau, amatan di waktu ke \(t\) dapat ditemukan dari menambahkan amatan ke-1 dengan jumlah kumulatif perbedaan \(d_i\) sampai di waktu ke-t. Kode di bawah membuat data dengan proses tersebut. Ada tiga skenario, yaitu:
Selisih antara observasi dan observasi sebelumnya nol
Selisih antara observasi dan observasi sebelumnya positif
Selisih antara observasi dan observasi sebelumnya negatif
Dengan nilai awal 1 dan komponen \(e_t\) menyebar normal.
notrend <- 1 + cumsum(rep(0, 100)) + rnorm(100) |> ts()
postrend <- 1 + cumsum(rep(0.2, 100)) + rnorm(100) |> ts()
negtrend <- 1 + cumsum(rep(-0.2, 100)) + rnorm(100) |> ts()
Hasil yang muncul dapat di-plot (note, untuk plotting ini digunakan
ggplot2
; ts.plot()
dapat digunakan - ini
tergantung preferensi saja):
plot_notrend <- notrend |> as_tsibble() |>
ggplot(aes(x = index, y = value)) + geom_line() + theme_bw() +
xlab("Obs") + ylab("Nilai") + ggtitle("First Difference = 0")
plot_postrend <- postrend |> as_tsibble() |>
ggplot(aes(x = index, y = value)) + geom_line() + theme_bw() +
xlab("Obs") + ylab("Nilai") + ggtitle("First Difference = 0.2")
plot_negtrend <- negtrend |> as_tsibble() |>
ggplot(aes(x = index, y = value)) + geom_line() + theme_bw() +
xlab("Obs") + ylab("Nilai") + ggtitle("First Difference = -0.2")
ggpubr::ggarrange(plot_notrend, plot_postrend, plot_negtrend, nrow = 3)
Dapat disimulasikan proses MA atau AR yang tidak stasioner dengan
suatu tren dengan mensimulasikan beda terlebih dahulu (menggunakan
arima.sim
), ditambah suatu konstanta, lalu mencari jumlah
kumulatif. Terdapat juga parameter mean
di fungsi
arima.sim
, tetapi parameter ini adalah parameter untuk
\(E[e_t]\), bukan \(E[Y_t-Y_{t-1}]\). Proses dari nilai harapan
white noise tertentu menjadi nilai harapan \(Y\) di suatu proses MA atau AR yang tak
stasioner sangat tergantung pada model, yang diilustrasikan di
sini.
startSpot <- 3
dt <- {arima.sim(n=100, list(order=c(1,0,1),ar=c(.2), ma=.2), sd=2) + 1.5} |> ts()
yt <- startSpot + cumsum(dt) |> ts()
dt_alt <- arima.sim(n=100, list(order=c(1,0,1),ar=c(.2), ma=.2), mean = 1.5, sd=2) |> ts()
yt_alt <- startSpot + cumsum(dt_alt) |> ts()
plot_dt <- dt |> as_tsibble() |>
ggplot(aes(x = index, y = value)) + geom_line() + theme_bw() +
xlab("Obs") + ylab("Nilai") + ggtitle("Penambahan konstanta 1.5 di selisih")
plot_yt <- yt |> as_tsibble() |>
ggplot(aes(x = index, y = value)) + geom_line() + theme_bw() +
xlab("Obs") + ylab("Nilai")
plot_dt_alt <- dt_alt |> as_tsibble() |>
ggplot(aes(x = index, y = value)) + geom_line() + theme_bw() +
xlab("Obs") + ylab("Nilai") + ggtitle("Mean 1.5 di parameter arima.sim")
plot_yt_alt <- yt_alt |> as_tsibble() |>
ggplot(aes(x = index, y = value)) + geom_line() + theme_bw() +
xlab("Obs") + ylab("Nilai")
ggpubr::ggarrange(plot_dt, plot_yt, plot_dt_alt, plot_yt_alt)
Terlihat di contoh di atas bahwa menambahkan konstanta 1.5 pada hasil
arima.sim
beda dengan memasukkan parameter
mean = 1.5
.
set.seed(8990)
dt_alt <- arima.sim(n=200, list(order=c(1,0,1),ar=c(.2), ma=.2), mean=0.2, sd=0.5) |> ts()
postrend <- startSpot + cumsum(dt_alt) |> ts()
postrend |> as_tsibble() |>
ggplot(aes(x = index, y = value)) +
geom_line() + theme_bw() +
xlab("Obs") + ylab("Nilai")
mean(postrend)
## [1] 33.75305
var(postrend)
## [1] 341.6068
Berdasarkan plot time series tersebut, terlihat bahwa data tidak stasioner dalam rataan, ditandai dengan adanya tren positif, tetapi stasioner dalam ragam, ditandai dengan adanya lebar pita pada plot yang cenderung sama.
ts.plot(diff(postrend))
acf(postrend)
adf.test(postrend)
##
## Augmented Dickey-Fuller Test
##
## data: postrend
## Dickey-Fuller = -1.9413, Lag order = 5, p-value = 0.6007
## alternative hypothesis: stationary
index <- seq(1:200)
bc = boxcox(postrend~index, lambda = seq(0.8,1.1,by=0.001))
#Nilai Rounded Lambda
lambda <- bc$x[which.max(bc$y)]
lambda
## [1] 0.961
#SK
bc$x[bc$y > max(bc$y) - 1/2 * qchisq(.95,1)]
## [1] 0.900 0.901 0.902 0.903 0.904 0.905 0.906 0.907 0.908 0.909 0.910 0.911
## [13] 0.912 0.913 0.914 0.915 0.916 0.917 0.918 0.919 0.920 0.921 0.922 0.923
## [25] 0.924 0.925 0.926 0.927 0.928 0.929 0.930 0.931 0.932 0.933 0.934 0.935
## [37] 0.936 0.937 0.938 0.939 0.940 0.941 0.942 0.943 0.944 0.945 0.946 0.947
## [49] 0.948 0.949 0.950 0.951 0.952 0.953 0.954 0.955 0.956 0.957 0.958 0.959
## [61] 0.960 0.961 0.962 0.963 0.964 0.965 0.966 0.967 0.968 0.969 0.970 0.971
## [73] 0.972 0.973 0.974 0.975 0.976 0.977 0.978 0.979 0.980 0.981 0.982 0.983
## [85] 0.984 0.985 0.986 0.987 0.988 0.989 0.990 0.991 0.992 0.993 0.994 0.995
## [97] 0.996 0.997 0.998 0.999 1.000 1.001 1.002 1.003 1.004 1.005 1.006 1.007
## [109] 1.008 1.009 1.010 1.011 1.012 1.013 1.014 1.015 1.016 1.017 1.018 1.019
## [121] 1.020 1.021 1.022
postrend1 <- postrend[1:100] |> ts()
mean(postrend1)
## [1] 18.84534
var(postrend1)
## [1] 116.7756
postrend1 |> as_tsibble() |>
ggplot(aes(x = index, y = value)) +
geom_line()+theme_bw() +
xlab("Obs") + ylab("Nilai")
acf(postrend1)
adf.test(postrend1)
##
## Augmented Dickey-Fuller Test
##
## data: postrend1
## Dickey-Fuller = -2.2384, Lag order = 4, p-value = 0.4779
## alternative hypothesis: stationary
index <- seq(1:100)
bc = boxcox(postrend1~index, lambda = seq(0.5,1,by=0.001))
#Nilai Rounded Lambda
lambda <- bc$x[which.max(bc$y)]
lambda
## [1] 0.747
#SK
bc$x[bc$y > max(bc$y) - 1/2 * qchisq(.95,1)]
## [1] 0.575 0.576 0.577 0.578 0.579 0.580 0.581 0.582 0.583 0.584 0.585 0.586
## [13] 0.587 0.588 0.589 0.590 0.591 0.592 0.593 0.594 0.595 0.596 0.597 0.598
## [25] 0.599 0.600 0.601 0.602 0.603 0.604 0.605 0.606 0.607 0.608 0.609 0.610
## [37] 0.611 0.612 0.613 0.614 0.615 0.616 0.617 0.618 0.619 0.620 0.621 0.622
## [49] 0.623 0.624 0.625 0.626 0.627 0.628 0.629 0.630 0.631 0.632 0.633 0.634
## [61] 0.635 0.636 0.637 0.638 0.639 0.640 0.641 0.642 0.643 0.644 0.645 0.646
## [73] 0.647 0.648 0.649 0.650 0.651 0.652 0.653 0.654 0.655 0.656 0.657 0.658
## [85] 0.659 0.660 0.661 0.662 0.663 0.664 0.665 0.666 0.667 0.668 0.669 0.670
## [97] 0.671 0.672 0.673 0.674 0.675 0.676 0.677 0.678 0.679 0.680 0.681 0.682
## [109] 0.683 0.684 0.685 0.686 0.687 0.688 0.689 0.690 0.691 0.692 0.693 0.694
## [121] 0.695 0.696 0.697 0.698 0.699 0.700 0.701 0.702 0.703 0.704 0.705 0.706
## [133] 0.707 0.708 0.709 0.710 0.711 0.712 0.713 0.714 0.715 0.716 0.717 0.718
## [145] 0.719 0.720 0.721 0.722 0.723 0.724 0.725 0.726 0.727 0.728 0.729 0.730
## [157] 0.731 0.732 0.733 0.734 0.735 0.736 0.737 0.738 0.739 0.740 0.741 0.742
## [169] 0.743 0.744 0.745 0.746 0.747 0.748 0.749 0.750 0.751 0.752 0.753 0.754
## [181] 0.755 0.756 0.757 0.758 0.759 0.760 0.761 0.762 0.763 0.764 0.765 0.766
## [193] 0.767 0.768 0.769 0.770 0.771 0.772 0.773 0.774 0.775 0.776 0.777 0.778
## [205] 0.779 0.780 0.781 0.782 0.783 0.784 0.785 0.786 0.787 0.788 0.789 0.790
## [217] 0.791 0.792 0.793 0.794 0.795 0.796 0.797 0.798 0.799 0.800 0.801 0.802
## [229] 0.803 0.804 0.805 0.806 0.807 0.808 0.809 0.810 0.811 0.812 0.813 0.814
## [241] 0.815 0.816 0.817 0.818 0.819 0.820 0.821 0.822 0.823 0.824 0.825 0.826
## [253] 0.827 0.828 0.829 0.830 0.831 0.832 0.833 0.834 0.835 0.836 0.837 0.838
## [265] 0.839 0.840 0.841 0.842 0.843 0.844 0.845 0.846 0.847 0.848 0.849 0.850
## [277] 0.851 0.852 0.853 0.854 0.855 0.856 0.857 0.858 0.859 0.860 0.861 0.862
## [289] 0.863 0.864 0.865 0.866 0.867 0.868 0.869 0.870 0.871 0.872 0.873 0.874
## [301] 0.875 0.876 0.877 0.878 0.879 0.880 0.881 0.882 0.883 0.884 0.885 0.886
## [313] 0.887 0.888 0.889 0.890 0.891 0.892 0.893 0.894 0.895 0.896 0.897 0.898
## [325] 0.899 0.900 0.901 0.902 0.903 0.904 0.905 0.906 0.907 0.908 0.909 0.910
## [337] 0.911 0.912 0.913 0.914 0.915 0.916 0.917 0.918 0.919
postrend2 <- postrend[101:200] |> ts()
mean(postrend2)
## [1] 48.66076
var(postrend2)
## [1] 120.9194
postrend2 |> as_tsibble() |>
ggplot(aes(x = index, y = value)) +
geom_line() + theme_bw() +
xlab("Obs") + ylab("Nilai")
acf(postrend2)
adf.test(postrend2)
##
## Augmented Dickey-Fuller Test
##
## data: postrend2
## Dickey-Fuller = -3.5331, Lag order = 4, p-value = 0.04268
## alternative hypothesis: stationary
index <- seq(1:100)
bc = boxcox(postrend2~index, lambda = seq(-1,1.2,by=0.001))
#Nilai Rounded Lambda
lambda <- bc$x[which.max(bc$y)]
lambda
## [1] 0.407
#SK
bc$x[bc$y > max(bc$y) - 1/2 * qchisq(.95,1)]
## [1] -0.019 -0.018 -0.017 -0.016 -0.015 -0.014 -0.013 -0.012 -0.011 -0.010
## [11] -0.009 -0.008 -0.007 -0.006 -0.005 -0.004 -0.003 -0.002 -0.001 0.000
## [21] 0.001 0.002 0.003 0.004 0.005 0.006 0.007 0.008 0.009 0.010
## [31] 0.011 0.012 0.013 0.014 0.015 0.016 0.017 0.018 0.019 0.020
## [41] 0.021 0.022 0.023 0.024 0.025 0.026 0.027 0.028 0.029 0.030
## [51] 0.031 0.032 0.033 0.034 0.035 0.036 0.037 0.038 0.039 0.040
## [61] 0.041 0.042 0.043 0.044 0.045 0.046 0.047 0.048 0.049 0.050
## [71] 0.051 0.052 0.053 0.054 0.055 0.056 0.057 0.058 0.059 0.060
## [81] 0.061 0.062 0.063 0.064 0.065 0.066 0.067 0.068 0.069 0.070
## [91] 0.071 0.072 0.073 0.074 0.075 0.076 0.077 0.078 0.079 0.080
## [101] 0.081 0.082 0.083 0.084 0.085 0.086 0.087 0.088 0.089 0.090
## [111] 0.091 0.092 0.093 0.094 0.095 0.096 0.097 0.098 0.099 0.100
## [121] 0.101 0.102 0.103 0.104 0.105 0.106 0.107 0.108 0.109 0.110
## [131] 0.111 0.112 0.113 0.114 0.115 0.116 0.117 0.118 0.119 0.120
## [141] 0.121 0.122 0.123 0.124 0.125 0.126 0.127 0.128 0.129 0.130
## [151] 0.131 0.132 0.133 0.134 0.135 0.136 0.137 0.138 0.139 0.140
## [161] 0.141 0.142 0.143 0.144 0.145 0.146 0.147 0.148 0.149 0.150
## [171] 0.151 0.152 0.153 0.154 0.155 0.156 0.157 0.158 0.159 0.160
## [181] 0.161 0.162 0.163 0.164 0.165 0.166 0.167 0.168 0.169 0.170
## [191] 0.171 0.172 0.173 0.174 0.175 0.176 0.177 0.178 0.179 0.180
## [201] 0.181 0.182 0.183 0.184 0.185 0.186 0.187 0.188 0.189 0.190
## [211] 0.191 0.192 0.193 0.194 0.195 0.196 0.197 0.198 0.199 0.200
## [221] 0.201 0.202 0.203 0.204 0.205 0.206 0.207 0.208 0.209 0.210
## [231] 0.211 0.212 0.213 0.214 0.215 0.216 0.217 0.218 0.219 0.220
## [241] 0.221 0.222 0.223 0.224 0.225 0.226 0.227 0.228 0.229 0.230
## [251] 0.231 0.232 0.233 0.234 0.235 0.236 0.237 0.238 0.239 0.240
## [261] 0.241 0.242 0.243 0.244 0.245 0.246 0.247 0.248 0.249 0.250
## [271] 0.251 0.252 0.253 0.254 0.255 0.256 0.257 0.258 0.259 0.260
## [281] 0.261 0.262 0.263 0.264 0.265 0.266 0.267 0.268 0.269 0.270
## [291] 0.271 0.272 0.273 0.274 0.275 0.276 0.277 0.278 0.279 0.280
## [301] 0.281 0.282 0.283 0.284 0.285 0.286 0.287 0.288 0.289 0.290
## [311] 0.291 0.292 0.293 0.294 0.295 0.296 0.297 0.298 0.299 0.300
## [321] 0.301 0.302 0.303 0.304 0.305 0.306 0.307 0.308 0.309 0.310
## [331] 0.311 0.312 0.313 0.314 0.315 0.316 0.317 0.318 0.319 0.320
## [341] 0.321 0.322 0.323 0.324 0.325 0.326 0.327 0.328 0.329 0.330
## [351] 0.331 0.332 0.333 0.334 0.335 0.336 0.337 0.338 0.339 0.340
## [361] 0.341 0.342 0.343 0.344 0.345 0.346 0.347 0.348 0.349 0.350
## [371] 0.351 0.352 0.353 0.354 0.355 0.356 0.357 0.358 0.359 0.360
## [381] 0.361 0.362 0.363 0.364 0.365 0.366 0.367 0.368 0.369 0.370
## [391] 0.371 0.372 0.373 0.374 0.375 0.376 0.377 0.378 0.379 0.380
## [401] 0.381 0.382 0.383 0.384 0.385 0.386 0.387 0.388 0.389 0.390
## [411] 0.391 0.392 0.393 0.394 0.395 0.396 0.397 0.398 0.399 0.400
## [421] 0.401 0.402 0.403 0.404 0.405 0.406 0.407 0.408 0.409 0.410
## [431] 0.411 0.412 0.413 0.414 0.415 0.416 0.417 0.418 0.419 0.420
## [441] 0.421 0.422 0.423 0.424 0.425 0.426 0.427 0.428 0.429 0.430
## [451] 0.431 0.432 0.433 0.434 0.435 0.436 0.437 0.438 0.439 0.440
## [461] 0.441 0.442 0.443 0.444 0.445 0.446 0.447 0.448 0.449 0.450
## [471] 0.451 0.452 0.453 0.454 0.455 0.456 0.457 0.458 0.459 0.460
## [481] 0.461 0.462 0.463 0.464 0.465 0.466 0.467 0.468 0.469 0.470
## [491] 0.471 0.472 0.473 0.474 0.475 0.476 0.477 0.478 0.479 0.480
## [501] 0.481 0.482 0.483 0.484 0.485 0.486 0.487 0.488 0.489 0.490
## [511] 0.491 0.492 0.493 0.494 0.495 0.496 0.497 0.498 0.499 0.500
## [521] 0.501 0.502 0.503 0.504 0.505 0.506 0.507 0.508 0.509 0.510
## [531] 0.511 0.512 0.513 0.514 0.515 0.516 0.517 0.518 0.519 0.520
## [541] 0.521 0.522 0.523 0.524 0.525 0.526 0.527 0.528 0.529 0.530
## [551] 0.531 0.532 0.533 0.534 0.535 0.536 0.537 0.538 0.539 0.540
## [561] 0.541 0.542 0.543 0.544 0.545 0.546 0.547 0.548 0.549 0.550
## [571] 0.551 0.552 0.553 0.554 0.555 0.556 0.557 0.558 0.559 0.560
## [581] 0.561 0.562 0.563 0.564 0.565 0.566 0.567 0.568 0.569 0.570
## [591] 0.571 0.572 0.573 0.574 0.575 0.576 0.577 0.578 0.579 0.580
## [601] 0.581 0.582 0.583 0.584 0.585 0.586 0.587 0.588 0.589 0.590
## [611] 0.591 0.592 0.593 0.594 0.595 0.596 0.597 0.598 0.599 0.600
## [621] 0.601 0.602 0.603 0.604 0.605 0.606 0.607 0.608 0.609 0.610
## [631] 0.611 0.612 0.613 0.614 0.615 0.616 0.617 0.618 0.619 0.620
## [641] 0.621 0.622 0.623 0.624 0.625 0.626 0.627 0.628 0.629 0.630
## [651] 0.631 0.632 0.633 0.634 0.635 0.636 0.637 0.638 0.639 0.640
## [661] 0.641 0.642 0.643 0.644 0.645 0.646 0.647 0.648 0.649 0.650
## [671] 0.651 0.652 0.653 0.654 0.655 0.656 0.657 0.658 0.659 0.660
## [681] 0.661 0.662 0.663 0.664 0.665 0.666 0.667 0.668 0.669 0.670
## [691] 0.671 0.672 0.673 0.674 0.675 0.676 0.677 0.678 0.679 0.680
## [701] 0.681 0.682 0.683 0.684 0.685 0.686 0.687 0.688 0.689 0.690
## [711] 0.691 0.692 0.693 0.694 0.695 0.696 0.697 0.698 0.699 0.700
## [721] 0.701 0.702 0.703 0.704 0.705 0.706 0.707 0.708 0.709 0.710
## [731] 0.711 0.712 0.713 0.714 0.715 0.716 0.717 0.718 0.719 0.720
## [741] 0.721 0.722 0.723 0.724 0.725 0.726 0.727 0.728 0.729 0.730
## [751] 0.731 0.732 0.733 0.734 0.735 0.736 0.737 0.738 0.739 0.740
## [761] 0.741 0.742 0.743 0.744 0.745 0.746 0.747 0.748 0.749 0.750
## [771] 0.751 0.752 0.753 0.754 0.755 0.756 0.757 0.758 0.759 0.760
## [781] 0.761 0.762 0.763 0.764 0.765 0.766 0.767 0.768 0.769 0.770
## [791] 0.771 0.772 0.773 0.774 0.775 0.776 0.777 0.778 0.779 0.780
## [801] 0.781 0.782 0.783 0.784 0.785 0.786 0.787 0.788 0.789 0.790
## [811] 0.791 0.792 0.793 0.794 0.795 0.796 0.797 0.798 0.799 0.800
## [821] 0.801 0.802 0.803 0.804 0.805 0.806 0.807 0.808 0.809 0.810
## [831] 0.811 0.812 0.813 0.814 0.815 0.816 0.817 0.818 0.819 0.820
## [841] 0.821 0.822
arima.sim
memiliki parameter sd yang dapat di-set
beda.
set.seed(9089)
sd1 <- arima.sim(n=100, list(order=c(1,0,1),ar=c(.2), ma=.2), sd = 1)
sd5 <- arima.sim(n=100, list(order=c(1,0,1),ar=c(.2), ma=.2), sd = 5)
dtgab <- c(sd1,sd5) |> ts()
dtgab |> as_tsibble() |>
ggplot(aes(x = index, y = value)) +
geom_line() + theme_bw() +
xlab("Obs") + ylab("Nilai")
Berdasarkan plot time series tersebut, terlihat bahwa data stasioner dalam rataan, ditandai dengan tidak adanya trend ataupun musiman pada data, namun tidak stasioner dalam ragam, ditandai dengan adanya perbedaan lebar pita pada plot
acf(dtgab)
Berdasarkan plot ACF, terlihat bahwa data stasioner dalam rataan, ditandai dengan plot ACF yang tails off dan cenderung membentuk gelombang sinus
adf.test(dtgab)
## Warning in adf.test(dtgab): p-value smaller than printed p-value
##
## Augmented Dickey-Fuller Test
##
## data: dtgab
## Dickey-Fuller = -5.2106, 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 kurang dari taraf nyata 5% dan menandakan bahwa data stasioner dalam rataan. Hal ini sesuai dengan hasil eksplorasi menggunakan plot time series dan plot ACF
dtgab1 <- dtgab[1:66] |> ts()
mean(dtgab1)
## [1] 0.06376099
var(dtgab1)
## [1] 0.9929488
dtgab1 |> as_tsibble() |>
ggplot(aes(x = index, y = value)) +
geom_line() + theme_bw() +
xlab("Obs") + ylab("Nilai")
Berdasarkan plot time series tersebut, terlihat bahwa data cenderung stasioner dalam rataan, ditandain dengan tidak adanya trend dan musiman pada data, serta stasioner dalam ragam, ditandai dengan lebar pita yang cenderung sama pada plot tersebut
acf(dtgab1)
Berdasarkan plot ACF, terlihat bahwa data cenderung stasioner dalam rataan ditandai dengan plot ACF yang tails off dan cenderung membentuk gelombang sinus
adf.test(dtgab1)
##
## Augmented Dickey-Fuller Test
##
## data: dtgab1
## Dickey-Fuller = -3.9613, Lag order = 4, p-value = 0.01691
## 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.01691 yang kurang dari taraf nyata 5% dan menandakan bahwa data stasioner dalam rataan. Hal ini sesuai dengan hasil eksplorasi menggunakan plot time series dan plot ACF
dtgab2 <- dtgab[1:132] |> ts()
mean(dtgab2)
## [1] -0.2346268
var(dtgab2)
## [1] 8.376508
dtgab2 |> as_tsibble() |>
ggplot(aes(x = index, y = value)) +
geom_line() + theme_bw() +
xlab("Obs") + ylab("Nilai")
Berdasarkan plot data deret waktu tersebut, terlihat bahwa data stasioner dalam rataan, ditandai dengan data yang tidak menunjukkan adanya trend ataupun musiman, serta tidak stasioner dalam ragam ditandai dengan lebar pita pada plot yang cenderung berbeda di beberapa periode waktunya
acf(dtgab2)
Berdasarkan plot ACF tersebut, terlihat bahwa data stasioner dalam rataan ditandai dengan plot ACF yang cuts off pada lag ke 2
adf.test(dtgab2)
##
## Augmented Dickey-Fuller Test
##
## data: dtgab2
## Dickey-Fuller = -3.951, Lag order = 5, p-value = 0.01383
## 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.01383 yang kurang dari taraf nyata 5% dan menandakan bahwa data stasioner dalam rataan. Hal ini sesuai dengan hasil eksplorasi menggunakan plot time series dan plot ACF
Hal ini dapat disimulasikan dengan membangkitkan data yang tidak stasioner dalam ragam lalu membentuk trend menggunakan data tersebut
set.seed(8990)
sd2 <- arima.sim(n=100, list(order=c(1,0,1),ar=c(.2), ma=.2), sd = 2)
sd6 <- arima.sim(n=100, list(order=c(1,0,1),ar=c(.2), ma=.2), sd = 6)
datagab <- c(sd2,sd6)
dt_rg <- startSpot + cumsum(datagab) |> ts()
dt_rg |> as_tsibble() |>
ggplot(aes(x = index, y = value)) +
geom_line() + theme_bw() +
xlab("Obs") + ylab("Nilai")
Berdasarkan plot time series tersebut, terlihat bahwa data tidak stasioner dalam rataan, ditandai dengan adanya trend pada data dan tidak stasioner dalam ragam, ditandai dengan adanya perbedaan lebar pita pada plot
acf(dt_rg)
Berdasarkan plot ACF, terlihat bahwa plot ACF pada data tersebut menurun secara perlahan (tails off slowly) yang menandakan data tidak stasioner dalam rataan
adf.test(dt_rg)
##
## Augmented Dickey-Fuller Test
##
## data: dt_rg
## Dickey-Fuller = -1.8362, Lag order = 5, p-value = 0.6447
## 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.6447 yang lebih besar dari taraf nyata 5% dan menandakan bahwa data tidak stasioner dalam rataan. Hal ini sesuai dengan hasil eksplorasi menggunakan plot time series dan plot ACF
dt_rg1 <- dt_rg[1:66] |> ts()
mean(dt_rg1)
## [1] 1.244075
var(dt_rg1)
## [1] 118.5542
dt_rg1 |> as_tsibble() |>
ggplot(aes(x = index, y = value)) +
geom_line() + theme_bw() +
xlab("Obs") + ylab("Nilai")
Berdasarkan plot time series tersebut, terlihat bahwa data tidak stasioner dalam rataan karena masih terdapat tren pada data, namun cenderung stasioner dalam ragam karena memiliki lebar pita yang cenderung sama
acf(dt_rg1)
Berdasarkan plot ACF, terlihat bahwa plot ACF pada data tersebut menurun secara perlahan (tails off slowly) yang menandakan data tidak stasioner dalam rataan
adf.test(dt_rg1)
##
## Augmented Dickey-Fuller Test
##
## data: dt_rg1
## Dickey-Fuller = -1.7373, Lag order = 4, p-value = 0.6816
## 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.6816 yang lebih besar dari taraf nyata 5% dan menandakan bahwa data tidak stasioner dalam rataan. Hal ini sesuai dengan hasil eksplorasi menggunakan plot time series dan plot ACF
dt_rg2 <- dt_rg[67:132] |> ts()
mean(dt_rg2)
## [1] -14.41959
var(dt_rg2)
## [1] 1124.704
dt_rg2 |> as_tsibble() |>
ggplot(aes(x = index, y = value)) +
geom_line() + theme_bw() +
xlab("Obs") + ylab("Nilai")
Berdasarkan plot time series tersebut, terlihat bahwa data tidak stasioner dalam rataan karena masih terdapat tren pada data, dan tidak stasioner dalam ragam karena memiliki lebar pita yang cenderung tidak sama
acf(dt_rg2)
Berdasarkan plot ACF, terlihat bahwa plot ACF pada data tersebut menurun secara perlahan (tails off slowly) yang menandakan data tidak stasioner dalam rataan
adf.test(dt_rg2)
##
## Augmented Dickey-Fuller Test
##
## data: dt_rg2
## Dickey-Fuller = -1.0695, Lag order = 4, p-value = 0.9202
## 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.9202 yang lebih besar dari taraf nyata 5% dan menandakan bahwa data tidak stasioner dalam rataan. Hal ini sesuai dengan hasil eksplorasi menggunakan plot time series dan plot ACF
dt_rg3 <- dt_rg[133:200] |> ts()
mean(dt_rg3)
## [1] 20.12677
var(dt_rg3)
## [1] 797.5286
dt_rg3 |> as_tsibble() |>
ggplot(aes(x = index, y = value)) +
geom_line() + theme_bw() +
xlab("Obs") + ylab("Nilai")
Berdasarkan plot time series tersebut, terlihat bahwa data tidak stasioner dalam rataan karena masih terdapat tren pada data, namun cenderung stasioner dalam ragam karena memiliki lebar pita yang cenderung sama
acf(dt_rg3)
Berdasarkan plot ACF, terlihat bahwa plot ACF pada data tersebut menurun secara perlahan (tails off slowly)yang menandakan data tidak stasioner dalam rataan
tseries::adf.test(dt_rg3,k=5)
##
## Augmented Dickey-Fuller Test
##
## data: dt_rg3
## Dickey-Fuller = -3.1644, Lag order = 5, p-value = 0.1022
## 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.323 yang lebih besar dari taraf nyata 5% dan menandakan bahwa data tidak stasioner dalam rataan. Hal ini tidak sesuai dengan hasil eksplorasi menggunakan plot time series dan plot ACF