## simple validation for value.DS
# Sys.setenv(LANGUAGE='en', LANG="en_EN.UTF-8") # switching communicates to English 

library(esd)
## Loading required package: ncdf
## Loading required package: zoo
## 
## Attaching package: 'zoo'
## 
## Następujące obiekty zostały zakryte z 'package:base':
## 
##     as.Date, as.Date.numeric
## 
## 
## Attaching package: 'esd'
## 
## Następujący obiekt został zakryty z 'package:base':
## 
##     subset.matrix
library(plotrix) # required for plotting taylor diagrams only
library(hexbin)
variab <- "tmean"
forcing <- "T2M" 

results <- readRDS(file=paste0("value.DS.ERA.",forcing,variab,".rda"))
ecad <- as.monthly(subset(readRDS(paste0("ecad.",variab,".rda")),it=1979:2008))

anomaly.ecad <-anomaly(ecad)
## Warning in min(x, na.rm = TRUE): brak argumentów w min; zwracanie wartości
## Inf
## Warning in max(x, na.rm = TRUE): brak argumentów w max; zwracanie wartości
## -Inf
## Warning in min(x, na.rm = TRUE): brak argumentów w min; zwracanie wartości
## Inf
## Warning in max(x, na.rm = TRUE): brak argumentów w max; zwracanie wartości
## -Inf
## Warning in min(x, na.rm = TRUE): brak argumentów w min; zwracanie wartości
## Inf
## Warning in min(x, na.rm = TRUE): brak argumentów w min; zwracanie wartości
## Inf
## Warning in max(x, na.rm = TRUE): brak argumentów w max; zwracanie wartości
## -Inf
## Warning in min(x, na.rm = TRUE): brak argumentów w min; zwracanie wartości
## Inf
## Warning in max(x, na.rm = TRUE): brak argumentów w max; zwracanie wartości
## -Inf
## Warning in min(x, na.rm = TRUE): brak argumentów w min; zwracanie wartości
## Inf
## Warning in min(x, na.rm = TRUE): brak argumentów w min; zwracanie wartości
## Inf
## Warning in max(x, na.rm = TRUE): brak argumentów w max; zwracanie wartości
## -Inf
## Warning in min(x, na.rm = TRUE): brak argumentów w min; zwracanie wartości
## Inf
## Warning in max(x, na.rm = TRUE): brak argumentów w max; zwracanie wartości
## -Inf
## Warning in min(x, na.rm = TRUE): brak argumentów w min; zwracanie wartości
## Inf
anomaly.results <-anomaly(results)
## Warning in min(x, na.rm = TRUE): brak argumentów w min; zwracanie wartości
## Inf
## Warning in max(x, na.rm = TRUE): brak argumentów w max; zwracanie wartości
## -Inf
## Warning in min(x, na.rm = TRUE): brak argumentów w min; zwracanie wartości
## Inf
## Warning in max(x, na.rm = TRUE): brak argumentów w max; zwracanie wartości
## -Inf
## Warning in min(x, na.rm = TRUE): brak argumentów w min; zwracanie wartości
## Inf
## Warning in min(x, na.rm = TRUE): brak argumentów w min; zwracanie wartości
## Inf
## Warning in max(x, na.rm = TRUE): brak argumentów w max; zwracanie wartości
## -Inf
## Warning in min(x, na.rm = TRUE): brak argumentów w min; zwracanie wartości
## Inf
## Warning in max(x, na.rm = TRUE): brak argumentów w max; zwracanie wartości
## -Inf
## Warning in min(x, na.rm = TRUE): brak argumentów w min; zwracanie wartości
## Inf
## Warning in min(x, na.rm = TRUE): brak argumentów w min; zwracanie wartości
## Inf
## Warning in max(x, na.rm = TRUE): brak argumentów w max; zwracanie wartości
## -Inf
## Warning in min(x, na.rm = TRUE): brak argumentów w min; zwracanie wartości
## Inf
## Warning in max(x, na.rm = TRUE): brak argumentów w max; zwracanie wartości
## -Inf
## Warning in min(x, na.rm = TRUE): brak argumentów w min; zwracanie wartości
## Inf
ecad.df <- as.data.frame(anomaly.ecad)
results.df <- as.data.frame(anomaly.results)

