r paste0(toupper(watershed), " watershed with ", toupper(model), " and version ", medfateland_version)

Graphical evaluation

Daily

ggplot(Q_daily, aes(x=Date))+
  geom_line(aes(y = Qobs), col = "black", linewidth = 0.8)+
  geom_line(aes(y = Qunc), col = "red")+
  geom_line(aes(y = Qcal), col = "blue")+
  scale_y_continuous("Q (m3/s)")+
  theme_bw()

Monthly

ggplot(Q_monthly, aes(x=Date))+
  geom_line(aes(y = Qobs), col = "black", linewidth = 0.8)+
  geom_line(aes(y = Qunc), col = "red")+
  geom_line(aes(y = Qcal), col = "blue")+
  scale_y_continuous("Q (m3/s)")+
  theme_bw()

Goodness-of-fit

# Daily NSE
nse_daily_unc<-hydroGOF::NSE(Q_daily$Qunc,Q_daily$Qobs,na.rm=TRUE)
nse_daily_cal<-hydroGOF::NSE(Q_daily$Qcal,Q_daily$Qobs,na.rm=TRUE)

# Monthly NSE
nse_monthly_unc<-hydroGOF::NSE(Q_monthly$Qunc,Q_monthly$Qobs,na.rm=TRUE)
nse_monthly_cal<-hydroGOF::NSE(Q_monthly$Qcal,Q_monthly$Qobs,na.rm=TRUE)

# Daily KGE
KGE_daily_unc<-hydroGOF::KGE(Q_daily$Qunc,Q_daily$Qobs, s=c(1,1,1), na.rm=TRUE, method=c("2021"), 
                             out.type=c("full"), fun=NULL, 
                             epsilon.type=c("none"), 
                             epsilon.value=NA)
KGE_daily_cal<-hydroGOF::KGE(Q_daily$Qcal,Q_daily$Qobs, s=c(1,1,1), na.rm=TRUE, method=c("2021"), 
                             out.type=c("full"), fun=NULL, 
                             epsilon.type=c("none"), 
                             epsilon.value=NA)

# Monthly KGE
KGE_monthly_unc<-hydroGOF::KGE(Q_monthly$Qunc,Q_monthly$Qobs, s=c(1,1,1), na.rm=TRUE, method=c("2021"), 
                             out.type=c("full"), fun=NULL, 
                             epsilon.type=c("none"), 
                             epsilon.value=NA)
KGE_monthly_cal<-hydroGOF::KGE(Q_monthly$Qcal,Q_monthly$Qobs, s=c(1,1,1), na.rm=TRUE, method=c("2021"), 
                             out.type=c("full"), fun=NULL, 
                             epsilon.type=c("none"), 
                             epsilon.value=NA)

# Index of agreement
d_daily_unc<-hydroGOF::dr(Q_daily$Qunc,Q_daily$Qobs, na.rm = TRUE)
d_daily_cal<-hydroGOF::dr(Q_daily$Qcal,Q_daily$Qobs, na.rm = TRUE)

d_monthly_unc<-hydroGOF::dr(Q_monthly$Qunc,Q_monthly$Qobs, na.rm = TRUE)
d_monthly_cal<-hydroGOF::dr(Q_monthly$Qcal,Q_monthly$Qobs, na.rm = TRUE)

# Volumetric efficiency
ve_daily_unc<-hydroGOF::VE(Q_daily$Qunc,Q_daily$Qobs, na.rm=TRUE, fun=NULL,
                       epsilon.type=c("none"), epsilon.value=NA)
ve_daily_cal<-hydroGOF::VE(Q_daily$Qcal,Q_daily$Qobs, na.rm=TRUE, fun=NULL,
                       epsilon.type=c("none"), epsilon.value=NA)

ve_monthly_unc<-hydroGOF::VE(Q_monthly$Qunc,Q_monthly$Qobs, na.rm=TRUE, fun=NULL,
                       epsilon.type=c("none"), epsilon.value=NA)
