R05 STA1341 - AR, MA, dan ARMA

2022-09-16

Package

library(tseries)
library(forecast)
library(TTR)
library(TSA)

MODEL MA (1)

Membangkitkan Data dari Model MA(1)

#1. MANUAL: membangkitkan data dari distribusi normal dan membuat fungsi dari model 
#2. ARIMA.SIM

#--------------MA(1) dengan theta 0.9---------------#
#---MANUAL---#
set.seed(11)
e = rnorm(100,0,1) #membangkitkan 100 data dengan nilai tengah 0 dan ragam 1
n = length(e)
theta = 0.9

y.ma1 = c(1:n) 
for (i in 2:n){y.ma1[i]= e[i] - theta*e[i-1]} #membuat fungsi dari model MA(1)

Eksplorasi Data - Stasioneritas Data

#Plot time series
plot(y.ma1,
     col = "navyblue",
     lwd = 1,
     type = "o",
     xlab = "Time",
     ylab = "Data",
     main = "MA(1) dengan theta 0.9")

#Plot ACF dan PACF
acf(y.ma1, lag.max = 20, main = "MA(1) dengan theta 0.9") #cutoff di lag ke-1, korelasinya negatif saat lag ke-1

pacf(y.ma1, lag.max = 20, main = "MA(1) dengan theta 0.9") #tail off

eacf(y.ma1)
## AR/MA
##   0 1 2 3 4 5 6 7 8 9 10 11 12 13
## 0 x o o o o o o o o o o  o  o  o 
## 1 x x o o o o o o o o o  o  o  o 
## 2 x o x o o o o o o o o  o  o  o 
## 3 x x x o o o o o o o o  o  o  o 
## 4 x x x o o o o o o o o  o  o  o 
## 5 x x o x o o o o o o o  o  o  o 
## 6 x x o o o o o o o o o  o  o  o 
## 7 x x o o o o x o o o o  o  o  o
#Uji stasioneritas
library(tseries)
adf.test(y.ma1) #stasioner
## Warning in adf.test(y.ma1): p-value smaller than printed p-value
## 
##  Augmented Dickey-Fuller Test
## 
## data:  y.ma1
## Dickey-Fuller = -8.0896, Lag order = 4, p-value = 0.01
## alternative hypothesis: stationary
#Plot y vs y-1
lag1 =  y.ma1[-100]
yma1_1 = c(NA, lag1)
plot(yma1_1, y.ma1) #korelasi negatif

#Plot y vs y-2
lag2 = y.ma1[-c(99:100)]
yma1_2 = c(rep(NA,2),lag2)
plot(yma1_2,y.ma1) #menyebar

Membangkitkan MA(1) dengan ARIMA.SIM

#---ARIMA.SIM---#
set.seed(99)
ma1_sim <- arima.sim(list(order = c(0,0,1), ma = 0.9), n = 100) 
#0: ordo AR
#0: asumsikan data sudah stasioner
#1: ordo MA

Eksplorasi Data - Stasioneritas Data

#Plot time series
plot(ma1_sim,
     col = "navyblue",
     lwd = 1,
     type = "o",
     xlab = "Time",
     ylab = "Data",
     main = "MA(1) dengan theta 0.9")

#Uji stasioneritas
adf.test(ma1_sim)
## 
##  Augmented Dickey-Fuller Test
## 
## data:  ma1_sim
## Dickey-Fuller = -3.4873, Lag order = 4, p-value = 0.04676
## alternative hypothesis: stationary
#Plot ACF dan PACF
acf(ma1_sim, lag.max = 20, main = "MA(1) dengan theta 0.9") #cutoff di lag ke-1, korelasinya positif saat lag ke-1

pacf(ma1_sim, lag.max = 20, main = "MA(1) dengan theta 0.9") #tail off

eacf(ma1_sim)
## AR/MA
##   0 1 2 3 4 5 6 7 8 9 10 11 12 13
## 0 x o o o o o o o x o o  o  o  o 
## 1 x x o o o o o o o o o  o  o  o 
## 2 x x o o o o o o o o o  o  o  o 
## 3 x o x o o o o o o o o  o  o  o 
## 4 x x x o o o o o o o o  o  o  o 
## 5 x x o o o o o o o o o  o  o  o 
## 6 x o o o x x o o o o o  o  o  o 
## 7 x o o x o o o o o o o  o  o  o

MODEL MA (2)

Membangkitkan Data dari Model MA(2)

#--------------MA(2) dengan theta1=1 dan theta2=-0.6 ---------------#
#---MANUAL---#
set.seed(77)
e = rnorm(100,0,1)
n = length(e)
theta1 = 1
theta2 = -0.6

y.ma2=c(1:n)
for (i in 3:n){y.ma2[i]= e[i] - theta1*e[i-1] - theta2*e[i-2]} #membuat fungsi dari model MA(2)

