Berikut adalah bagaimana menghitung VAR dan TVPVAR dengan menggunakan R. Kita mempunyai data csv sebagai berikut:

Return <- read.csv("~/Documents/Intern_R/13-Mar/Indonesia-q1.csv")
View(Return)

Selanjutnya, kita rubah menjadi time-series data menggunakan library xts:

# memastikan jenis data disetiap kolom, date dan numerik
Return$Rupiah <- as.numeric(Return$Rupiah)
Return$Gold <- as.numeric(Return$Gold)
Return$Stock <- as.numeric(Return$Stock)
Return$Sukuk <- as.numeric(Return$Sukuk)
Return$DJ <- as.numeric(Return$DJ)
Return$Date <- as.Date(Return$Date)

library(xts)
xts_data <- xts(Return, order.by = Return$Date)
row.names(xts_data) <- xts_data$Date #membuat index dari $Date
xts_data$Date <- NULL #menghapus kolom $Date
xts_data <- na.omit(xts_data) #menghapus data NA
xts_data #print

VAR: Estimation of a VAR(p)

Fungsi VAR bekerja pada data dengan format zoo dataframe. Sehingga kita harus mengkonversinya menjadi format zoo dari xts dengan library zoo. Kemudian mengkonversi zoo data menjadi zoo dataframe.

library(zoo)
zoo_data = zoo(xts_data) #konversi data xts menjadi format zoo
zoo_data_df <- as.data.frame(zoo_data) # konversi zoo object to a dataframe
sum(is.na(zoo_data_df)) # Check for NA, harus 0

#DATA CLEANING

zoo_data_df <- data.frame(lapply(zoo_data_df, function(x) as.numeric(as.character(x)))) #Yakinkan semua variabel adalah numeric
sapply(zoo_data_df, class) # Check if there are any non-numeric columns left
sum(is.na(zoo_data_df)) # check for NAs, harus 0
zoo_data_df <- na.omit(zoo_data_df) # Removing rows with NAs
zoo_data_df

library(vars)
fit_var <- VAR(zoo_data_df, p = 1)

#Menghitung VAR dengan berbagai type
VAR(zoo_data_df, p = 1, type = "none")
VAR(zoo_data_df, p = 1, type = "const")
VAR(zoo_data_df, p = 1, type = "trend")
VAR(zoo_data_df, p = 1, type = "both")

---- Result ----
VAR Estimation Results:
=======================

Estimated coefficients for equation Rupiah:
===========================================
Call:
Rupiah = Rupiah.l1 + Gold.l1 + Stock.l1 + Sukuk.l1 + DJ.l1

Rupiah.l1 Gold.l1 Stock.l1 Sukuk.l1 DJ.l1
0.9510136 -0.3155666 -0.1504096 1.8282876 4.7401423

...
----

BayesPrior

BayesPrior bekerja dalam numeric/complex matrix/vector arguments. Fungsi membutuhkan library ConnectednessApproach.

n_obs <- nrow(coredata(zoo_data)) # check jumlah obs.
n_obs #print, harus lebih dari 1
zoo_data_numeric <- zoo(apply(zoo_data, 2, as.numeric), order.by=index(zoo_data)) # Konversi zoo_data menjadi numeric
str(zoo_data_numeric) # memastikan semua data numeric
any(is.na(zoo_data_numeric) | is.infinite(zoo_data_numeric)) # memastikan tidak ada NA, hasil FALSE
zoo_data_numeric[is.na(zoo_data_numeric)] <- 0 # kalau ada NA, isi dengan 0

library(ConnectednessApproach)
prior <- BayesPrior(zoo_data_numeric, nlag=1) # dapatkan BayesPrior

TVPVAR

TVPVAR dapat dihitung dengan menggunakan format data zoo numeric dan prior yang telah didapatkan dengan BayesPrior:

fit_tvpvar = TVPVAR(zoo_data_numeric, configuration=list(nlag=1, prior=prior, l=c(0.99,0.99)))

HedgeRatio

HedgeRatio dapat dihitung dengan format data zoo numeric dan fit_tvpvar yang telah didapatkan dengan TVPVAR:

hr = HedgeRatio(zoo_data_numeric, fit_tvpvar$B)
hr

TimeConnectedness

ca = TimeConnectedness(Phi=fit_tvpvar$B, Sigma=fit_tvpvar$Q, nfore=10, generalized=TRUE)

#plot
PlotNetwork(ca, method = "NPDC", path=NULL,threshold = 0.25)
PlotNET(ca, method = "NPDC", path=NULL,threshold = 0.25)
PlotINF(ca, method = "NPDC", path=NULL,threshold = 0.25)
PlotFROM(ca, method = "NPDC", path=NULL,threshold = 0.25)
PlotNPDC(ca, method = "NPDC", path=NULL,threshold = 0.25)

Leave a comment

I’m Eddy

Dive into my world where every page is a celebration of knowledge, particularly my fascination with computer science. Join me in this journey of exploration and learning—save the day by bookmarking knowledge that spans the breadth of computer science. Enjoy the read, and may each visit offer you something valuable to take away!


Let’s connect