1 Package yang digunakan

library(ggplot2)
library(forecast)
library(stats)
library(tseries)
library(knitr)
library(kableExtra)
library(plotly)
library(rmdformats)

2 Input Data dan Membuat Data Frame

suhu_cilegon <- c(27.8, 27.9,28.3, 28.9, 29.1, 28.6, 28.0, 28.1, 28.4, 28.7, 28.2,27.9,28.0, 28.1, 28.6, 29.2, 29.4, 28.8, 28.2, 28.3, 28.6, 28.9, 28.4, 28.1)

df_suhu <- data.frame(
  Bulan_Angka = rep(1:12, 2),
  Tahun       = rep(c(2023, 2024), each = 12),
  Suhu        = suhu_cilegon
) %>%
  mutate(Tanggal = as.Date(paste(Tahun, Bulan_Angka, "01", sep = "-")))

Data tersebut merupakan data suhu di Kota Cilegon pada tahun 2023 hingga tahun 2024

3 Tabel Data Suhu Kota Cilegon

# Menampilkan tabel data yang rapi dengan efek zebra/hover
kable(head(df_suhu, 24), caption = "Suhu Kota Cilegon") %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed"), 
                full_width = FALSE, 
                position = "center")
Suhu Kota Cilegon
Bulan_Angka Tahun Suhu Tanggal
1 2023 27.8 2023-01-01
2 2023 27.9 2023-02-01
3 2023 28.3 2023-03-01
4 2023 28.9 2023-04-01
5 2023 29.1 2023-05-01
6 2023 28.6 2023-06-01
7 2023 28.0 2023-07-01
8 2023 28.1 2023-08-01
9 2023 28.4 2023-09-01
10 2023 28.7 2023-10-01
11 2023 28.2 2023-11-01
12 2023 27.9 2023-12-01
1 2024 28.0 2024-01-01
2 2024 28.1 2024-02-01
3 2024 28.6 2024-03-01
4 2024 29.2 2024-04-01
5 2024 29.4 2024-05-01
6 2024 28.8 2024-06-01
7 2024 28.2 2024-07-01
8 2024 28.3 2024-08-01
9 2024 28.6 2024-09-01
10 2024 28.9 2024-10-01
11 2024 28.4 2024-11-01
12 2024 28.1 2024-12-01

Data yang tersebut dimulai dengan bulan Januari tahun 2023 hingga bulan Desember tahun 2024

4 Objek Time Series dan Plot Runtun Waktu

ts_suhu <- ts(suhu_cilegon, start = c(2023,1), frequency = 12)

pl <- ggplot(df_suhu, aes(x = Tanggal, y = Suhu)) +
  geom_line(color = "#E53935", linewidth = 1) +
  geom_point(color = "#E53935", size = 2.5) +
  # Tandai outlier (nilai ekstrem)
  geom_point(data = df_suhu %>% filter(Suhu > 40),
             aes(x = Tanggal, y = Suhu),
             color = "black", size = 4, shape = 8) +
  # Label nilai setiap titik
  geom_text(aes(label = Suhu),
            vjust = -1, size = 2.8, color = "#333333") +
  # Garis rata-rata
  geom_hline(yintercept = mean(suhu_cilegon[suhu_cilegon < 40]),
             linetype = "dashed", color = "#FFC107", linewidth = 0.8) +
  scale_x_date(date_breaks = "2 months", date_labels = "%b\n%Y") +
  labs(
    title    = "Suhu Rata-Rata Bulanan di Cilegon",
    subtitle = "Tahun 2023 - 2024 (C)",
    x        = "Bulan",
    y        = "Suhu (C)",
  ) +
  theme_minimal(base_size = 13) +
  theme(
    plot.title    = element_text(face = "bold", color = "#C62828"),
    plot.subtitle = element_text(color = "#555555")
  )
ggplotly(pl)

Berdasarkan grafik tersebut terdapat pola fluktuasi di tahun 2023 dan 2024. Pada tahun 2023 fluktuasi terjadi di bulan Mei yang menyentuh angka 29,1 derajat celsius dan pada tahun 2024 juga terjadi fluktuasi di bulan Mei dengan suhu sebesar 29,4 derajat celsius. Selain itu, data suhu pada grafik terlihat stasioner terhadap rataan (mean)

5 Rata-rata dan Variansi Per Tahun

suhu_tahun <- rep(2023:2024, each = 12)
tapply(suhu_cilegon, suhu_tahun, mean); tapply(suhu_cilegon, suhu_tahun, var)
##   2023   2024 
## 28.325 28.550
##      2023      2024 
## 0.1784091 0.2045455

Dilihat dari rataan data pada suhu tersebut nilai rataan pada tahun 2023 sebesar 28,325, sedangkan pada tahun 2024 rataan nya sebesar 28,550. Rataan tersebut mengindikasikan adanya pergeseran pusat data dari tahun sebelumnya.

Nilai varians suhu pada tahun 2023 sebesar 0,178 dan 0,205 pada tahun 2024, hal tersebut memperlihatkan terjadinya pelebaran terhadap sebaran atau rentang tahun 2023 ke tahun 2024.

6 Grafik ACF

acf(ts_suhu, lag.max = 24)

Plot ACF tersebut menunjukan adanya pola musiman dan juga terdapat beberapa batang yang melewati garis batas. Batang yang melewati batas adalah batang ke-1, 3, dan 12. Batang-batang tersebut menandakan adanya autokorelasi dan stasioner namun lemah karena didominasi musiman.