ve_monthly_cal<-hydroGOF::VE(Q_monthly$Qcal,Q_monthly$Qobs, na.rm=TRUE, fun=NULL,
                       epsilon.type=c("none"), epsilon.value=NA)

# RMSE
rmse_daily_unc<-hydroGOF::rmse(Q_daily$Qunc,Q_daily$Qobs, na.rm=TRUE, fun=NULL,
                       epsilon.type=c("none"), epsilon.value=NA)
rmse_daily_cal<-hydroGOF::rmse(Q_daily$Qcal,Q_daily$Qobs, na.rm=TRUE, fun=NULL,
                       epsilon.type=c("none"), epsilon.value=NA)
rmse_monthly_unc<-hydroGOF::rmse(Q_monthly$Qunc,Q_monthly$Qobs, na.rm=TRUE, fun=NULL,
                       epsilon.type=c("none"), epsilon.value=NA)
rmse_monthly_cal<-hydroGOF::rmse(Q_monthly$Qcal,Q_monthly$Qobs, na.rm=TRUE, fun=NULL,
                       epsilon.type=c("none"), epsilon.value=NA)
validation_coefficients<- data.frame(Scale = c("Daily", "Daily", "Monthly", "Monthly"),
                                     Calibration =  c("Before","After","Before","After"),
                                     NSE = NA,
                                     KGE = NA,
                                     d = NA,
                                     VE = NA,
                                     RMSE = NA)

validation_coefficients$NSE[1]<-round(nse_daily_unc,3)
validation_coefficients$NSE[2]<-round(nse_daily_cal,3)
validation_coefficients$NSE[3]<-round(nse_monthly_unc,3)
validation_coefficients$NSE[4]<-round(nse_monthly_cal,3)

validation_coefficients$KGE[1]<-round(KGE_daily_unc[["KGE.value"]],3)
validation_coefficients$KGE[2]<-round(KGE_daily_cal[["KGE.value"]],3)
validation_coefficients$KGE[3]<-round(KGE_monthly_unc[["KGE.value"]],3)
validation_coefficients$KGE[4]<-round(KGE_monthly_cal[["KGE.value"]],3)

validation_coefficients$d[1]<-round(d_daily_unc,3)
validation_coefficients$d[2]<-round(d_daily_cal,3)
validation_coefficients$d[3]<-round(d_monthly_unc,3)
validation_coefficients$d[4]<-round(d_monthly_cal,3)

validation_coefficients$VE[1]<-round(ve_daily_unc,3)
validation_coefficients$VE[2]<-round(ve_daily_cal,3)
validation_coefficients$VE[3]<-round(ve_monthly_unc,3)
validation_coefficients$VE[4]<-round(ve_monthly_cal,3)

validation_coefficients$RMSE[1]<-round(rmse_daily_unc,3)
validation_coefficients$RMSE[2]<-round(rmse_daily_cal,3)
validation_coefficients$RMSE[3]<-round(rmse_monthly_unc,3)
validation_coefficients$RMSE[4]<-round(rmse_monthly_cal,3)

validation_coefficients |> 
  kbl() |>
  kable_styling()

Hydrological analysis

Density distribution

ggplot(Q_daily) +
  geom_density(aes(x=Qobs), col="black") +
  geom_density(aes(x=Qunc), col="red")+
  geom_density(aes(x=Qcal), col="blue")+
  scale_x_continuous("Daily Q (m3/s)")+
  theme_bw()

Percentiles

p = c(0.01,0.05,0.10,0.15,0.25,0.50,0.75,0.85,0.90,0.95, 0.99)
perc_df <- data.frame(Observed = quantile(Q_daily$Qobs, probs = p, na.rm=TRUE),
                      Uncalibrated = round(quantile(Q_daily$Qunc, probs = p, na.rm=TRUE),3),
                      Calibrated = round(quantile(Q_daily$Qcal, probs = p, na.rm=TRUE),3))
perc_df |> 
  kbl() |>
  kable_styling()


emf-creaf/medfateland documentation built on April 17, 2025, 5:43 a.m.