setwd("/Users/Orachai/Documents/BE/4TH YEAR 2ND SEMESTER/EE435/Take home exam")
cat(rep("\n",50))
library(quantmod) 
library(fBasics)
library(sn)
library(PerformanceAnalytics)
library(car)
library(tseries)
library(forecast)
library(fGarch)
library(fUnitRoots)
library(fGarch)
library(readxl)
#install.packages("Quandl")
library(Quandl)
#install.packages('MTS')
require(MTS)

getSymbols("IPDCONGD",src="FRED")
dim(IPDCONGD)
tail(IPDCONGD)

getSymbols("IPNCONGD",src="FRED")
dim(IPNCONGD)

getSymbols("IPBUSEQ",src="FRED")
dim(IPBUSEQ)

getSymbols("IPMAT",src="FRED")
dim(IPMAT)

#1.1
IP = cbind(as.numeric(IPDCONGD),as.numeric(IPNCONGD),as.numeric(IPBUSEQ),as.numeric(IPMAT[-c(1:96)]))
dim(IP)
colnames(IP)=c("IPD","IPN","IPB","IPM")

zt=diffM(log(IP))*100

par(mar=c(1,1,1,1))
ts.plot(zt)

MTSplot(zt)
ccm(zt)
adf=adf.test(diffM(log(as.numeric(IP))))
adf

#1.2
VARorder(zt)
m1=VAR(zt,2)
m1a = refVAR(m1,thres=1.645)
par("mar")
par(mar=c(1,1,1,1))
MTSdiag(m1a)


#1.3
detach("package:MTS", unload = TRUE)
require(vars)

varfit=VAR(zt,p=2)
summary(varfit)

impresp=irf(varfit)
plot(impresp)


#1.4
fevd(varfit,n.ahead=6)

#1.5

varfit.prd=predict(varfit,n.ahead=6,ci=0.95)

detach("package:vars", unload = TRUE)
require(MTS)
VARpred(m1a,6,orig=879)


#2

library(quantmod)
getSymbols('ETH-USD', from = "2015-01-01", to = "2021-05-24" )
`ETH-USD` = na.omit(`ETH-USD`)
prices = Ad(`ETH-USD`)

colnames(prices) = "adj_price"

rt = diff(log((prices)))
rt = na.omit(rt)

t.test(rt)
acf(rt)
acf(rt^2)
pacf(rt^2)
Box.test(rt,lag=10,type='Ljung')
Box.test(rt^2,lag=10,type='Ljung')

pacf(rt)
m1=arima(rt,order=c(0,0,2))
acf(m1$residuals^2)
Box.test(m1$residuals^2,lag=10,type='Ljung')
#THERE IS AN ARCH EFFECT

m4=garchFit(~arma(0,2)+garch(1,1),data=rt,trace=F)
summary(m4)
plot(m4)

predict(m4,6)


#3.1
require(MTS)
getSymbols("CLVMNACSCAB1GQUK",src="FRED")
getSymbols("NAEXKP01CAQ189S",src="FRED")
getSymbols("GDPC1",src="FRED")
UK=CLVMNACSCAB1GQUK[21:146]
CAN=NAEXKP01CAQ189S[77:202]
USA=GDPC1[133:258]
ts.plot(UK)
ts.plot(CAN)
ts.plot(USA)
data=cbind(as.numeric(UK),as.numeric(CAN),as.numeric(USA))
dim(data)


library(urca)
adfuk=ur.df(log(UK),type="drift",lags=2)
summary(adfuk)

adfcan=ur.df(log(CAN),type="drift",lags=2)
summary(adfcan)

adfus=ur.df(log(USA),type="drift",lags=2)
summary(adfus)


zt1=diffM(log(data))
colnames(zt1)=c("UK","CANADA","US")
VARorder(zt1)
m3=VAR(zt1,3)
m3a = refVAR(m3,thres=1.645)


par(mar=c(1,1,1,1))
MTSdiag(m3a)

#3.2
detach("package:MTS", unload = TRUE)
require(vars)


varfit1=VAR(zt1,p=3)
summary(varfit1)

impresp1=irf(varfit1)
plot(impresp1)

#3.3
fevd(varfit1,n.ahead=5)

#3.4

m1=adfTest(UK,lags = 3, type = c("ct"), title = NULL,description = NULL)
m1@test$p.value
# cannot reject p-value so this represents unitroot
m1@test$parameter
m1@test$lm


m2=adfTest(CAN,lags = 3, type = c("ct"), title = NULL,description = NULL)
m2@test$p.value
# cannot reject p-value so this represents unit root
m2@test$parameter
m2@test$lm


m3US=adfTest(USA,lags = 3, type = c("ct"), title = NULL,description = NULL)
m3US@test$p.value
# cannot reject p-value so this represents unit root
m3US@test$parameter
m3US@test$lm

m4=adfTest(diff(UK),lags = 3, type = c("c"), title = NULL,description = NULL)
m4@test$p.value
m4@test$parameter
m4@test$lm

m5=adfTest(diff(CAN),lags = 3, type = c("c"), title = NULL,description = NULL)
m5@test$p.value
m5@test$parameter
m5@test$lm

m6=adfTest(diff(USA),lags = 3, type = c("c"), title = NULL,description = NULL)
m6@test$p.value
m6@test$parameter
m6@test$lm



fit=lm(UK~USA)
summary(fit)
error=residuals(fit)
m7=adfTest(error, lags = 3, type =c("nc"), title = NULL, description = NULL)
m7@test$p.value

fit2=lm(USA~CAN)
summary(fit2)
error2=residuals(fit2)
m8=adfTest(error2, lags = 3, type =c("nc"), title = NULL, description = NULL)
m8@test$p.value

fit3=lm(CAN~UK)
summary(fit3)
error3=residuals(fit3)
m9=adfTest(error3, lags = 3, type =c("nc"), title = NULL, description = NULL)
m9@test$p.value

diff.uk=diff(UK)
diff.uk=diff.uk[2:126]
diff.canada=diff(CAN)
diff.canada=diff.canada[2:126]
diff.us=diff(USA)
diff.us=diff.us[2:126]

diff.uk.L.1=Lag(diff(UK),k=1)
diff.uk.L.1=diff.uk.L.1[2:126]
diff.canada.L.1=Lag(diff(CAN),k=1)
diff.canada.L.1=diff.canada.L.1[2:126]
diff.us.L.1=Lag(diff(USA),k=1)
diff.us.L.1=diff.us.L.1[2:126]

error.L.1 =Lag(error,k=1)
error.L.1=error.L.1[2:126]

error2.L.1=Lag(error2,k=1)
error2.L.1=error2.L.1[2:126]

error3.L.1=Lag(error3,k=1)
error3.L.1=error3.L.1[2:126]

fit4=lm(diff.uk~diff.uk.L.1+diff.us.L.1+diff.canada.L.1+error.L.1)
summary(fit4)

fit5=lm(diff.us~diff.us.L.1+diff.uk.L.1+diff.canada.L.1+error2.L.1)
summary(fit5)

fit6=lm(diff.canada~diff.canada.L.1+diff.uk.L.1+diff.us.L.1+error3.L.1)
summary(fit6)

