Cek Asumsi Data Time Series

Dinda Khamila Nurfatimah

2023-10-01

Packages

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)

Input Data

library(rio)
data <- import("https://raw.githubusercontent.com/DindaKhamila/mpdw/main/Data/DataTugas.csv")
View(data)

n<-nrow(data)
n
## [1] 359

Mengubah data agar terbaca sebagai data deret waktu dengan fungsi ts() .

data.ts <- ts(data$PowerConsumed)
data.ts
## Time Series:
## Start = 1 
## End = 359 
## Frequency = 1 
##   [1]  85.8  85.5  83.5  79.2  76.6  71.1  69.0  89.2  92.8  79.5  92.6  89.4
##  [13]  82.2  77.8 111.8 115.6 117.9 121.9 121.7 112.2 108.0 109.3 111.9 114.2
##  [25] 112.7 105.0 100.5  96.4  41.8  43.1  42.9  44.9  43.8  43.5  44.1  60.3
##  [37]  63.2  68.4  67.6  69.0  64.8  61.2  71.8  71.7  72.7  71.6  71.3  69.2
##  [49]  67.0 111.8 114.9 121.6 128.1 131.6 132.2 132.7  69.0  72.1  71.8  71.1
##  [61]  73.0  68.0  67.3 111.7 121.6 128.0 132.7 132.6 129.7 113.9  57.8  51.2
##  [73]  58.4  63.0  66.1  69.6  68.3  62.5  63.5  62.6  62.4  63.5  60.4  57.2
##  [85]  61.7  64.3  65.9  67.4  71.8  73.9  69.1  61.4  64.1  66.1  66.1  65.4
##  [97]  63.0  60.2 123.2 126.1 135.1 135.2 133.5 136.7 136.0  63.9  63.6  63.8
## [109]  62.5  63.8  60.3  57.9  74.2  76.9  76.9  79.2  82.0  80.4  78.0  98.5
## [121]  99.3 102.4 102.6 100.9  94.6  84.7 116.6 129.0 130.4 115.2 109.3 100.7
## [133]  98.9  91.9  99.3 106.7 111.4 109.7 103.2  98.7  46.1  48.7  46.0  46.1
## [145]  44.1  44.4  42.4  78.4  75.9  74.2  75.9  76.0  69.1  60.8  67.9  67.7
## [157]  70.8  70.4  72.5  58.6  63.7 102.8 110.8 114.0 114.5 105.5 109.2  99.9
## [169]  77.7  75.9  76.6  75.0  76.0  71.4  60.3 103.8 110.9 117.8 115.7 117.0
## [181] 110.1 102.1  57.8  59.9  56.8  58.6  59.9  59.5  62.2  61.5  62.6  63.6
## [193]  63.4  64.0  60.4  58.0  61.6  61.7  60.1  46.1  54.4  57.9  58.2  64.2
## [205]  65.0  65.3  65.0  65.6  61.1  59.2 114.8  99.3 106.4 112.0 122.7 118.5
## [217] 121.0  75.7  78.7  81.3  82.3  84.8  91.7  95.2  62.6  64.0  65.1  63.6
## [229]  64.3  60.7  59.4  67.6  70.2  70.2  73.2  74.8  70.7  70.0 124.6 125.1
## [241] 121.0 113.9 113.4 108.1  94.0  59.2  60.2  60.7  60.6  63.4  59.1 118.5
## [253] 108.0  91.6 100.6 108.6 111.1 105.6  97.2  89.2  73.7  74.4  75.2  78.7
## [265]  79.2  85.8  86.0  88.3  87.9  86.4  80.7  75.3  68.9  72.2  72.3  72.2
## [277]  73.9  66.2  64.6 110.5 106.0 102.7 101.8 100.9  88.4  89.8  74.9  74.9
## [289]  75.4  76.4  77.3  73.3  71.7 115.5 117.8 113.9  98.7 107.7  99.2  89.1
## [301]  52.4  56.4  60.8  62.8  63.0  65.2  62.1  63.2  59.9  62.0  63.2  60.6
## [313]  60.4  58.5  61.2  61.4  62.2  61.4  64.2  59.4  57.5  66.8  67.1  66.5
## [325]  67.0  68.5  64.9  61.6 136.7 139.1 135.2 136.1 134.7 130.7 117.9  69.4
## [337]  67.7  71.8  73.1  72.2  72.0  73.3  68.5  69.5  68.8  66.8  66.8  62.6
## [349]  61.1  62.8  62.9  65.4  64.8  66.8  63.8  62.0 128.5 126.9 134.9
x<-data$Waktu
y<-data$PowerConsumed

