library(tidyverse)
library(lubridate)
library(gridExtra)
# library(vars)
load(file = "data/TPU.rdata")


# for loop

commodity.names = c("豆二")

# generate commodity.names[i]_RV.csv data file in the data folder
for (i in 1:length(commodity.names)){
  
  read_csv(paste0("data/",commodity.names[i],".csv")) %>% 
    as_tibble() %>% 
    rename(date = '交易日期',prc = '收盘价') %>% 
    mutate(date = as.Date(date)) %>% 
    arrange(date) %>% 
    mutate(prc = as.numeric(prc)) %>% 
    mutate(ret_ = prc/lag(prc)-1) %>% 
    dplyr::select(date,prc,ret_) %>% 
    mutate(year = year(date),quarter = quarter(date)) %>% 
    filter(!is.na(prc)) %>% 
    group_by(year,quarter) %>%
    summarise("RV" = 252*var(ret_)) %>% 
    write_csv(file = paste0("data\\",commodity.names[i],"_RV.csv"))
    

  
  read_csv(paste0("data/",commodity.names[i],".csv")) %>% 
    as_tibble() %>% 
    rename(date = '交易日期',prc = '收盘价') %>% 
    mutate(date = as.Date(date)) %>% 
    arrange(date) %>% 
    mutate(prc = as.numeric(prc)) %>% 
    mutate(year = year(date),quarter = quarter(date)) %>% 
    filter(!is.na(prc)) %>% 
    group_by(year,quarter) %>% 
    filter(date == last(date)) %>%
    ungroup() %>% 
    mutate(return = prc/lag(prc)-1) %>% 
    mutate(LR = log(1+return)) %>% 
    dplyr::select(year,quarter,LR) %>% 
    write_csv(file = paste0("data\\",commodity.names[i],"_LR.csv"))

}

data_gpr_export <- read_csv("data/data_gpr_export.csv") # 1461 rows
OECD_plus6_industrial_production <- read_csv("data/OECD_plus6_industrial_production.csv")
TPU_china <- read_csv("data/TPU_china.csv")
TPU_US <- read_csv("data/TPU_US.csv")

data_gpr_export %>%
  dplyr::select(month,GPR) %>%
  dplyr::filter(!is.na(GPR)) %>%
  mutate(date = as.Date(month)) %>%
  mutate(year = year(date),quarter = quarter(date)) %>%
  dplyr::select(date,year,quarter,GPR) %>%
  group_by(year,quarter) %>%
  summarise(quarter_GPR = mean(GPR)) %>%
  rename(GPR = quarter_GPR) -> GPR



TPU_china %>% 
  dplyr::select(year,month,TPU) %>% 
  rename(TPU_china = TPU) %>% 
  mutate(date = as.Date(paste0(year,"-",month,"-1"))) %>% 
  mutate(quarter = quarter(date)) %>% 
  group_by(year,quarter) %>% 
  mutate(mean_TPU_china = mean(TPU_china)) %>% 
  ungroup() %>% 
  dplyr::select(year,quarter,mean_TPU_china) %>% 
  rename(TPU_china = mean_TPU_china) %>%  
  distinct() -> TPUchina

TPU_US %>% 
  dplyr::select(Date,`9. Trade policy`) %>% 
  rename(TPU_US = `9. Trade policy`) %>% 
  mutate(Date = as.Date(Date)) %>% 
  mutate(year = year(Date),quarter = quarter(Date)) %>% 
  group_by(year,quarter) %>% 
  mutate(mean_TPU_US = mean(TPU_US)) %>% 
  dplyr::select(year,quarter,mean_TPU_US) %>% 
  rename(TPU_US = mean_TPU_US) %>% 
  distinct() -> TPUUS

lct <- Sys.getlocale("LC_TIME"); Sys.setlocale("LC_TIME", "C")
## [1] "C"
zoo::as.zoo(tpu_cimpr) %>% 
  zoo::index() %>% 
  as.character() %>% 
  cbind(as.matrix(zoo::as.zoo(tpu_cimpr))) %>% 
  as.data.frame() %>% 
  rename(date = ".",tpu_cimpr = "zoo::as.zoo(tpu_cimpr)") %>% 
  as_tibble() %>% 
  mutate(date = paste0(date," 1")) %>% 
  mutate(date = as.Date(date,tryFormats = "%b %Y %d")) %>% 
  mutate(year = year(date),quarter = quarter(date)) %>% 
  mutate(tpu_cimpr = as.numeric(tpu_cimpr)) %>% 
  group_by(year,quarter) %>% 
  mutate(mean_tpu_cimpr = mean(tpu_cimpr)) %>% 
  dplyr::select(year,quarter,mean_tpu_cimpr) %>% 
  rename(tpu_cimpr = mean_tpu_cimpr) %>% 
  distinct() %>%   
  dplyr::select(year,quarter,tpu_cimpr) -> tpu_cimpr
