library(forecast)  # library untuk peramalan
## Warning: package 'forecast' was built under R version 4.4.3
set.seed(6)      # Mengunci Data frame agar nilai-nilai di dalamnya tidak berubah

# Parameter sebenarnya
phi_true <- 0.5  

# Skenario
n_values <- c(30, 150, 300)         # Banyak data (panjang data)
sigma_values <- c(1, 15, 40)         # Variansi

n_sim <- 100                        # Banyak replikasi (pengulangan)

hasil <- data.frame()        # Data frame skenario
semua_data <- data.frame()   # Data frame semua data yang digenerate
# Pembuatan data
for(n in n_values){
  for(sigma in sigma_values){
    
    phi_est <- numeric(n_sim)
    
    for(i in 1:n_sim){
      # Generate ARIMA(1,1,0)
      Data_stasioner <- arima.sim(model = list(ar = phi_true), n = n, sd = sqrt(sigma))  # Data yang sudah stasioner
      Data <- cumsum(Data_stasioner)    # karena d = 1 (lawan differencing untuk mengubah ke data yang belum stasioner)
      
      # Estimasi model
      fit <- Arima(Data, order = c(1,1,0))
      
      # Ambil koefisien AR
      phi_est[i] <- coef(fit)[1]
      
      # Masukan ke data frame semua_data
      semua_data <- rbind(semua_data,
                          data.frame(Phi = phi_est[i],
                                     n = n,
                                     Sigma = sigma))
    }
    
    # Ringkasan
    mean_phi <- mean(phi_est)
    bias <- mean_phi - phi_true
    sd_phi <- sd(phi_est)
    
    # Masukan data ke dalam data frame hasil
    hasil <- rbind(hasil,
                   data.frame(n = n,
                              Sigma = sigma,
                              Mean_phi = mean_phi,
                              Bias = bias,
                              Sd_phi = sd_phi))
  }
}
library(dplyr)
## Warning: package 'dplyr' was built under R version 4.4.3
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
# Merubah nama agar tidak menimbulkan kesalahpahaman
hasil <- hasil %>% rename("Sigma^2" = Sigma)
hasil
##     n Sigma^2  Mean_phi         Bias     Sd_phi
## 1  30       1 0.4839320 -0.016067992 0.15742355
## 2  30      15 0.4632481 -0.036751868 0.17610256
## 3  30      40 0.4941948 -0.005805200 0.16421097
## 4 150       1 0.4984056 -0.001594417 0.07223779
## 5 150      15 0.4863713 -0.013628653 0.07810199
## 6 150      40 0.4862145 -0.013785483 0.07339715
## 7 300       1 0.4981912 -0.001808805 0.05056263
## 8 300      15 0.4968725 -0.003127465 0.05564830
## 9 300      40 0.4913927 -0.008607294 0.05578195

Secara umum, nilai rata-rata estimasi parameter \(\phi\) berada di sekitar nilai sebenarnya, yaitu 0,5. Nilai bias yang dihasilkan pada seluruh skenario relatif kecil dan cenderung mendekati nol. Selain itu, nilai standar deviasi estimasi menunjukkan adanya perbedaan yang cukup jelas antar skenario, terutama dipengaruhi oleh ukuran sampel.

library(ggplot2)
# Boxplot distribusi estimasi phi 
ggplot(aes(x = interaction(n, Sigma), y = Phi), data = semua_data) + geom_boxplot() + 
  labs(title = "Distribusi Estimasi Phi", x = "Skenario (n, sigma^2)", y = "Estimasi Phi") +
  theme_classic() + theme(plot.title = element_text(hjust = 0.5, face = "bold"))

Dari boxplot di atas dapat kita lihat bahwa semakin besar n maka range dan IQR estimasi \(\phi\) cenderung semakin kecil. Hal ini berarti bahwa semakin besar n maka distribusi \(\hat{\phi}\) semakin terkonsentrasi di nilai yang sebenarnya. Sebaliknya, semakin besar \(\sigma^2\) maka IQR cenderung semakin membesar, terutama pada ukuran sampel kecil.

# Pemisahan data berdasarkan n
for (a in n_values) {
  cat("Data dengan n =", a, "\n" , sep = " ")
  Data_n <- hasil %>% filter(n == a) %>% arrange(`Sigma^2`)
  print(Data_n)
  cat(rep("==", 25), "\n\n")
}
## Data dengan n = 30 
##    n Sigma^2  Mean_phi        Bias    Sd_phi
## 1 30       1 0.4839320 -0.01606799 0.1574235
## 2 30      15 0.4632481 -0.03675187 0.1761026
## 3 30      40 0.4941948 -0.00580520 0.1642110
## == == == == == == == == == == == == == == == == == == == == == == == == == 
## 
## Data dengan n = 150 
##     n Sigma^2  Mean_phi         Bias     Sd_phi
## 1 150       1 0.4984056 -0.001594417 0.07223779
## 2 150      15 0.4863713 -0.013628653 0.07810199
## 3 150      40 0.4862145 -0.013785483 0.07339715
## == == == == == == == == == == == == == == == == == == == == == == == == == 
## 
## Data dengan n = 300 
##     n Sigma^2  Mean_phi         Bias     Sd_phi
## 1 300       1 0.4981912 -0.001808805 0.05056263
## 2 300      15 0.4968725 -0.003127465 0.05564830
## 3 300      40 0.4913927 -0.008607294 0.05578195
## == == == == == == == == == == == == == == == == == == == == == == == == ==