Eksplorasi Data - Stasioneritas Data

#Plot time series
plot(y.ma2,
     col = "navyblue",
     lwd = 1,
     type = "o",
     xlab = "Time",
     ylab = "Data",
     main = "MA(2) dengan theta1=1 dan theta2=-0.6")

#Uji stasioneritas
adf.test(y.ma2)
## Warning in adf.test(y.ma2): p-value smaller than printed p-value
## 
##  Augmented Dickey-Fuller Test
## 
## data:  y.ma2
## Dickey-Fuller = -4.8452, Lag order = 4, p-value = 0.01
## alternative hypothesis: stationary
#Plot ACF dan PACF
acf(y.ma2, lag.max = 20, main = "MA(2) dengan theta1=1 dan theta2=-0.6") #cutoff di lag ke-2

pacf(y.ma2, lag.max = 20, main = "MA(2) dengan theta1=1 dan theta2=-0.6") #tail off

eacf(y.ma2)
## AR/MA
##   0 1 2 3 4 5 6 7 8 9 10 11 12 13
## 0 x o o o o o o o o o o  o  o  o 
## 1 x o o o o o o o o o o  o  o  o 
## 2 x o x x o o o o o o o  o  o  o 
## 3 x x x o o o o o o o o  o  o  o 
## 4 x o x o o o o o o o o  o  o  o 
## 5 x o x o o o x o o o o  o  o  o 
## 6 x x x o o o x o o o o  o  o  o 
## 7 x x o x o o o o o o o  o  o  o
#Plot y vs y-1
lag1 =  y.ma2[-100]
yma2_1 = c(rep(NA,1),lag1)
plot(yma2_1, y.ma2) #korelasi negatif

#Plot y vs y-2
lag2=y.ma2[-c(99:100)]
yma2_2=c(rep(NA,2),lag2)
plot(yma2_2,y.ma2) #korelasi positif

#Plot y vs y-3
lag3=y.ma2[-c(98:100)]
yma2_3=c(rep(NA,3),lag3)
plot(yma2_3,y.ma2) #menyebar

Membangkitkan MA(2) dengan ARIMA.SIM

#---ARIMA.SIM---#
set.seed(999)
ma2_sim <- arima.sim(list(order = c(0,0,2), ma = c(1,-0.6)), n = 100)
#0: ordo AR
#0: asumsikan data sudah stasioner
#2: ordo MA

Eksplorasi Data - Stasioneritas Data

#Plot time series
plot(ma2_sim,
     col = "navyblue",
     lwd = 1,
     type = "o",
     xlab = "Time",
     ylab = "Data",
     main = "MA(2) dengan theta1=1 dan theta2=-0.6")

#Uji stasioneritas
adf.test(ma2_sim)
## Warning in adf.test(ma2_sim): p-value smaller than printed p-value
## 
##  Augmented Dickey-Fuller Test
## 
## data:  ma2_sim
## Dickey-Fuller = -5.7204, Lag order = 4, p-value = 0.01
## alternative hypothesis: stationary
#Plot ACF dan PACF
acf(ma2_sim, lag.max = 20, main = "MA(2) dengan theta1=1 dan theta2=-0.6") #cutoff di lag ke-2

pacf(ma2_sim, lag.max = 20, main = "MA(2) dengan theta1=1 dan theta2=-0.6") #tail off

eacf(ma2_sim)
## AR/MA
##   0 1 2 3 4 5 6 7 8 9 10 11 12 13
## 0 o x o o o x o o o o o  o  o  o 
## 1 x x o o o o x o o o o  o  o  o 
## 2 x x o o o o o o o o o  o  o  o 
## 3 x o o o o o o o o o o  o  o  o 
## 4 x o o x o o o o o o o  o  o  o 
## 5 x o x x o o o o o o o  o  o  o 
## 6 x o o x o x o o o x o  o  o  o 
## 7 x x o x o o o o o o o  o  o  o

MODEL AR(1)

Membangkitkan Data dari Model AR(1)

#--------------AR(1) dengan phi 0.9---------------#
#---MANUAL---#
set.seed(11)
e = rnorm(100,0,1) 
n = length(e)
phi = 0.9

y.ar1 = c(1:n) 
for (i in 2:n){y.ar1[i]= phi*y.ar1[i-1]+e[i]} #membuat fungsi dari model AR(1)

Eksplorasi Data - Stasioneritas Data

#Plot time series
plot(y.ar1,
     col = "navyblue",
     lwd = 1,
     type = "o",
     xlab = "Time",
     ylab = "Data",
     main = "AR(1) dengan phi 0.9")

#Plot ACF dan PACF
acf(y.ar1, lag.max = 20, main = "AR(1) dengan phi 0.9") #tail off