# read_csv("data/gdp.csv") 
read_csv("data/gdp.csv") %>%
  mutate(date = as.Date(date)) %>% 
  mutate(year = year(date),quarter = quarter(date)) %>% 
  rename(log_gdp_index = 'log gdp index') %>%
  rename(gdp_qtr_to_qtr = '国内生产总值环比增长速度(%)') %>% 
  mutate(gdp_qtr_to_qtr = as.numeric(gdp_qtr_to_qtr)) %>% 
  dplyr::select(year,quarter,log_gdp_index,gdp_qtr_to_qtr) -> GDP
## Rows: 44 Columns: 4
## -- Column specification --------------------------------------------------------
## Delimiter: ","
## chr (2): date, 国内生产总值环比增长速度(%)
## dbl (2): gdp index, log gdp index
## 
## i Use `spec()` to retrieve the full column specification for this data.
## i Specify the column types or set `show_col_types = FALSE` to quiet this message.
## Warning in mask$eval_all_mutate(quo): 强制改变过程中产生了NA
GDP
## # A tibble: 44 x 4
##     year quarter log_gdp_index gdp_qtr_to_qtr
##    <dbl>   <int>         <dbl>          <dbl>
##  1  2010       4        0                NA  
##  2  2011       1        0.0107            2.5
##  3  2011       2        0.0202            2.2
##  4  2011       3        0.0283            1.9
##  5  2011       4        0.0348            1.5
##  6  2012       1        0.0421            1.7
##  7  2012       2        0.0520            2.3
##  8  2012       3        0.0602            1.9
##  9  2012       4        0.0684            1.9
## 10  2013       1        0.0765            1.9
## # ... with 34 more rows
# GDP
# merge data
c("豆二")
## [1] "豆二"
read_csv(paste0("data\\","豆二","_LR.csv")) %>% 
  rename(LR_豆二 = LR) %>% 
  full_join(read_csv(paste0("data\\","豆二","_RV.csv"))) %>% 
  rename(RV_豆二 = RV) %>% 
  full_join(GPR) %>% 
  full_join(GDP) %>% 
  full_join(TPUchina) %>% 
  full_join(TPUUS) %>%
  full_join(tpu_cimpr) %>%
  mutate(LGPR = log(GPR)) %>%
  dplyr::filter(year>=2011) %>% 
  mutate(Log_TPU_china = log(1+TPU_china),Log_TPU_US = log(1+TPU_US),Log_TPU_cimpr = log(1+tpu_cimpr)) %>% 
  arrange(year,quarter) -> data
ggplot_IRF <- function(data = data,commodity_type = commodity_type,ortho = ...,gdp = ...){
  
  # test if the model is stationary
  
  if(gdp == "log_gdp_index"){
    data[c("year","quarter","LGPR","log_gdp_index","TPU_china","TPU_US","tpu_cimpr",paste0("LR_",commodity_type),paste0("RV_",commodity_type))] %>% 
      rename(gdp = log_gdp_index) ->data
  }
  else if(gdp == "gdp_qtr_to_qtr"){
    data[c("year","quarter","LGPR","gdp_qtr_to_qtr","TPU_china","TPU_US","tpu_cimpr",paste0("LR_",commodity_type),paste0("RV_",commodity_type))] %>% 
      rename(gdp = gdp_qtr_to_qtr) ->data
  }


  data %>%
    filter(!is.na(LGPR)) %>%
    filter(!is.na(gdp)) %>%
    filter(!is.na(TPU_china)) %>%
    filter(!is.na(TPU_US)) %>%
    filter(!is.na(tpu_cimpr)) %>%
    filter(year<=2019) -> data
  

obj1 <- vars::irf(vars::VAR(data[c("gdp",paste0("LR_",commodity_type),paste0("RV_",commodity_type),"LGPR","TPU_china")],p = 1),impulse = "TPU_china", response = paste0("RV_",commodity_type),n.ahead = 8, ortho = ortho,boot = TRUE,runs = 1000)

obj2 <- vars::irf(vars::VAR(data[c("gdp",paste0("LR_",commodity_type),paste0("RV_",commodity_type),"LGPR","TPU_US")],p = 1),impulse = "TPU_US", response = paste0("RV_",commodity_type),n.ahead = 8, ortho = ortho,boot = TRUE,runs = 1000)

obj3 <- vars::irf(vars::VAR(data[c("gdp",paste0("LR_",commodity_type),paste0("RV_",commodity_type),"LGPR","tpu_cimpr")],p = 1),impulse = "tpu_cimpr", response = paste0("RV_",commodity_type),n.ahead = 8, ortho = ortho,boot = TRUE,runs = 1000)


  
  
obj1$irf %>%
  as.data.frame() %>% 
  cbind(Lower = as.data.frame(obj1$Lower)) %>% 
  cbind(Upper = as.data.frame(obj1$Upper)) %>% 
  cbind(period = 0:8) -> df1
colnames(df1) <- c("estimate","lower","upper","period")

df1 %>% 
  ggplot()+
  geom_line(aes(x = period,y = estimate),colour = "blue")+
  geom_line(aes(x = period,y = lower),linetype = 2,colour = "red")+
  geom_line(aes(x = period,y = upper),linetype = 2,colour = "red")+
  ggtitle(paste0("Impulse:",obj1$impulse))+
  theme(plot.title = element_text(hjust = 0.5))+
  theme(legend.position = "bottom")+
  ylab(paste0("RV_",commodity_type))+
  theme_classic()+
  geom_hline(yintercept = 0) -> p1

obj2$irf %>%
  as.data.frame() %>% 
  cbind(Lower = as.data.frame(obj2$Lower)) %>% 
  cbind(Upper = as.data.frame(obj2$Upper)) %>% 
  cbind(period = 0:8) -> df2
colnames(df2) <- c("estimate","lower","upper","period")

df2 %>% 
  ggplot()+
  geom_line(aes(x = period,y = estimate),colour = "blue")+
  geom_line(aes(x = period,y = lower),linetype = 2,colour = "red")+
  geom_line(aes(x = period,y = upper),linetype = 2,colour = "red")+
  ggtitle(paste0("Impulse:",obj2$impulse),subtitle = paste0("ortho=",ortho))+
  theme(plot.title = element_text(hjust = 0.5))+
  # theme(legend.position = "bottom")+
  ylab(paste0("RV_",commodity_type))+
  theme_classic()+
  geom_hline(yintercept = 0) -> p2


obj3$irf %>%
  as.data.frame() %>% 
  cbind(Lower = as.data.frame(obj3$Lower)) %>% 
  cbind(Upper = as.data.frame(obj3$Upper)) %>% 
  cbind(period = 0:8) -> df3
colnames(df3) <- c("estimate","lower","upper","period")

df3 %>% 
  ggplot()+
  geom_line(aes(x = period,y = estimate),colour = "blue")+
  geom_line(aes(x = period,y = lower),linetype = 2,colour = "red")+
  geom_line(aes(x = period,y = upper),linetype = 2,colour = "red")+
  ggtitle(paste0("Impulse:",obj3$impulse))+
  theme(plot.title = element_text(hjust = 0.5))+
  theme(legend.position = "bottom")+
  ylab(paste0("RV_",commodity_type))+
  theme_classic()+
  geom_hline(yintercept = 0) -> p3

  return(gridExtra::grid.arrange(p1,p2,p3, ncol = 3))
}
# baseline
# ortho


ggplot_IRF(data = data,commodity_type = "豆二",ortho = F,gdp = "gdp_qtr_to_qtr")

ggplot_IRF(data = data,commodity_type = "豆二",ortho = T,gdp = "gdp_qtr_to_qtr")

ggplot_IRF(data = data,commodity_type = "豆二",ortho = F,gdp = "log_gdp_index")

ggplot_IRF(data = data,commodity_type = "豆二",ortho = T,gdp = "log_gdp_index")

data %>% 
  filter(year<=2017) -> data

ggplot_IRF(data = data,commodity_type = "豆二",ortho = F,gdp = "gdp_qtr_to_qtr")

ggplot_IRF(data = data,commodity_type = "豆二",ortho = T,gdp = "gdp_qtr_to_qtr")

ggplot_IRF(data = data,commodity_type = "豆二",ortho = F,gdp = "log_gdp_index")

ggplot_IRF(data = data,commodity_type = "豆二",ortho = T,gdp = "log_gdp_index")