7 Uji Box-Pierce

Box.test(suhu_cilegon, lag = 12, type = "Box-Pierce")
## 
##  Box-Pierce test
## 
## data:  suhu_cilegon
## X-squared = 27.653, df = 12, p-value = 0.006215

Output tersebut apabila mengikuti hipotesis berikut adalah

  • \(H_0:\ro = 0(Tidak ada Autokorelasi)\)

  • \(H_1:\ro\=!0(Ada Autokorelasi)\)

karena nilai X-squared = 27.653 \(>\) \(\alpha\) (\(0.05\)), maka keputusannya adalah tolak \(H_0\) dan artinya terdapat krelasi tidak terdapat keacakan dan nilai suhu dipengaruhi oleh data sebelumnya.

8 uji signifikansi \(r_k\)

adf.test(suhu_cilegon)
## 
##  Augmented Dickey-Fuller Test
## 
## data:  suhu_cilegon
## Dickey-Fuller = -2.6421, Lag order = 2, p-value = 0.3278
## alternative hypothesis: stationary
  • \(H_0\) (Hipotesis Nol): Data memiliki unit root / tidak stasioner dalam rata-rata.

  • \(H_1\) (Hipotesis Alternatif): Data stasioner dalam rata-rata (stationary).

Nilai \(p\)-value (\(0.3278\)): Karena \(p\)-value (\(0.3278\)) \(>\) \(\alpha\) (\(0.05\)), maka keputusannya adalah Gagal Tolak \(H_0\).

Nilai Dickey-Fuller (\(-2.6421\)): Nilai statistik hitung ini tidak cukup negatif untuk melewati nilai kritis pada tingkat signifikansi 5%.

9 Deferensiasi

library(dplyr)

# 1. Mengubah data ts/vector ke data frame
df_suhu <- data.frame(
  bulan = seq(as.Date("2023-01-01"), by = "month", length.out = length(suhu_cilegon)),
  suhu = as.numeric(suhu_cilegon)
)

# 2. Membuat Lag 1 sampai Lag 12 secara otomatis
df_suhu <- df_suhu %>%
  mutate(
    across(
      .cols = suhu,
      .fns = list(
        lag1  = ~lag(.x, 1),
        lag2  = ~lag(.x, 2),
        lag3  = ~lag(.x, 3),
        lag4  = ~lag(.x, 4),
        lag5  = ~lag(.x, 5),
        lag6  = ~lag(.x, 6),
        lag7  = ~lag(.x, 7),
        lag8  = ~lag(.x, 8),
        lag9  = ~lag(.x, 9),
        lag10 = ~lag(.x, 10),
        lag11 = ~lag(.x, 11),
        lag12 = ~lag(.x, 12)
      ),
      .names = "{.fn}"
    )
  )

# Tampilkan hasil
head(df_suhu, 15)
##         bulan suhu lag1 lag2 lag3 lag4 lag5 lag6 lag7 lag8 lag9 lag10 lag11
## 1  2023-01-01 27.8   NA   NA   NA   NA   NA   NA   NA   NA   NA    NA    NA
## 2  2023-02-01 27.9 27.8   NA   NA   NA   NA   NA   NA   NA   NA    NA    NA
## 3  2023-03-01 28.3 27.9 27.8   NA   NA   NA   NA   NA   NA   NA    NA    NA
## 4  2023-04-01 28.9 28.3 27.9 27.8   NA   NA   NA   NA   NA   NA    NA    NA
## 5  2023-05-01 29.1 28.9 28.3 27.9 27.8   NA   NA   NA   NA   NA    NA    NA
## 6  2023-06-01 28.6 29.1 28.9 28.3 27.9 27.8   NA   NA   NA   NA    NA    NA
## 7  2023-07-01 28.0 28.6 29.1 28.9 28.3 27.9 27.8   NA   NA   NA    NA    NA
## 8  2023-08-01 28.1 28.0 28.6 29.1 28.9 28.3 27.9 27.8   NA   NA    NA    NA
## 9  2023-09-01 28.4 28.1 28.0 28.6 29.1 28.9 28.3 27.9 27.8   NA    NA    NA
## 10 2023-10-01 28.7 28.4 28.1 28.0 28.6 29.1 28.9 28.3 27.9 27.8    NA    NA
## 11 2023-11-01 28.2 28.7 28.4 28.1 28.0 28.6 29.1 28.9 28.3 27.9  27.8    NA
## 12 2023-12-01 27.9 28.2 28.7 28.4 28.1 28.0 28.6 29.1 28.9 28.3  27.9  27.8
## 13 2024-01-01 28.0 27.9 28.2 28.7 28.4 28.1 28.0 28.6 29.1 28.9  28.3  27.9
## 14 2024-02-01 28.1 28.0 27.9 28.2 28.7 28.4 28.1 28.0 28.6 29.1  28.9  28.3
## 15 2024-03-01 28.6 28.1 28.0 27.9 28.2 28.7 28.4 28.1 28.0 28.6  29.1  28.9
##    lag12
## 1     NA
## 2     NA
## 3     NA
## 4     NA
## 5     NA
## 6     NA
## 7     NA
## 8     NA
## 9     NA
## 10    NA
## 11    NA
## 12    NA
## 13  27.8
## 14  27.9
## 15  28.3

Melakukan deferensiasi untuk menargetkan agar data stasioner terhadap rataan.

nilai NA (Not Available) itu adalah lag yang mana data tersebut membutuhkan data sebelumnya