pacf(y.ar1, lag.max = 20, main = "AR(1) dengan phi 0.9") #cut off di lag ke-1

eacf(y.ar1)
## AR/MA
##   0 1 2 3 4 5 6 7 8 9 10 11 12 13
## 0 x x x x x x x x x x x  x  x  x 
## 1 o o o o o o o o o o o  o  o  o 
## 2 x x o o o o o o o o o  o  o  o 
## 3 o o o o o o o o o o o  o  o  o 
## 4 x o x o o o o o o o o  o  o  o 
## 5 o o o o o o o o o o o  o  o  o 
## 6 x o o o o o o o o o o  o  o  o 
## 7 x x o o o o o o o o o  o  o  o
#Plot y vs y-1
lag1 = y.ar1[-100]
yar1_1 = c(NA,lag1)
plot(yar1_1, y.ar1) #korelasi positif

#Plot y vs y-2
lag2 = y.ar1[-c(99:100)]
yar1_2 = c(rep(NA,2),lag2)
plot(yar1_2,y.ar1) #korelasi positif

#Plot y vs y-3
lag3 = y.ar1[-c(98:100)]
yar1_3 = c(rep(NA,3),lag3)
plot(yar1_3,y.ar1) #korelasi positif

Membangkitkan AR(1) dengan ARIMA.SIM

#---ARIMA.SIM---#
set.seed(22)
ar1_sim <- arima.sim(list(order = c(1,0,0), ar = 0.9), n = 100) 
#1: ordo AR
#0: asumsikan data sudah stasioner
#0: ordo MA

Eksplorasi Data - Stasioneritas Data

#Plot time series
plot(ar1_sim,
     col = "navyblue",
     lwd = 1,
     type = "o",
     xlab = "Time",
     ylab = "Data",
     main = "AR(1) dengan phi 0.9")

#Plot ACF
acf(ar1_sim, lag.max = 20, main = "AR(1) dengan phi 0.9") #tail off

pacf(ar1_sim, lag.max = 20, main = "AR(1) dengan phi 0.9") #cutoff di lag ke-1

eacf(ar1_sim)
## AR/MA
##   0 1 2 3 4 5 6 7 8 9 10 11 12 13
## 0 x x x x x x x x x x x  x  x  x 
## 1 o o o o o o o x o o o  x  o  o 
## 2 x x o o o o o x o o o  o  o  o 
## 3 x x o o o o o x o o o  o  o  o 
## 4 x o x o o o o x o o o  o  o  o 
## 5 x o o o o o o o o o o  o  o  o 
## 6 x x o o o o o o o o o  o  o  o 
## 7 o o x o o x o o o o o  o  o  o

MODEL AR(2)

Membangkitkan Data dari Model AR(2)

#--------------AR(2) dengan phi1=0.5 dan phi2=0.25 ---------------#
#---MANUAL---#
set.seed(33)
e = rnorm(100,0,1)
n = length(e)
phi1 = 0.5
phi2 = 0.25

y.ar2=c(1:n)
for (i in 3:n){y.ar2[i] = phi1*y.ar2[i-1]+phi2*y.ar2[i-2]+e[i]} #membuat fungsi dari model AR(2)

Eksplorasi Data - Stasioneritas Data

#Plot time series
plot(y.ar2,
     col = "navyblue",
     lwd = 1,
     type = "o",
     xlab = "Time",
     ylab = "Data",
     main = "AR(2) dengan phi1=0.5 dan phi2=0.25")

#Plot ACF
acf(y.ar2, lag.max = 20, main = "AR(2) dengan phi1=0.5 dan phi2=0.25") #tail off

pacf(y.ar2, lag.max = 20, main = "AR(2) dengan phi1=0.5 dan phi2=0.25") #cutoff di lag ke-2

eacf(y.ar2)
## AR/MA
##   0 1 2 3 4 5 6 7 8 9 10 11 12 13
## 0 x x x x x o x o o o o  o  o  o 
## 1 x o o o x x o o o o o  o  o  o 
## 2 x x o o x o o o o o o  o  o  o 
## 3 x o o o x o o o o o o  o  o  o 
## 4 x o o o x o o o o o o  o  o  o 
## 5 o x x x x o o o o o o  o  o  o 
## 6 o x o o x o o o o o o  o  o  o 
## 7 x o o o x o o o o o o  o  o  o
#Plot y vs y-1
lag1=  y.ar2[-100]
yar2_1 = c(rep(NA,1),lag1)
plot(yar2_1, y.ar2) #korelasi positif

#Plot y vs y-2
lag2=y.ar2[-c(99:100)]
yar2_2=c(rep(NA,2),lag2)
plot(yar2_2,y.ar2) #korelasi positif

#Plot y vs y-3
lag3=y.ar2[-c(98:100)]
yar2_3=c(rep(NA,3),lag3)
plot(yar2_3,y.ar2) #korelasi positif