Kondisi ini menunjukan bahwa semakin besar ukuran sampel maka estimasi parameter \(\phi\) semakin tidak bervariasi (konsisten).

# Pemisahan data berdasarkan sigma
for (b in sigma_values) {
  cat("Data dengan sigma^2 =", b, "\n" , sep = " ")
  Data_s <- hasil %>% filter(`Sigma^2` == b) %>% arrange(n) 
  print(Data_s)
  cat(rep("==", 25), "\n\n")
}
## Data dengan sigma^2 = 1 
##     n Sigma^2  Mean_phi         Bias     Sd_phi
## 1  30       1 0.4839320 -0.016067992 0.15742355
## 2 150       1 0.4984056 -0.001594417 0.07223779
## 3 300       1 0.4981912 -0.001808805 0.05056263
## == == == == == == == == == == == == == == == == == == == == == == == == == 
## 
## Data dengan sigma^2 = 15 
##     n Sigma^2  Mean_phi         Bias     Sd_phi
## 1  30      15 0.4632481 -0.036751868 0.17610256
## 2 150      15 0.4863713 -0.013628653 0.07810199
## 3 300      15 0.4968725 -0.003127465 0.05564830
## == == == == == == == == == == == == == == == == == == == == == == == == == 
## 
## Data dengan sigma^2 = 40 
##     n Sigma^2  Mean_phi         Bias     Sd_phi
## 1  30      40 0.4941948 -0.005805200 0.16421097
## 2 150      40 0.4862145 -0.013785483 0.07339715
## 3 300      40 0.4913927 -0.008607294 0.05578195
## == == == == == == == == == == == == == == == == == == == == == == == == ==
# Visualisasi perbandingan bias untuk setiap n
ggplot(data = hasil, aes(x = `Sigma^2`, y = Bias, color = factor(n), group = n)) + 
  geom_line(size = 1) +
  geom_point(size = 2) +
  theme_classic() +
  labs(
    title = "Perbandingan Bias Untuk Setiap n",
    x = "Sigma^2",
    y = "Bias",
    color = "n:"
  ) +
  theme(
    plot.title = element_text(hjust = 0.5, size = 14, face = "bold")
  )
## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
## ℹ Please use `linewidth` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.

# Visualisasi perbandingan bias untuk setiap sigma^2
ggplot(data = hasil, aes(x = n, y = Bias, color = factor(`Sigma^2`), group = `Sigma^2`)) + 
  geom_line(size = 1) +
  geom_point(size = 2) +
  theme_classic() +
  labs(
    title = "Perbandingan Bias Untuk Setiap Sigma^2",
    x = "n",
    y = "Bias",
    color = "Sigma^2:"
  ) +
  theme(
    plot.title = element_text(hjust = 0.5, size = 14, face = "bold")
  )

Interaksi Antara n dan σ²

Hasil simulasi menunjukkan adanya interaksi antara ukuran sampel dan variansi error:

Hal ini menandakan bahwa kestabilan estimasi parameter dipengaruhi secara simultan oleh ukuran sampel dan variansi error.

Kesimpulan

Berdasarkan hasil simulasi estimasi parameter autoregressive (\(\phi\)) pada model ARIMA(1,1,0), diperoleh beberapa kesimpulan sebagai berikut:

  1. Estimator parameter \(\phi\) menunjukkan bias yang kecil dan mendekati nol pada seluruh skenario, sehingga dapat dikatakan bahwa estimator bersifat mendekati tidak bias.

  2. Ukuran sampel (n) memiliki pengaruh yang signifikan terhadap kestabilan estimasi, dimana semakin besar ukuran sampel, variansi estimasi semakin kecil dan hasil estimasi semakin konsisten.

  3. Variansi error (\(\sigma^2\)) berpengaruh terhadap variansi estimasi, namun pengaruh tersebut tidak selalu terlihat secara konsisten pada ukuran sampel kecil karena tingginya variasi hasil estimasi. Pengaruh variansi error terhadap kestabilan estimasi lebih jelas terlihat pada ukuran sampel yang lebih besar, ketika variasi akibat keterbatasan data telah berkurang.

  4. Terdapat interaksi antara ukuran sampel dan variansi error dalam mempengaruhi kualitas estimasi parameter, dimana ukuran sampel yang besar mampu mengurangi dampak variansi error (\(\sigma^2\)) terhadap hasil estimasi.