## 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
variab <- "tmean"
forcing <- "SLP" 

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()
library(hexbin)
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))
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.025 1.941 2.421
## 27                      KARASJOK      -0.017 4.071 5.599
## 23                         MILAN      -0.016 2.511 3.121
## 34                      BRAGANCA      -0.012 2.286 2.768
## 80                MADRID-BARAJAS       0.000 2.053 2.552
## 55                     STORNOWAY       0.001 1.347 1.699
## 35              LISBOA-GEOFISICA       0.006 1.606 2.011
## 69                       TAFJORD       0.006 2.537 3.262
## 79             PALMA-DE-MALLORCA       0.006 1.606 2.020
## 10                     SODANKYLA       0.015 3.979 5.449
## 45                       SAENTIS       0.025 2.990 3.745
## 39                        MALAGA       0.033 1.246 1.533
## 40                   NAVACERRADA       0.034 2.650 3.293
## 31                        VARDOE       0.037 1.780 2.315
## 17                     ZUGSPITZE       0.039 2.853 3.611
## 70        SANTIAGO-DE-COMPOSTELA       0.040 1.896 2.353
## 25                 ROMA-CIAMPINO       0.048 1.732 2.182
## 54                     HAPARANDA       0.050 3.395 4.780
## 51                       FOKSTUA       0.054 2.841 3.584
## 44                        LUGANO       0.058 1.821 2.242
## 24                      CAGLIARI       0.060 1.489 1.896
## 58                  MONT-AIGOUAL       0.061 2.737 3.398
## 71                       JACKVIK       0.062 3.627 4.974
## 28                KJOEREMSGRENDE       0.067 3.100 4.067
## 41         SAN-SEBASTIAN-IGUELDO       0.067 2.134 2.682
## 86          SIIKAJOKI-REVONLAHTI       0.073 3.646 4.960
## 4                      SONNBLICK       0.075 2.664 3.395
## 13           MARSEILLE-MARIGNANE       0.081 1.974 2.465
## 26            VERONA-VILLAFRANCA       0.081 1.963 2.472
## 30                        UTSIRA       0.083 1.905 2.428
## 65              TOULOUSE-BLAGNAC       0.099 2.276 2.852
## 85                         SALEN       0.100 3.403 4.756
## 47                   ESKDALEMUIR       0.103 1.607 2.022
## 18                         CORFU       0.104 1.478 1.865
## 72                          SION       0.108 2.183 2.721
## 20                       METHONI       0.131 1.246 1.582
## 76                       BROCKEN       0.131 2.815 3.471
## 42 TORTOSA-OBSERVATORIO-DEL-EBRO       0.141 1.569 1.963
## 74                          HVAR       0.142 1.740 2.161
## 9           JYVASKYLA-LENTOASEMA       0.146 3.596 4.739
## 56                        VALLEY       0.147 1.476 1.879
## 19                       LARISSA       0.163 1.836 2.327
## 2                      INNSBRUCK       0.171 2.377 2.955
## 57                    WADDINGTON       0.178 1.790 2.296
## 11                       BOURGES       0.189 2.327 2.898
## 75                       ZAVIZAN       0.193 2.500 3.211
## 64          JOKIOINEN-JOKIOISTEN       0.203 3.312 4.371
## 29                       FAERDER       0.208 2.455 3.262
## 15              HOHENPEISSENBERG       0.210 2.867 3.574
## 46              ZUERISWITZERLAND       0.218 2.411 3.024
## 83                    OBERSTDORF       0.220 2.421 3.021
## 12                     PARIS-14E       0.222 2.204 2.783
## 8            HELSINKI-KAISANIEMI       0.223 3.015 3.956
## 43               BASEL-BINNINGEN       0.231 2.387 2.990
## 73                        GOSPIC       0.235 2.323 2.972
## 78                  RHEINSTETTEN       0.242 2.502 3.107
## 21                     VESTERVIG       0.243 2.368 3.112
## 60                    GOTEBORG A       0.248 2.727 3.570
## 50                        RENNES       0.260 1.975 2.467
## 61                         VISBY       0.264 2.260 2.885
## 84                    REGENSBURG       0.272 2.352 2.925
## 59                         SIBIU       0.275 2.232 2.869
## 62                     HELGOLAND       0.277 1.960 2.503
## 36                          ARAD       0.282 2.315 2.945
## 81            GIESSEN-WETTENBERG       0.285 2.357 2.965
## 77                     CONSTANTA       0.289 2.106 2.730
## 1                           GRAZ       0.290 2.063 2.677
## 7                    ZAGREB-GRIC       0.290 2.207 2.869
## 3                       SALZBURG       0.298 2.460 3.095
## 14                        BREMEN       0.299 2.432 3.082
## 82                        ARKONA       0.308 1.997 2.564
## 37             BUCURESTI-BANEASA       0.320 2.135 2.726
## 22                    TRANEBJERG       0.331 2.131 2.709
## 16                       POTSDAM       0.345 2.470 3.162
## 67                        BIRZAI       0.354 2.931 3.879
## 52                          LEBA       0.367 2.190 2.886
## 5                           WIEN       0.368 2.149 2.798
## 33                      KLAIPEDA       0.368 2.600 3.408
## 63             DRESDEN-KLOTZSCHE       0.369 2.553 3.230
## 32                        KAUNAS       0.391 2.784 3.695
## 66                          IASI       0.399 2.379 3.166
## 68                      LAZDIJAI       0.404 2.736 3.649
## 53                       SIEDLCE       0.430 2.535 3.434
## 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