rm(list = ls())
source("~/OneDrive - INSEAD/SkewEllipt/Code_Update/Rfns.R")
library("data.table")
library("ggplot2")
library("psych")
## 
## Attaching package: 'psych'
## The following objects are masked from 'package:ggplot2':
## 
##     %+%, alpha
library("lintools")
library("xtable")

DF = fread("/Users/jinyuanzhang/OneDrive - INSEAD/SkewEllipt/Code_Update/CoVaR_forecast/CoVaR_output.csv")
#### Comparison between EVT and FP mthods
##### Empirical estimator for violation: Loss_stock > VaR_stock
DF[, N:=.N, by=.(firm)]
hist(DF[, list(sum( (Loss_stock > VaR99)/N )), by = .(firm)]$V1)

# hist(DF[, list(sum( (Loss_stock > VaR95)/N )), by = .(firm)]$V1)

##### Empirical estimator for violatoin: Loss_Index > CoVaR_Index given Loss_stock > VaR_stock
DF_CoVaR = DF[, C99:= ifelse(Loss_stock > VaR99,1,0)]
DF_CoVaR[C99 == 1, CoVaR_N99 := .N, by = .(firm)]
# DF_CoVaR = DF_CoVaR[!(firm %in% c(10562,66157,86868))] #10562 66157 86868
# DF_CoVaR = DF_CoVaR[CoVaR_N99 >= 5]
print(length(unique(DF_CoVaR$firm)))
## [1] 4
### EVT method 
hist(DF_CoVaR[C99==1, list(sum((Loss_Index >= CoVaR_evt99)/CoVaR_N99)), by = .(firm)]$V1)

### FP method 
hist(DF_CoVaR[C99==1, list(sum((Loss_Index >= CoVaR_fp99)/CoVaR_N99)), by = .(firm)]$V1)

