27 Gennaio 2014
Sono prodotti alcuni grafici/dati che descrivi le serie di precipitazione SCIA di dati giornalieri I dati vengono filtrati in base all'anno di inizio ritenuto valido per ciascuna serie.
Grafici ACF e PACF per ciascuna serie.
rm(list = objects())
library(zyp)
## Loading required package: Kendall
descrivi <- function(colonna) {
dati <- matriceDati[, c(1, 2, 3, colonna)]
ID <- names(matriceDati)[colonna]
names(dati)[4] <- "prcp" ##per semplificarci la vita, per evitare dopo di usare parse(text(etc))
index <- which(as.character(annoI$idstaz) == ID)
if (!length(index))
stop(paste0("--annoInizio-- Codice idstaz non trovato: ", ID))
YYYY <- annoI[index, ]$annoI
## dobbiamo eliminare gli anni precedenti a YYYY e calcolare la percentuale
## di dati mancanti. Inoltre grafichiamo ACF e PACF. Calcolo Theil-Sen
## estimator
if (YYYY > 1951) {
cat(sprintf("Stazione %s -- subset dati\n", ID))
index <- which(dati$yy < YYYY)
dati[index, ]$prcp <- NA
## serie post YYYY
serie <- ts(dati[-index, ]$prcp, start = YYYY, freq = 365.25)
} else {
cat(sprintf("Stazione %s -- no subset dati, serie dal 1951\n", ID))
serie <- ts(dati$prcp, start = YYYY, freq = 365.25)
}
## ACF E PACF
acf(serie, na.action = na.pass, main = paste0("Autocorrelation Function ",
ID))
pacf(serie, na.action = na.pass, main = paste0("Partial Autocorrelation Function ",
ID))
plot(y = serie[1:(length(serie) - 1)], x = serie[2:(length(serie))], xlab = "Serie",
ylab = "Serie-1", main = paste0("Stazione ", ID))
abline(b = 1, a = 0, col = "red", lwd = 0.8, lty = 2)
## percentuale di dati mancanti
index <- which(is.na(dati[dati$yy >= YYYY, ]$prcp))
numeroNa <- length(index)
numeroDati <- length(dati[dati$yy >= YYYY, ]$prcp)
cat(paste0("Numero di dati mancanti ", YYYY, " - ", "2012: ", numeroNa,
"\n"))
cat(paste0("Numero di dati totali ", YYYY, " - ", "2012: ", numeroDati,
"\n"))
plot(x = dati$yy, y = dati$prcp, xlab = "anno", ylab = "mm", main = paste0("Stazione ",
ID))
plot(x = dati$mm, y = dati$prcp, xlab = "mese", ylab = "mm", main = paste0("Stazione ",
ID))
return(list(dati[, 4], round(100 * (numeroNa/numeroDati), 2))) ##da questo punto in poi restituiamo solo i dati
}
#### fine funzione descrivi
########################################################## Inizio programma
## anno di inizio per ciascuna serie: idstaz, annoI
annoI <- read.csv(file = "annoInizio_serie1951.csv", sep = ";", head = T, check.names = F,
stringsAsFactors = F)
## lista file di input e codici ID d ciascuna stazione
matriceDati <- read.csv(file = "matriceDati.csv", sep = ";", head = T, check.names = F,
stringsAsFactors = F)
nomiMatrice <- names(matriceDati)
numeroColonne <- ncol(matriceDati)
ldati <- lapply(4:numeroColonne, FUN = descrivi)
## Stazione 6220 -- no subset dati, serie dal 1951
## Numero di dati mancanti 1951 - 2012: 498
## Numero di dati totali 1951 - 2012: 22646
## Stazione 6225 -- no subset dati, serie dal 1951
## Numero di dati mancanti 1951 - 2012: 647
## Numero di dati totali 1951 - 2012: 22646
## Stazione 6259 -- no subset dati, serie dal 1951
## Numero di dati mancanti 1951 - 2012: 442
## Numero di dati totali 1951 - 2012: 22646
## Stazione 6278 -- no subset dati, serie dal 1951
## Numero di dati mancanti 1951 - 2012: 133
## Numero di dati totali 1951 - 2012: 22646
## Stazione 6429 -- no subset dati, serie dal 1951
## Numero di dati mancanti 1951 - 2012: 422
## Numero di dati totali 1951 - 2012: 22646
## Stazione 6709 -- subset dati
## Numero di dati mancanti 1954 - 2012: 237
## Numero di dati totali 1954 - 2012: 21550
## Stazione 6720 -- no subset dati, serie dal 1951
## Numero di dati mancanti 1951 - 2012: 211
## Numero di dati totali 1951 - 2012: 22646
## Stazione 6721 -- subset dati
## Numero di dati mancanti 1952 - 2012: 177
## Numero di dati totali 1952 - 2012: 22281
## Stazione 6723 -- no subset dati, serie dal 1951
## Numero di dati mancanti 1951 - 2012: 202
## Numero di dati totali 1951 - 2012: 22646
## Stazione 6729 -- no subset dati, serie dal 1951
## Numero di dati mancanti 1951 - 2012: 1406
## Numero di dati totali 1951 - 2012: 22646
## Stazione 6736 -- no subset dati, serie dal 1951
## Numero di dati mancanti 1951 - 2012: 322
## Numero di dati totali 1951 - 2012: 22646
## Stazione 6769 -- no subset dati, serie dal 1951
## Numero di dati mancanti 1951 - 2012: 42
## Numero di dati totali 1951 - 2012: 22646
## Stazione 6773 -- no subset dati, serie dal 1951
## Numero di dati mancanti 1951 - 2012: 131
## Numero di dati totali 1951 - 2012: 22646
## Stazione 6779 -- subset dati
## Numero di dati mancanti 1958 - 2012: 360
## Numero di dati totali 1958 - 2012: 20089
## Stazione 6782 -- subset dati
## Numero di dati mancanti 1955 - 2012: 365
## Numero di dati totali 1955 - 2012: 21185
## Stazione 6794 -- subset dati
## Numero di dati mancanti 1952 - 2012: 106
## Numero di dati totali 1952 - 2012: 22281
## Stazione 6812 -- subset dati
## Numero di dati mancanti 1952 - 2012: 743
## Numero di dati totali 1952 - 2012: 22281
## Stazione 6817 -- no subset dati, serie dal 1951
## Numero di dati mancanti 1951 - 2012: 408
## Numero di dati totali 1951 - 2012: 22646
## Stazione 6820 -- subset dati
## Numero di dati mancanti 1962 - 2012: 72
## Numero di dati totali 1962 - 2012: 18628
## Stazione 6822 -- subset dati
## Numero di dati mancanti 1962 - 2012: 160
## Numero di dati totali 1962 - 2012: 18628
## Stazione 6826 -- subset dati
## Numero di dati mancanti 1960 - 2012: 157
## Numero di dati totali 1960 - 2012: 19359
## Stazione 6827 -- subset dati
## Numero di dati mancanti 1964 - 2012: 60
## Numero di dati totali 1964 - 2012: 17898
## Stazione 6841 -- no subset dati, serie dal 1951
## Numero di dati mancanti 1951 - 2012: 112
## Numero di dati totali 1951 - 2012: 22646
## Stazione 6850 -- no subset dati, serie dal 1951
## Numero di dati mancanti 1951 - 2012: 323
## Numero di dati totali 1951 - 2012: 22646
## Stazione 6851 -- subset dati
## Numero di dati mancanti 1960 - 2012: 182
## Numero di dati totali 1960 - 2012: 19359
## Stazione 6856 -- no subset dati, serie dal 1951
## Numero di dati mancanti 1951 - 2012: 690
## Numero di dati totali 1951 - 2012: 22646
## Stazione 6869 -- no subset dati, serie dal 1951
## Numero di dati mancanti 1951 - 2012: 145
## Numero di dati totali 1951 - 2012: 22646
## Stazione 6874 -- no subset dati, serie dal 1951
## Numero di dati mancanti 1951 - 2012: 130
## Numero di dati totali 1951 - 2012: 22646
## Stazione 6881 -- subset dati
## Numero di dati mancanti 1960 - 2012: 32
## Numero di dati totali 1960 - 2012: 19359
## Stazione 6883 -- subset dati
## Numero di dati mancanti 1962 - 2012: 41
## Numero di dati totali 1962 - 2012: 18628
## Stazione 6891 -- subset dati
## Numero di dati mancanti 1964 - 2012: 91
## Numero di dati totali 1964 - 2012: 17898
## Stazione 6897 -- no subset dati, serie dal 1951
## Numero di dati mancanti 1951 - 2012: 87
## Numero di dati totali 1951 - 2012: 22646
## Stazione 6901 -- no subset dati, serie dal 1951
## Numero di dati mancanti 1951 - 2012: 80
## Numero di dati totali 1951 - 2012: 22646
## Stazione 6923 -- no subset dati, serie dal 1951
## Numero di dati mancanti 1951 - 2012: 64
## Numero di dati totali 1951 - 2012: 22646
## aggregazione dei dati/serie invalidati per gli anni precedenti a YYYY
## (anno inizio della serie)
matrice.out <- lapply(1:(numeroColonne - 3), FUN = function(i) {
(ldati[[i]][[1]]) ##devo usare [[]][[]] perchè è una lista nella lista! stupido!
})
## fine lapply
matrice.out <- do.call("cbind", matrice.out)
matrice.out <- data.frame((matrice.out))
names(matrice.out) <- nomiMatrice[4:numeroColonne]
## aggregazione delle percentuali di dati mancanti per ciascuna serie nel
## periodo YYYY-2012
percNa.out <- lapply(1:(numeroColonne - 3), FUN = function(i) {
ldati[[i]][[2]]
})
## fine lapply
percNa.out <- do.call("cbind", percNa.out)[1, ]
names(percNa.out) <- names(matriceDati)[4:numeroColonne]
## annulliamo gli 0 per evitare lo schiacciamento dei boxplot
matrice.temp <- matrice.out
matrice.temp[matrice.temp == 0] <- NA
out <- boxplot(matrice.temp, horizontal = T, outline = T, xaxt = "n", yaxt = "n")
axis(1, at = seq(0, 350, 10))
axis(2, at = seq(1, 34), labels = names(matrice.temp)[1:(numeroColonne - 3)],
las = 1, cex.axis = 0.65)
colnames(out$stats) <- names(matriceDati)[4:numeroColonne]
row.names(out$stats) <- c("lower.whisker", "lower.hinge", "median", "upper.hinge",
"upper.whisker")
## scrittura dei dati
write.table(out$stats, file = "estremiDati.csv", sep = ";", col.names = T, row.names = T,
quote = F)
## calcolo dei quantili 90 95: qui anche se compaiono gli anni precedenti a
## YYYY (anno inizio serie) non importa in quanto sono stati invalidati i
## corrispettivi valori. I percentili vanno calcolati sulla distribuzione
## maggiore di zero
quantili90 <- apply(matrice.temp, 2, FUN = quantile, probs = 0.9, na.rm = T,
type = 8)
quantili95 <- apply(matrice.temp, 2, FUN = quantile, probs = 0.95, na.rm = T,
type = 8)
sintesiDati <- cbind(percNa.out, round(quantili90, 2), round(quantili95, 2))
write.table(sintesiDati, file = "sintesiDati.csv", sep = ";", col.names = T,
row.names = T, quote = F)
## eliminiamo matrice.temp
rm(matrice.temp)