Frankel Wei Regression for 2010-2016
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
## if fxregime is absent from installed packages, download it and load it | |
if(!require('fxregime')){ | |
install.packages("fxregime") | |
} | |
## load package | |
library("fxregime") | |
# load the necessary data related to exchange rates - 'FXRatesCHF' | |
# this dataset treats CHF as unit currency | |
# install / load Quandl | |
if(!require('Quandl')){ | |
install.packages("Quandl") | |
} | |
library(Quandl) | |
# Extract and load currency data series with respect to CHF from Quandl | |
# Extract data series from Quandl. Each Quandl user will have unique api_key | |
# upon signing up. The freemium version allows access up to 10 fx rate data sets | |
# USDCHF <- Quandl("CUR/CHF", api_key="p2GsFxccPGFSw7n1-NF9") | |
# write.csv(USDCHF, file = "USDCHF.csv") | |
# USDCNY <- Quandl("CUR/CNY", api_key="p2GsFxccPGFSw7n1-NF9") | |
# write.csv(USDCNY, file = "USDCNY.csv") | |
# USDJPY <- Quandl("CUR/JPY", api_key="p2GsFxccPGFSw7n1-NF9") | |
# write.csv(USDJPY, file = "USDJPY.csv") | |
# USDEUR <- Quandl("CUR/EUR", api_key="p2GsFxccPGFSw7n1-NF9") | |
# write.csv(USDEUR, file = "USDEUR.csv") | |
# USDGBP <- Quandl("CUR/GBP", api_key="p2GsFxccPGFSw7n1-NF9") | |
# write.csv(USDGBP, file = "USDGBP.csv") | |
# load the data sets into R | |
USDCHF <- read.csv("G:/China's Economic Woes/USDCHF.csv") | |
USDCHF <- USDCHF[,2:3] | |
USDCNY <- read.csv("G:/China's Economic Woes/USDCNY.csv") | |
USDCNY <- USDCNY[,2:3] | |
USDEUR <- read.csv("G:/China's Economic Woes/USDEUR.csv") | |
USDEUR <- USDEUR[,2:3] | |
USDGBP <- read.csv("G:/China's Economic Woes/USDGBP.csv") | |
USDGBP <- USDGBP[,2:3] | |
USDJPY <- read.csv("G:/China's Economic Woes/USDJPY.csv") | |
USDJPY <- USDJPY[,2:3] | |
start = 1 # corresponds to 2016-05-12 | |
end = 2272 # corresponds to 2010-02-12 | |
dates <- as.Date(USDCHF[start:end,1]) | |
USD <- 1/USDCHF[start:end,2] | |
CNY <- USDCNY[start:end,2]/USD | |
JPY <- USDJPY[start:end,2]/USD | |
EUR <- USDEUR[start:end,2]/USD | |
GBP <- USDGBP[start:end,2]/USD | |
# reverse the order of the vectors to reflect dates from 2005 - 2010 instead of | |
# the other way around | |
USD <- USD[length(USD):1] | |
CNY <- CNY[length(CNY):1] | |
JPY <- JPY[length(JPY):1] | |
EUR <- EUR[length(EUR):1] | |
GBP <- GBP[length(GBP):1] | |
dates <- dates[length(dates):1] | |
df <- data.frame(CNY, USD, JPY, EUR, GBP) | |
df$weekday <- weekdays(dates) | |
row.names(df) <- dates | |
df <- subset(df, weekday != 'Sunday') | |
df <- subset(df, weekday != 'Saturday') | |
df <- df[,1:5] | |
zoo_df <- as.zoo(df) | |
# Code to replicate analysis | |
cny_rep <- fxreturns("CNY", data = zoo_df, frequency = "daily", | |
other = c("USD", "JPY", "EUR", "GBP")) | |
time(cny_rep) <- as.Date(row.names(df)[2:1627]) | |
regx_rep <- fxregimes(CNY ~ USD + JPY + EUR + GBP, | |
data = cny_rep, h = 100, breaks = 10, ic = "BIC") | |
summary(regx_rep) | |
## minimum BIC is attained for 2-segment (5-break) model | |
plot(regx_rep) | |
round(coef(regx_rep), digits = 3) | |
sqrt(coef(regx_rep)[, "(Variance)"]) | |
## inspect associated confidence intervals | |
cit_rep <- confint(regx_rep, level = 0.9) | |
breakdates(cit_rep) | |
## plot LM statistics along with confidence interval | |
flm_rep <- fxlm(CNY ~ USD + JPY + EUR + GBP, data = cny_rep) | |
scus_rep <- gefp(flm_rep, fit = NULL) | |
plot(scus_rep, functional = supLM(0.1)) | |
## add lines related to breaks to your plot | |
lines(cit_rep) | |
apply(cny_rep,1,function(x) sum(is.na(x))) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment