# Carregando funções
source("SCRIPTS/funcoes_roli.R")
source("~/Dropbox/Dissertacao/scripts/auxs_funs.R")
# Carregando dados
data_obs <- 
  read_rds("../Dados/Dados_SM_Nov2013Set2015_1hora_posFBE.rds") %>% 
  as.tbl %>%
  select(date,Tar_fill,UR_fill,Rg_fill,Li,Le) %>%
  dplyr::rename(Ta = Tar_fill,Rg = Rg_fill, rh = UR_fill) %>%
  mutate(Rpot = Rg_Rpot(date)) %>%
  mutate(es = (rh/100) * (0.6112 * exp((17.67*Ta)/(243.5+Ta))) *10) %>%
  mutate(Ta = Ta+273.15)
## Loading required package: REddyProc
## Warning in Rg_Rpot(structure(c(1384905600, 1384909200, 1384912800,
## 1384916400, : Latitude e Longitude de Santa Maria
data_obs$K <- 
    kloudines(Rg = data_obs %>%
                  select(date,Rg) %>%
                  dplyr::rename(Rg = Rg)) %>% 
    select(K) %>% 
    unlist %>% 
    as.vector()
## Warning in kloudines(Rg = data_obs %>% select(date, Rg) %>%
## dplyr::rename(Rg = Rg)): Latitude e Longitude de Santa Maria
timePlot(data_obs %>% mutate(daytime = to.daylight(date,lon=-53.76,lat=-29.72,timezone=-4)),
         "K", type = "daytime")

sigma <- 5.669 * 10e-9
cloud_par <- c("CQB","CKC","CCB","CKZ","CWU","CJG")
nuv_par <- c("FAN","FBR","FHY","FKZ","FIJ")
aten_par  <- c("EAN","EBR","ESW","EIJ","EBT","EID","EKZ","EPR","ABM","ALH","AGB")

roli_comb <- rbind(expand.grid("-",aten_par), expand.grid(cloud_par,nuv_par) ) 
all_params <- 
lapply(1:nrow(roli_comb), function(i){ 
    # i = 3
    pars_ <-  roli_comb[i,] %>% unlist %>% as.vector 
    roli_i(data = data_obs,E_fun = pars_[2],C_fun = pars_[1])
    
}) %>% bind_cols()

tdy.roli <- 
cbind(data_obs %>% select(date,Li,Ta,es),all_params) %>%
    gather(params,value,c(-date,-Li, -Ta,-es)) %>% 
    as.tbl
tdy.roli%>%
    select(date,Li,params,value) %>%
    timePlot(c("Li","value"),type = "params", layout = c(4,11))

Seleção

Erro do instrumento

sel_params <- 
 tdy.roli %>%
    group_by(params, dia = as.Date(date)) %>%
    dplyr::summarise(obs = mean(Li, na.rm = TRUE), sim = mean(value, na.rm = TRUE)) %>%
    ungroup() %>%
    group_by(params) %>%
    dplyr::summarise(obs_avg = mean(obs, na.rm = TRUE), 
                     RMSEd = rmse( sim = sim, obs = obs, na.rm = TRUE),
                     pbias = pbias(sim = sim, obs = obs, na.rm = TRUE)
                     ) %>%
    filter(RMSEd <= obs_avg*0.1 & pbias < 5 & pbias > -5 ) %>%
    select(params) %>%
    t() %>% c()
    
sel_params
##  [1] "AGB_-"   "EID_-"   "FAN_CQB" "FBR_CCB" "FBR_CJG" "FBR_CKZ" "FBR_CQB"
##  [8] "FBR_CWU" "FHY_CCB" "FHY_CJG" "FHY_CKC" "FHY_CKZ" "FHY_CQB" "FHY_CWU"
## [15] "FIJ_CCB" "FIJ_CJG" "FIJ_CQB" "FIJ_CWU" "FKZ_CKC" "FKZ_CKZ"
tdy.dly.roli <- 
    tdy.roli %>%
    select(date,Li, params,value) %>%
    filter(params %in% sel_params) %T>% 
    timePlot(c("Li","value") , type = "params", lty = 1, col = c("red","gray50"), layout = c(4,5)) %>%
    group_by(params, dia = as.Date(date)) %>%
    dplyr::summarise(obs = mean(Li), sim = mean(value)) %>%
    ungroup() %>% dplyr::rename(date=dia) %T>%
    timePlot(c("obs","sim") , type = "params",lty = 1, col = c("red","gray25"), layout = c(4,5)) 

taylor_all <-  
    TaylorDiagram(tdy.dly.roli %>% as.data.frame(),
                  obs = "obs",mod = "sim",
                  group = "params",key.columns = 3, 
                  pch = 5:10, col = 2:7, cex = 1, 
                  main = "Série média diária da ROLi")

Atenuação

Céu claro

tdy.clr.roli <- 
tdy.roli %>%
    filter(params %in% sel_params) %>% 
    spread(params,value) %>%
    mutate(Rg = data_obs$Rg %>% as.numeric, Rpot = data_obs$Rpot %>% as.numeric) %>%
    gather(params,sim,c(-date,-Li,-Rg,-Rpot,-Ta,-es)) %>%
    dplyr::rename(obs = Li) %>%
    filter(Rpot > 0.1) %>%
    filter(Rg > 0.75*Rpot) %T>%
    timePlot(c("Rg","Rpot"),
             plot.type = "h",
             y.relation = "same", 
             yscale.components = yscale.components.subticks) 

TaylorDiagram(tdy.clr.roli %>% as.data.frame(),
                  obs = "obs",mod = "sim",
                  group = "params",key.columns = 1, 
                  pch = 5:10, col = 2:7, cex = 1, 
                  main = "Série horários de céu claro ROLi")

Céu nublado

tdy.ocst.roli <- 
tdy.roli %>%
    filter(params %in% sel_params) %>% 
    spread(params,value) %>%
    mutate(Rg = data_obs$Rg %>% as.numeric, Rpot = data_obs$Rpot %>% as.numeric) %>%
    gather(params,sim,c(-date,-Li,-Rg,-Rpot,-Ta,-es)) %>%
    dplyr::rename(obs = Li) %>%
    filter(Rpot > 0.1) %>%
    filter(Rg <= 0.75*Rpot) %T>%
    timePlot(c("Rg","Rpot"),
             plot.type = "h",
             y.relation = "same", 
             yscale.components = yscale.components.subticks) 

TaylorDiagram(tdy.ocst.roli %>% as.data.frame(),
                  obs = "obs",mod = "sim",
                  group = "params",key.columns = 1, 
                  pch = 5:10, col = 2:7, cex = 1, 
                  main = "Série horários de céu nublado ROLi")

Estação do ano

# add column with estção do ano
tdy.sly.roli <- 
tdy.roli %>%
    filter(params %in% sel_params) %>% 
    mutate(daytime = to.daylight(date,lon =-53.76, lat =  -29.72,timezone = -4)) %>%
    cutData(type = "season",hemisphere = "southern") %>%
    spread(params,value) %>%
    mutate(Rg = data_obs$Rg %>% as.numeric, Rpot = data_obs$Rpot %>% as.numeric) %>%
    gather(params,sim,c(-date,-Li,-Rg,-Rpot,-Ta,-es,-season,-daytime)) %>%
    dplyr::rename(obs = Li)
TaylorDiagram(tdy.sly.roli %>% as.data.frame(),
              obs = "obs",mod = "sim",
              group = "params",type = c("daytime","season"),
              key.columns = 1, 
              pch = 5:10, col = 2:7, cex = 1, 
              main = "Série ...",layout = c(2,4))
## 
## Using 'season' in data frame and not date-based openair version. 
## This may result in different behaviour compared with openair calculations.

Decomposição do MSE

 # Avaliação das parametrizações::
stats.roli <- eval.params(data_ = tdy.roli)

    # NSE
# stats.roli.NSE <- 
select_stats(roli_list = stats.roli,idx = "NSE")
    
    # RMSE 
# stats.roli.RMSE <- 
select_stats(roli_list = stats.roli,idx = "RMSE")
 
    # PBIAS
# stats.roli.PBIAS <- 
select_stats(roli_list = stats.roli,idx = "PBIAS %")  
## Estatística da série:
estats.roli <- 
lapply(unique(tdy.roli$params), function(i){ # i = "FBM_CQB"
    
    tdy.roli.filt <- 
        tdy.roli %>%
        filter(params == i)
    
    gof.data <- 
        gof(sim = tdy.roli.filt$value,obs = tdy.roli.filt$Li,na.rm = TRUE) %>% 
        as.data.frame() %>%
        set_names(i) 
    
}) %>% bind_cols() 

estats.roli$stats <- rownames(gof(1:10,10:1))

estats.roli %<>% 
    gather(params,value,-stats) %>%
    arrange(stats)
estats.roli %>% 
    separate(params,sep = "_",into = c("emis","aten")) %>% 
    spread(emis,value) %>% 
    filter(stats == "MAE")
tdy.roli %>%
    select(date,params,value) %>%
    group_by(day = day(date),params) %>%
    mutate_each(funs(mean),c(-date,-params)) %>%
    ungroup %>%
    ggplot( aes(x=date,y=value,colour = params)) +
    geom_line() 
# NOTAS : 
# 
sel_params <- 
 spread.tdy %>%
    group_by(params, dia = as.Date(date)) %>%
    dplyr::summarise(obs = mean(Li, na.rm = TRUE), sim = mean(value, na.rm = TRUE)) %>%
    ungroup() %>%
    group_by(params) %>%
    dplyr::summarise(obs_avg = mean(obs, na.rm = TRUE), RMSEd = rmse(sim = sim, obs = obs, na.rm = TRUE)) %>%
    filter(RMSEd <= obs_avg*0.1) %>%
    select(params) %>%
    t() %>% c()
    
    
# 
#     FAZER TAYLOR TaylorDiagram() das series estimadas
spread.tdy <- 
tdy.roli %>%
    select(date,Li,params,value) %>%
    # spread(params,value) %>%
    separate(params, into = c("emis","cloud"), sep = "_") %>%
    filter( (substr(emis,1,1) == "E" & substr(cloud,1,2) == "CQ") |  substr(emis,1,1) == "F") %>%
    unite(col = params,c(emis,cloud))
    

   taylor_all <-  TaylorDiagram(spread.tdy %>% as.data.frame(),
                  obs = "Li",mod = "value",
                  group = "params",key.columns = 3, pch = 1:25, cex = 1)
    
   new.update <- 
   spread.tdy %>% 
       group_by(params) %>%
       dplyr::summarise(pbias = hydroGOF::pbias(obs = Li,sim= value), RMSE = rmse(obs = Li,sim= value)) %>%
       dplyr::rename(MyGroupVar = params) %>%
       full_join(taylor_all$data, by = "MyGroupVar") %>%
       mutate(MyGroupVar = factor(MyGroupVar))
       
    taylor_all$data <- new.update

   
   d <- data.frame(taylor_all$data)
   scatterPlot(d, x = "pbias", y = "RMSE", cols = sample(colors(), 34) )
   
   # criterio R2 > 0.5, explica mais de 50% da variabilidade da Li obs
   by_rmse <- d %>% 
       filter(MyGroupVar %in% sel_params) %>%
       filter(R**2 >= 0.5 & (pbias < 5 & pbias > -5)) %>%
       #arrange(pbias) %>%
       arrange(RMSE)

   by_pbias <- d %>% 
       filter(MyGroupVar %in% sel_params) %>%
       filter(R**2 >= 0.5 & (pbias < 5 & pbias > -5)) %>%
       arrange(abs(pbias))
   
   by_rmse[with(by_rmse, order(abs(pbias), RMSE)), ]
   by_rmse %>% 
       mutate(pbias_abs = abs(pbias)) %>%
   doBy::orderBy(~ RMSE + pbias_abs,data = .)