#EE 435 Naravitch Take-Home Exam Spring 2020
setwd("/Users/naravitch/Desktop/BE/EE435")
cat(rep("\n",50))  #clear R Console
#install.packages("quantmod")  
#install.packages("fBasics") 
#install.packages("sn")  
#install.packages("PerformanceAnalytics") 
#install.packages("car") 
#install.packages("tseries")  
#install.packages("forecast")
#install.packages("fGarch")
#install.packages("vars")
#install.packages("fUnitRoots")
library(fUnitRoots)
library(vars)
library(quantmod)
library(fBasics)
library(sn)
library(PerformanceAnalytics)
library(car)
library(tseries)
library(forecast)
library(fGarch)

#Question1
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)

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")

y = log(IP)
zt = diff(y)*100

tdx = c(1:892)/12+1947
tdx1 = c(1:988)/12+1939

par (mfcol=c(2,2))
plot(tdx ,diff(log(IPDCONGD)), xlab='year',ylab= 'IPD',type = 'l')

plot(tdx ,diff(log(IPNCONGD)), xlab='year',ylab= 'IPN',type = 'l')

plot(tdx ,diff(log(IPBUSEQ)), xlab='year',ylab= 'IPB',type = 'l')

plot(tdx1 ,diff(log(IPMAT)), xlab='year',ylab= 'IPM',type = 'l')


varfit=VAR(zt,p=2)
summary(varfit)

varfit.prd <- predict(varfit, n.ahead = 15, ci = 0.90)


impresp =irf(varfit)
#plot(impresp)

fevd(varfit, start = 879 , n.ahead = 15)





#Question2
getSymbols("DOGE-USD",from="2015-01-01",to="2021-05-24")
par (mfcol=c(1,1))
rate = (`DOGE-USD`[,6])
rate = diff(log(as.numeric(rate)))
ts.plot(rate)
rate1 = na.omit(rate)
ts.plot(rate1)
acf(rate1)
pacf(rate1)
basicStats(rate1)

acf(rate1^2)
Box.test(rate^2, lag=10,type='Ljung')

auto.arima(rate1)
m1 <- arima(rate1,order = c(3,0,3))
acf(m1$residuals^2)
Box.test(m1$residuals^2,lag=10,type = 'Ljung')
summary(m1)
predict(m1,15)

m2 <- garchFit(~garch(1,1), data=rate1, trace = FALSE)
summary(m2)
predict(m2,15)

m3 <- garchFit(~arma(3,3)+garch(1,1), data=rate1, trace = FALSE)
summary(m3)

m4 <- garchFit(~arma(3,3)+garch(2,1), data=rate1, trace = FALSE)
summary(m4)

m5 <- garchFit(~arma(3,3)+garch(2,2), data=rate1, trace = FALSE)
summary(m5)

m6 <- garchFit(~arma(3,3)+garch(2,2), data=rate1,cond.dist="std",trace = FALSE)
summary(m6)





#Question3
getSymbols("CLVMNACSCAB1GQUK",src = "FRED")
getSymbols("NAEXKP01CAQ189S",src = "FRED")
getSymbols("GDPC1",src = "FRED")
uk=CLVMNACSCAB1GQUK[21:146]
ca=NAEXKP01CAQ189S[77:202]
us=GDPC1[133:258]
da3=cbind(as.numeric(uk),as.numeric(ca),as.numeric(us))
dim(da3)
x=log(da3)
zt3=diff(x)*100
colnames(zt3)<-c("uk","ca","us")


varfit=VAR(zt3,p=2)
summary(varfit)
restrict(varfit,thres = 1.645)


impresp=irf(varfit)
plot(impresp)


fevd(varfit,n.ahead = 15)


Zt=as.data.frame(zt3)
a=Zt$uk
b=Zt$ca
c=Zt$us
m1=adfTest(a, lags = 3, type = c("ct"), title = NULL, description = NULL)
m1@test$p.value
m2=adfTest(b, lags = 3, type = c("ct"), title = NULL, description = NULL)
m2@test$p.value
m3=adfTest(c, lags = 3, type = c("ct"), title = NULL, description = NULL)
m3@test$p.value
fit <- lm(a~b+c)
summary(fit)
error <- residuals(fit)
m4=adfTest(error, lags = 3, type = c("nc"), title = NULL, description = NULL)
m4@test$p.value
#3.5
a.L.1=lag(a,k=1)
b.L.1=lag(b,k=1)
c.L.1=lag(c,k=1)
error.L.1=lag(error,k=1)
VECM <- lm(a~a.L.1+b.L.1+c.L.1+error.L.1)
summary(VECM)