#corr <- round(sapply(1:ncol(ecad.df), function(i) cor(ecad.df[,i], results.df[,i],use = "pairwise.complete.obs",method = "spearman")),2)

#dev.off()
#hist(apply(ecad.df, 2, mean)-apply(results.df, 2, mean))
plot(ecad.df[,1],results.df[,1], xlim=c(-15,15), ylim=c(-15,15), col="#FF505050", main=paste0(variab,":  ","1979-2008", "\nforcing: ",forcing), xlab="ECAD", ylab="DOWNSCALED") 
abline(0,1); grid(lwd=1, col="black")
for (i in (1:ncol(ecad.df))) points(ecad.df[,i], results.df[,i], col="#0000FF20", cex=0.7, pch=19)

#dev.off()
hex <- hexbin(as.numeric(coredata(ecad)),as.numeric(coredata(results)))
plot(hex)

hist(as.numeric(unlist(ecad.df-results.df)), breaks=c(-25,-10:10,25), ylim=c(0,0.15))
abline(h=0.1)

# plotting taylor diagrams
# comparison for the whole period (1979-2008):
for (i in 1:dim(ecad.df)[2]){
  mod <- results.df[,i]
  obs <- ecad.df[,i]
  correlation <- round(cor(mod,obs,use = "pairwise.complete.obs"),3)
  bias <- round(mean(abs(mod-obs),na.rm=T),3) # mean absolute error
  rmse <- round(sqrt(mean((mod - obs)^2, na.rm=T)),3)
  station <- names(ecad.df)[i]
  if(i==1) staty <- NULL # creating empty object for storing results
  staty <- rbind(staty,cbind.data.frame(station,correlation,bias,rmse))
  
  if(i==1) taylor.diagram(obs,mod,sd.arcs = T, col="#FF005050", ref.sd = T,normalize = T, main=paste0(variab,":  ","1979-2008", "\nforcing: ",forcing))
  if(i>1) taylor.diagram(obs,mod,sd.arcs = T, col="#FF005050", add=T, normalize=T)
#  print(i) # checking progress
}

