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