Plot Time Series

plot_data <- data.ts |> as_tsibble() |> 
  ggplot(aes(x = x, y = y)) + geom_line() + theme_bw() +
  xlab("Periode") + ylab("Power Consumed")
plot_data

mean(data.ts)
## [1] 82.05655

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

Plot ACF

acf(data.ts)

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

Uji ADF

tseries::adf.test(data.ts)
## Warning in tseries::adf.test(data.ts): p-value smaller than printed p-value
## 
##  Augmented Dickey-Fuller Test
## 
## data:  data.ts
## Dickey-Fuller = -4.987, Lag order = 7, 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.

Plot Box-Cox

index <- seq(1:n)
bc = boxcox(data.ts~x, lambda = seq(-5,4,by=0.01))

#Nilai Rounded Lambda
lambda <- bc$x[which.max(bc$y)]
lambda
## [1] -0.45
#SK
bc$x[bc$y > max(bc$y) - 1/2 * qchisq(.95,1)]
##  [1] -0.80 -0.79 -0.78 -0.77 -0.76 -0.75 -0.74 -0.73 -0.72 -0.71 -0.70 -0.69
## [13] -0.68 -0.67 -0.66 -0.65 -0.64 -0.63 -0.62 -0.61 -0.60 -0.59 -0.58 -0.57
## [25] -0.56 -0.55 -0.54 -0.53 -0.52 -0.51 -0.50 -0.49 -0.48 -0.47 -0.46 -0.45
## [37] -0.44 -0.43 -0.42 -0.41 -0.40 -0.39 -0.38 -0.37 -0.36 -0.35 -0.34 -0.33
## [49] -0.32 -0.31 -0.30 -0.29 -0.28 -0.27 -0.26 -0.25 -0.24 -0.23 -0.22 -0.21
## [61] -0.20 -0.19 -0.18 -0.17 -0.16 -0.15 -0.14 -0.13 -0.12 -0.11

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

Partisi Data

Bagian 1

dt_stas1 <- data.ts[1:150] |> ts()
mean(dt_stas1)
## [1] 84.32667
var(dt_stas1)
## [1] 717.653

Plot Time Series

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

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

Plot ACF

acf(dt_stas1)

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

Uji ADF

tseries::adf.test(dt_stas1)
## Warning in tseries::adf.test(dt_stas1): p-value smaller than printed p-value
## 
##  Augmented Dickey-Fuller Test
## 
## data:  dt_stas1
## Dickey-Fuller = -4.3552, 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.

Plot Boxcox

index <- seq(1:150)
bc = boxcox(dt_stas1~index, lambda = seq(-6,6,by=1))

#Nilai Rounded Lambda
lambda <- bc$x[which.max(bc$y)]
lambda
## [1] 0.06060606
#SK
bc$x[bc$y > max(bc$y) - 1/2 * qchisq(.95,1)]
## [1] -0.30303030 -0.18181818 -0.06060606  0.06060606  0.18181818  0.30303030
## [7]  0.42424242  0.54545455

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

Bagian 2

dt_stas2 <- data.ts[1:250] |> ts()
mean(dt_stas2)
## [1] 82.272
var(dt_stas2)
## [1] 629.6014

Plot Time Series

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

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

Plot ACF

acf(dt_stas2)

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

Uji ADF

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 = -5.9141, Lag order = 6, 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.

Plot Boxcox

index <- seq(1:250)
bc = boxcox(dt_stas2~index, lambda = seq(-6,6,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.54545455 -0.42424242 -0.30303030 -0.18181818 -0.06060606  0.06060606
## [7]  0.18181818

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