staty <- staty[with(staty, order(correlation)), ]
print(staty)
##                          station correlation  bias  rmse
## 38      BADAJOZ-TALAVERA LA REAL      -0.008 2.053 2.559
## 19                       LARISSA       0.010 2.329 2.908
## 70        SANTIAGO-DE-COMPOSTELA       0.022 2.079 2.584
## 80                MADRID-BARAJAS       0.022 2.221 2.752
## 18                         CORFU       0.033 1.890 2.341
## 20                       METHONI       0.036 1.533 1.943
## 34                      BRAGANCA       0.039 2.421 2.952
## 42 TORTOSA-OBSERVATORIO-DEL-EBRO       0.045 1.897 2.327
## 35              LISBOA-GEOFISICA       0.058 1.703 2.094
## 40                   NAVACERRADA       0.059 2.769 3.538
## 39                        MALAGA       0.071 1.314 1.650
## 79             PALMA-DE-MALLORCA       0.078 1.851 2.249
## 41         SAN-SEBASTIAN-IGUELDO       0.081 2.349 2.928
## 65              TOULOUSE-BLAGNAC       0.105 2.598 3.219
## 24                      CAGLIARI       0.107 1.778 2.209
## 23                         MILAN       0.127 2.805 3.442
## 25                 ROMA-CIAMPINO       0.127 2.099 2.560
## 13           MARSEILLE-MARIGNANE       0.132 2.335 2.918
## 59                         SIBIU       0.144 2.905 3.762
## 74                          HVAR       0.157 2.097 2.616
## 77                     CONSTANTA       0.159 2.574 3.405
## 58                  MONT-AIGOUAL       0.162 2.979 3.652
## 72                          SION       0.176 2.498 3.124
## 55                     STORNOWAY       0.183 1.462 1.832
## 26            VERONA-VILLAFRANCA       0.186 2.290 2.796
## 47                   ESKDALEMUIR       0.193 1.860 2.313
## 56                        VALLEY       0.197 1.671 2.083
## 37             BUCURESTI-BANEASA       0.198 2.686 3.491
## 50                        RENNES       0.199 2.398 2.946
## 44                        LUGANO       0.202 1.957 2.455
## 45                       SAENTIS       0.212 3.164 3.856
## 73                        GOSPIC       0.213 2.859 3.639
## 57                    WADDINGTON       0.218 2.073 2.562
## 17                     ZUGSPITZE       0.229 3.050 3.746
## 36                          ARAD       0.233 2.882 3.710
## 11                       BOURGES       0.234 2.647 3.273
## 75                       ZAVIZAN       0.234 3.020 3.743
## 4                      SONNBLICK       0.235 2.957 3.637
## 12                     PARIS-14E       0.263 2.541 3.133
## 2                      INNSBRUCK       0.273 2.679 3.320
## 46              ZUERISWITZERLAND       0.282 2.777 3.454
## 83                    OBERSTDORF       0.285 2.798 3.443
## 43               BASEL-BINNINGEN       0.286 2.705 3.408
## 7                    ZAGREB-GRIC       0.300 2.729 3.494
## 31                        VARDOE       0.300 1.953 2.488
## 78                  RHEINSTETTEN       0.305 2.745 3.505
## 15              HOHENPEISSENBERG       0.310 3.163 3.952
## 71                       JACKVIK       0.320 3.816 5.378
## 66                          IASI       0.340 3.006 3.894
## 3                       SALZBURG       0.345 2.802 3.564
## 27                      KARASJOK       0.356 4.261 5.578
## 1                           GRAZ       0.359 2.425 3.123
## 84                    REGENSBURG       0.363 2.588 3.300
## 69                       TAFJORD       0.371 2.420 3.120
## 81            GIESSEN-WETTENBERG       0.372 2.542 3.255
## 30                        UTSIRA       0.391 1.900 2.391
## 76                       BROCKEN       0.393 2.840 3.473
## 51                       FOKSTUA       0.408 2.752 3.504
## 28                KJOEREMSGRENDE       0.411 3.066 3.986
## 5                           WIEN       0.418 2.527 3.257
## 10                     SODANKYLA       0.435 3.964 5.289
## 14                        BREMEN       0.436 2.559 3.275
## 62                     HELGOLAND       0.446 2.038 2.603
## 54                     HAPARANDA       0.456 3.373 4.601
## 63             DRESDEN-KLOTZSCHE       0.472 2.714 3.514
## 16                       POTSDAM       0.486 2.580 3.358
## 85                         SALEN       0.487 3.183 4.414
## 21                     VESTERVIG       0.508 2.378 3.038
## 82                        ARKONA       0.509 2.020 2.614
## 29                       FAERDER       0.515 2.370 3.086
## 86          SIIKAJOKI-REVONLAHTI       0.528 3.310 4.537
## 60                    GOTEBORG A       0.550 2.642 3.405
## 53                       SIEDLCE       0.569 2.619 3.604
## 52                          LEBA       0.595 2.105 2.838
## 9           JYVASKYLA-LENTOASEMA       0.619 3.014 4.135
## 33                      KLAIPEDA       0.625 2.426 3.273
## 61                         VISBY       0.625 2.027 2.647
## 22                    TRANEBJERG       0.626 2.166 2.592
## 68                      LAZDIJAI       0.639 2.597 3.554
## 32                        KAUNAS       0.642 2.631 3.586
## 64          JOKIOINEN-JOKIOISTEN       0.642 2.798 3.829
## 8            HELSINKI-KAISANIEMI       0.651 2.579 3.484
## 67                        BIRZAI       0.655 2.597 3.605
## 6                          UCCLE          NA   NaN   NaN
## 48                        OXFORD          NA   NaN   NaN
## 49                          WICK          NA   NaN   NaN
# simple boxplots:
boxplot(results.df, col = "#FF00FF50", main=paste0(variab,":  ","1979-2008", "\nforcing: ",forcing))
boxplot(ecad.df,add=T, col="#00FF0050")
legend("topleft",legend = c("model","ecad"),col = c("#FF00FF20","#00FF0020"), lty=1,lwd=3, cex=0.8)

plot(subset(ecad, is=52), col="#0000FF95", lwd=2)
lines(subset(results, is=52), col="#FF0000", lwd=2)

dev.off()
## null device 
##           1