library(ggplot2)
library(tsibble)
## 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)
## Registered S3 method overwritten by 'quantmod':
##   method            from
##   as.zoo.data.frame zoo
library(MASS)
library(readxl)

Stasioner dalam Rataan dan Ragam

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 .

curah_hujan <- read_xlsx("C:/Users/asus/Documents/Semester 5/MPDW/paper/Data Hujan Bogor 2023-Now.xlsx", sheet="data arbay")
curah_hujan$Tanggal <- as.Date(curah_hujan$Tanggal, format = "%d-%b")

str(curah_hujan)
## tibble [121 × 2] (S3: tbl_df/tbl/data.frame)
##  $ Tanggal        : Date[1:121], format: "2024-05-01" "2024-05-02" ...
##  $ Akumulasi Hujan: num [1:121] 1.72 13.27 335.94 45.79 95.95 ...
min_value <- min(curah_hujan$'Akumulasi Hujan', na.rm = TRUE)  # Menentukan nilai minimum
max_value <- max(curah_hujan$'Akumulasi Hujan', na.rm = TRUE)  # Menentukan nilai maksimum

Plot Time Series

curah_hujan.ts <- ts(curah_hujan$'Akumulasi Hujan')
curah_hujan_tsibble <- as_tsibble(curah_hujan, index = Tanggal)

plot_timeseries <- ggplot(curah_hujan_tsibble, aes(x = Tanggal, y = `Akumulasi Hujan`)) +
  geom_line() +
  scale_x_date(date_breaks = "1 day", date_labels = "%d") +
  labs(title = "Plot Time Series Akumulasi Hujan", x = "Tanggal", y = "Akumulasi Hujan") +
  theme_minimal()
plot_timeseries

mean(curah_hujan$`Akumulasi Hujan`)
## [1] 11.80798

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.

Plot ACF

acf(curah_hujan_tsibble)

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

Tentu! Berikut adalah interpretasi dari plot ACF yang Anda berikan:

  1. Lag 0: Nilai ACF pada lag 0 adalah 1, yang menunjukkan korelasi sempurna dengan dirinya sendiri.
  2. Signifikansi: Sebagian besar batang berada di dalam batas garis putus-putus horizontal, yang menunjukkan bahwa korelasi pada lag tersebut tidak signifikan secara statistik.
  3. Autokorelasi: Ada beberapa batang yang berada di atas dan di bawah nol, tetapi tetap dalam batas signifikansi, menunjukkan adanya autokorelasi pada lag tersebut.
  4. Pola Musiman: Jika ada pola yang berulang pada interval tertentu, ini bisa menunjukkan adanya pola musiman dalam data curah hujan.
library(lattice)

densityplot(~ curah_hujan$`Akumulasi Hujan`)

Uji ADF

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

curah_hujan.ts1 <- curah_hujan.ts + abs(min(curah_hujan.ts)) + 0.000001
summary(curah_hujan.ts1)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   0.000   0.000   0.145  11.808   4.054 335.935
index_keseluruhan <- seq(1:121)
bc = boxcox(curah_hujan.ts1~index_keseluruhan, lambda = seq(0,1,by=0.001))

#Nilai Rounded Lambda
lambda1 <- bc$x[which.max(bc$y)]
lambda1
## [1] 0.057
#SK
bc$x[bc$y > max(bc$y) - 1/2 * qchisq(.95,1)]
##  [1] 0.023 0.024 0.025 0.026 0.027 0.028 0.029 0.030 0.031 0.032 0.033 0.034
## [13] 0.035 0.036 0.037 0.038 0.039 0.040 0.041 0.042 0.043 0.044 0.045 0.046
## [25] 0.047 0.048 0.049 0.050 0.051 0.052 0.053 0.054 0.055 0.056 0.057 0.058
## [37] 0.059 0.060 0.061 0.062 0.063 0.064 0.065 0.066 0.067 0.068 0.069 0.070
## [49] 0.071 0.072 0.073 0.074 0.075 0.076 0.077 0.078 0.079 0.080 0.081 0.082
## [61] 0.083 0.084 0.085 0.086 0.087 0.088 0.089 0.090

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

Partisi Data

Bagian 1