Membangkitkan AR(2) dengan ARIMA.SIM

#---ARIMA.SIM---#
set.seed(999)
ar2_sim <- arima.sim(list(order = c(2,0,0), ar =c(0.5,0.25)), n = 100)
#2: ordo AR
#0: asumsikan data sudah stasioner
#0: ordo MA

Eksplorasi Data - Stasioneritas Data

#Plot time series
plot(ar2_sim,
     col = "navyblue",
     lwd = 1,
     type = "o",
     xlab = "Time",
     ylab = "Data",
     main = "AR(2) dengan phi1=0.5 dan phi2=0.25")

#Plot ACF dan PACF
acf(ar2_sim, lag.max = 20, main = "AR(2) dengan phi1=0.5 dan phi2=0.25") #tail off

pacf(ar2_sim, lag.max = 20, main = "AR(2) dengan phi1=0.5 dan phi2=0.25") #cut off di lag ke-2

eacf(ar2_sim)
## AR/MA
##   0 1 2 3 4 5 6 7 8 9 10 11 12 13
## 0 x x x x o o o o o o o  o  o  o 
## 1 x o o o o o o o o o o  o  o  o 
## 2 x o o o o o o o o o o  o  o  o 
## 3 x x x o o o o o o o o  o  o  o 
## 4 o x x o o o o o o o o  o  o  o 
## 5 o o x o o o o o o o o  o  o  o 
## 6 x x x o o o o o o o o  o  o  o 
## 7 o o x x x o o o o o o  o  o  o

MODEL ARMA (1,1)

Membangkitkan Data dari Model ARMA(1,1)

#--------------ARMA(1,1) dengan phi1=0.8 dan theta1=0.7 ---------------#
#---MANUAL---#
set.seed(33)
e = rnorm(100,0,1)
n = length(e)
phi1 = 0.8
theta1 = 0.7

y.arma=c(1:n)
for (i in 3:n){y.arma[i] = phi1*y.arma[i-1]- theta1*e[i-1]+e[i]} #membuat fungsi dari model ARMA(1,1)

Eksplorasi Data - Stasioneritas Data

#Plot time series
plot(y.arma,
     col = "navyblue",
     lwd = 1,
     type = "o",
     xlab = "Time",
     ylab = "Data",
     main = "AR(2) dengan phi1=0.5 dan phi2=0.25")

#Plot ACF
acf(y.arma, lag.max = 20, main = "ARMA(1,1) dengan phi1=0.8 dan theta1=0.5") #tail off 

pacf(y.arma, lag.max = 20, main = "ARMA(1,1) dengan phi1=0.8 dan theta1=0.5") #cut off di lag ke-1

eacf(y.arma)
## AR/MA
##   0 1 2 3 4 5 6 7 8 9 10 11 12 13
## 0 o o o o x o o o o o o  o  o  o 
## 1 x o o o x o o o o o o  o  o  o 
## 2 x x o o x x o o o o o  o  o  o 
## 3 x o o o x x o o o o o  o  o  o 
## 4 x o o o x x o o o o o  o  o  o 
## 5 x o o o o o o o o o o  o  o  o 
## 6 x x o o o o o o o o o  o  o  o 
## 7 x x o o o o o o o o o  o  o  o

Membangkitkan ARMA(1,1) dengan ARIMA.SIM

#---ARIMA.SIM---#
set.seed(999)
arma_sim <- arima.sim(list(order = c(1,0,1), ar =0.8, ma=0.7), n = 100) 
#1: ordo AR
#0: asumsikan data sudah stasioner
#1: ordo MA

Eksplorasi Data - Stasioneritas Data

#Plot time series
plot(arma_sim,
     col = "navyblue",
     lwd = 1,
     type = "o",
     xlab = "Time",
     ylab = "Data",
     main = "AR(2) dengan phi1=0.5 dan phi2=0.25")

#Plot ACF dan PACF
acf(arma_sim, lag.max = 20, main = "ARMA(1,1) dengan phi1=0.8 dan theta1=0.5") #tail off

pacf(arma_sim, lag.max = 20, main = "AR(2) dengan phi1=0.5 dan phi2=0.25") #cut off di lag ke-2

eacf(arma_sim)
## AR/MA
##   0 1 2 3 4 5 6 7 8 9 10 11 12 13
## 0 x x x x o o o o o o o  o  o  o 
## 1 x o x o x o o o o o o  o  o  o 
## 2 x o x o o o o o o o o  o  o  o 
## 3 x x x o o o o o o o o  o  o  o 
## 4 x x x o o o o o o o o  o  o  o 
## 5 x x x o o o o o o o o  o  o  o 
## 6 x o x x x o o o o o o  o  o  o 
## 7 x x x o x o o o o o o  o  o  o