DF_CoVaR[ (C99==1), list(fpcount=sum(Loss_Index >= CoVaR_fp99),evtcount = sum(Loss_Index >= CoVaR_evt99) ), by = .(firm)]
##    firm fpcount evtcount
## 1:    T       6        1
## 2:  IBM       5        1
## 3:  CTR       3        0
## 4:  HWP       3        0
#### LRuc #########
LRuc_pvalue = DF_CoVaR[C99 ==1, list(fp_LRuc = LRuc(0.01, Loss_Index >= CoVaR_fp99)$pvalue, evt_LRuc = LRuc(0.01, Loss_Index >= CoVaR_evt99)$pvalue), by = .(firm)]
LRuc_pvalue[, `:=`(p10_evt = evt_LRuc > 0.1, p05_evt = evt_LRuc > 0.05, p01_evt = evt_LRuc > 0.01, p10_fp = fp_LRuc > 0.1, p05_fp = fp_LRuc > 0.05, p01_fp = fp_LRuc > 0.01)]
print(LRuc_pvalue)
##    firm      fp_LRuc  evt_LRuc p10_evt p05_evt p01_evt p10_fp p05_fp
## 1:    T 0.0001268467 0.7918616    TRUE    TRUE    TRUE  FALSE  FALSE
## 2:  IBM 0.0022534647 0.8998699    TRUE    TRUE    TRUE  FALSE  FALSE
## 3:  CTR 0.0355750050 0.2458480    TRUE    TRUE    TRUE  FALSE  FALSE
## 4:  HWP 0.0341019204 0.2494031    TRUE    TRUE    TRUE  FALSE  FALSE
##    p01_fp
## 1:  FALSE
## 2:  FALSE
## 3:   TRUE
## 4:   TRUE
#### cct.onesided ####
#### pv.avg
fp_cct =  DF_CoVaR[C99==1, (cct.2s.VaR(r = CoVaR_fp99, x = Loss_Index , lev=0.99, hac = FALSE)$pv.avg), by = .(firm)]
colnames(fp_cct)[2] = "fp_cct"
evt_cct =  DF_CoVaR[C99==1, (cct.2s.VaR(r = CoVaR_evt99, x = Loss_Index , lev=0.99, hac = FALSE)$pv.avg), by = .(firm)]
colnames(evt_cct)[2] = "evt_cct"
cct_pvalue = merge(fp_cct, evt_cct, by = c("firm"))
cct_pvalue[, `:=`(p10_evt = evt_cct > 0.1, p05_evt = evt_cct > 0.05, p01_evt = evt_cct > 0.01, p10_fp = fp_cct > 0.1, p05_fp = fp_cct > 0.05, p01_fp = fp_cct > 0.01)]
cct_pvalue
##    firm     fp_cct      evt_cct p10_evt p05_evt p01_evt p10_fp p05_fp
## 1:  CTR 0.17467389 2.715071e-16   FALSE   FALSE   FALSE   TRUE   TRUE
## 2:  HWP 0.17282375 4.509230e-16   FALSE   FALSE   FALSE   TRUE   TRUE
## 3:  IBM 0.06294820 9.039463e-01    TRUE    TRUE    TRUE  FALSE   TRUE
## 4:    T 0.03080796 8.091661e-01    TRUE    TRUE    TRUE  FALSE  FALSE
##    p01_fp
## 1:   TRUE
## 2:   TRUE
## 3:   TRUE
## 4:   TRUE
#### pv.cond
fp_cct =  DF_CoVaR[C99==1, (cct.2s.VaR(r = CoVaR_fp99, x = Loss_Index , lev=0.99, hac = FALSE)$pv.cond), by = .(firm)]
colnames(fp_cct)[2] = "fp_cct"
evt_cct =  DF_CoVaR[C99==1, (cct.2s.VaR(r = CoVaR_evt99, x = Loss_Index , lev=0.99, hac = FALSE)$pv.cond), by = .(firm)]
colnames(evt_cct)[2] = "evt_cct"
cct_pvalue = merge(fp_cct, evt_cct, by = c("firm"))
cct_pvalue[, `:=`(p10_evt = evt_cct > 0.1, p05_evt = evt_cct > 0.05, p01_evt = evt_cct > 0.01, p10_fp = fp_cct > 0.1, p05_fp = fp_cct > 0.05, p01_fp = fp_cct > 0.01)]
cct_pvalue
##    firm     fp_cct      evt_cct p10_evt p05_evt p01_evt p10_fp p05_fp
## 1:  CTR 0.08601681 4.658886e-15   FALSE   FALSE   FALSE  FALSE   TRUE
## 2:  HWP 0.08532344 7.681205e-15   FALSE   FALSE   FALSE  FALSE   TRUE
## 3:  IBM 0.01384378 6.005478e-01    TRUE    TRUE    TRUE  FALSE  FALSE
## 4:    T 0.00454005 5.861197e-01    TRUE    TRUE    TRUE  FALSE  FALSE
##    p01_fp
## 1:   TRUE
## 2:   TRUE
## 3:   TRUE
## 4:  FALSE
## Comparative backtesting# 
com1 =  DF_CoVaR[C99==1, as.list(TLMfn.biv(r = CoVaR_evt99, rS = CoVaR_fp99,  y= Loss_Index , lev=0.99, h = 1)), by = .(firm)]
com0 =  DF_CoVaR[C99==1, as.list(TLMfn.biv(r = CoVaR_evt99, rS = CoVaR_fp99,  y= Loss_Index , lev=0.99, h = 0)), by = .(firm)]
colnames(com0)[2:5] = c("TLM01_0", "TLM05_0", "TLM10_0", "Tn_0")
colnames(com1)[2:5] = c("TLM01_1", "TLM05_1", "TLM10_1", "Tn_1")
com = merge(com0, com1, by = c("firm"))
print(com)
##    firm TLM01_0 TLM05_0 TLM10_0       Tn_0 TLM01_1 TLM05_1 TLM10_1
## 1:  CTR       1       1       1 -0.9252616       1       1       1
## 2:  HWP       1       1       2 -1.4353179       1       1       1
## 3:  IBM       1       1       1 -1.1903287       1       1       1
## 4:    T       1       1       2 -1.5121340       1       1       2
##          Tn_1
## 1: -0.8706875
## 2: -1.1674100
## 3: -0.9781751
## 4: -1.3503174
#### All  ###
red.count <- apply((com[,c(3:5, 7:9)]==0),2,"sum") #number of 0's in each column
yellow.count <- apply((com[,c(3:5, 7:9)]==1),2,"sum")  #number of 1's in each column
green.count <-  apply((com[,c(3:5, 7:9)]==2),2,"sum")  #number of 2's in each column
xtable(round(cbind(red.count[4],yellow.count[4],green.count[4])), digits = 0) ## percentage in each category
## % latex table generated in R 3.4.0 by xtable 1.8-2 package
## % Thu Dec 14 23:34:25 2017
## \begin{table}[ht]
## \centering
## \begin{tabular}{rrrr}
##   \hline
##  & 1 & 2 & 3 \\ 
##   \hline
## TLM05\_1 & 0 & 4 & 0 \\ 
##    \hline
## \end{tabular}
## \end{table}
#### Compare scores #####
c(sum((com$Tn_0< 0)),sum((com$Tn_1< 0)))
## [1] 4 4