dt_stas1 <- curah_hujan.ts1[1:60] |> ts()
mean(dt_stas1)
## [1] 21.9439
var(dt_stas1)
## [1] 2554.68

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

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)
## 
##  Augmented Dickey-Fuller Test
## 
## data:  dt_stas1
## Dickey-Fuller = -4.1239, Lag order = 3, p-value = 0.01027
## 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,01027 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_bagian1 <- seq(1:60)
bc = boxcox(dt_stas1~index_bagian1, lambda = seq(-2,6,by=0.001))

#Nilai Rounded Lambda
lambda_bagian1 <- bc$x[which.max(bc$y)]
lambda_bagian1
## [1] 0.103
#SK
sk_bagian1 <- bc$x[bc$y > max(bc$y) - 1/2 * qchisq(.95,1)]
sk_bagian1
##  [1] 0.056 0.057 0.058 0.059 0.060 0.061 0.062 0.063 0.064 0.065 0.066 0.067
## [13] 0.068 0.069 0.070 0.071 0.072 0.073 0.074 0.075 0.076 0.077 0.078 0.079
## [25] 0.080 0.081 0.082 0.083 0.084 0.085 0.086 0.087 0.088 0.089 0.090 0.091
## [37] 0.092 0.093 0.094 0.095 0.096 0.097 0.098 0.099 0.100 0.101 0.102 0.103
## [49] 0.104 0.105 0.106 0.107 0.108 0.109 0.110 0.111 0.112 0.113 0.114 0.115
## [61] 0.116 0.117 0.118 0.119 0.120 0.121 0.122 0.123 0.124 0.125 0.126 0.127
## [73] 0.128 0.129 0.130 0.131 0.132 0.133 0.134 0.135 0.136 0.137 0.138 0.139
## [85] 0.140 0.141 0.142 0.143 0.144 0.145 0.146 0.147 0.148 0.149 0.150 0.151
## [97] 0.152 0.153

Gambar di atas menunjukkan nilai rounded value (\(\lambda\)) optimum sebesar 0,103 dan pada selang kepercayaan 95% nilai memiliki batas bawah 0,056 dan batas atas 0,153. Selang tersebut tidak memenuhi nilai satu sehingga dapat dikatakan bahwa data bangkitan tidak stasioner dalam ragam.

Bagian 2

dt_stas2 <- curah_hujan.ts1[61:121] |> ts()
mean(dt_stas2)
## [1] 1.838232
var(dt_stas2)
## [1] 90.15442

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.

Plot ACF

acf(dt_stas2)

Berdasarkan plot ACF, terlihat bahwa plot ACF pada data tersebut cenderung cut off

Uji ADF

adf.test(dt_stas2)
## 
##  Augmented Dickey-Fuller Test
## 
## data:  dt_stas2
## Dickey-Fuller = -4.0348, Lag order = 3, p-value = 0.01409
## 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.01409 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_bagian2 <- seq(61:121)
bc = boxcox(dt_stas2~index_bagian2, lambda = seq(0,6,by=0.001))

#Nilai Rounded Lambda
lambda_bagian2 <- bc$x[which.max(bc$y)]
lambda_bagian2
## [1] 0.018
#SK
sk_bagian2 <- bc$x[bc$y > max(bc$y) - 1/2 * qchisq(.95,1)]
sk_bagian2
##  [1] 0.000 0.001 0.002 0.003 0.004 0.005 0.006 0.007 0.008 0.009 0.010 0.011
## [13] 0.012 0.013 0.014 0.015 0.016 0.017 0.018 0.019 0.020 0.021 0.022 0.023
## [25] 0.024 0.025 0.026 0.027 0.028 0.029 0.030 0.031 0.032 0.033 0.034 0.035
## [37] 0.036 0.037 0.038 0.039 0.040 0.041 0.042 0.043 0.044 0.045 0.046 0.047
## [49] 0.048 0.049 0.050 0.051 0.052 0.053 0.054 0.055 0.056 0.057 0.058 0.059
## [61] 0.060 0.061 0.062 0.063 0.064 0.065 0.066 0.067 0.068 0.069 0.070 0.071
## [73] 0.072 0.073

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