PIERO PISTOIA CURRICULUM
piero-pistoia-curriculumok-1-78Download
#Questo articolo permette ad ogni lettore di accedere ai dati #sperimentali su cui rifare tentativi e prove di analisi statistica, #come facciamo noi o contemporaneamente a noi, di divertirsi #a scegliere percorsi, interpretazioni e integrazioni alternative #su essi e correggere quei passaggi che non convincono, #cercando di risolvere i problemi da noi posti ed altri che #sorgeranno nel processo, usando il potente linguaggio R #orientato al calcolo statistico, dotato di una moltitudine di #strumenti per lo stesso obbiettivo.
#Il linguaggio R fa molto bene ciò che riesce a fare!
#Chi volesse ASSAGGI SUCCESSIVI in divenire di questo post, #clicchi su questo file in odt e con copia-incolla, lo trasferisca #sulla console di R, dopo aver cambiato l’argomento del setwd.
PIOGGE_A_LARDERELLO_1951_1957_MARZO_PARTE_PRIMA
Il seguente link invece attiva un file di premessa che, trasferito su R, gira senza dare errore sul mio computer con setwd(I:/)
PIOGGIA1_18_2_LARDEREL_1951-97 in pdf
#PROVE INIZIALI: attenzione il post è in costruzione; ci possono essere errori!!!!
#PREMESSA
#Problema da risolvere: come far leggere il file dati da qualsiasi #lettore? I files devono essere col suffisso xls.
Larderello_pioggia_csv1 file xls
#1- Si deve caricare sulla console di Microsoft Excel il file #precedente (si esplicita e si carica in Excel), cliccandoci sopra.
#2 – Si deve memorizzare poi da Excel (file-salva con nome) #con l’opzione CSV di excel (delimitato da separatore di #elenco), sul proprio Hd o su qualsiasi altro supporto di massa #di proprietà del lettore interessato, col nome “Larderello_pioggia_csv1”; verrà memorizzato col suffisso CSV.
3 -Si proceda a seguire il post.
____________________________________________
getwd()
setwd(“I:/”) #ogni lettore deve sostituire ad I il suo dispositivo #di massa in cui vuole memorizzare il file CSV o txt dei dati
#getwd()
par(ask=T)
#Non era così immediato far caricare ad R il nostro file dati #originale relative alle piogge cadute a Larderello dal 1951 al #1997, fornito dal CNR, gentilmente concesso dal dott. #Alessandro Bettini che gestisce la Stazione Meteo di #Castenuovo V.C. (da precisare). Da un primo controllo sembra #che un solo dato non sia disponibile (sostituito da -999). Da #prima si carica il file in Excel in 7 colonne di cui quella dei #mm/giorno di pioggia è la quarta. Imponiamo che la quarta #colonna sia numerica con “,” (?) il separatore di decimali è “.” #quello delle migliaia.
#Con procedimento riportato all’inizio salviamo 4 colonne in #.CSV #di Excel con dati delimitati da separatore di elenco.
# INTANTO: carichiamo e prepariamo il file dati da studiare:
dataset_lard_51_97=read.csv(“Larderello_pioggia_csv1.CSV”, sep=”,”)
dataset_lard_51_97=dataset_lard_51_97[1:4]
dataset_lard_51_97
attach(dataset_lard_51_97)
dataset=dataset_lard_51_97[,4]
dataset=ts(dataset)
head(dataset)
tail(dataset)
_____________________________
INTERMEZZO
#MODO ALTERNATIVO DI CARICARE,
#ATTRAVERSO EXCEL, FILES CON SUFFISSO
#.TXT CARICABILE DA R
#Partendo da un file con suffisso .xls è possibile memorizzare in #un file testo “tab delimited“(opzione di Excel 2000), invece #che in CSV di Excel; file testo che è pure visto da R. Perché #funzioni nel nostro post, va caricato col nome “Larderel_pioggia_csv1.txt“
dataset_lard_51_97 = read.csv(“Larderel_pioggia_csv1.txt”, sep=”\t”)
#o togliendo il sep e sostituendo a read.csv, read.csv2, funziona #ancora
dataset_lard_51_97 = read.csv2(“Larderel_pioggia_csv1.txt)
#>dataset_lard_51_97=read.csv(“Larderel_pioggia_csv1.txt”, #sep=”\t”)
#>dataset_lard_51_97=read.csv2(“Larderel_pioggia_csv1.txt”)
FINE INTERMEZZO
______________________________
#dataset
#Time Series:
#Start = 1
#End = 17154; poichè non è divisibile per 30 – si considerano
#tutti i mesi di trenta giorni – si aggiungono 6 valori finali,
#suggeriti dai valori terminali del mese di dicembre precedente.
#I dati complessivi giornalieri della pioggia caduta in mm/giorno
#ammonta così a 17160; 1760/30 = 572 mesi di 30 giorni;
#572/12 = 47 anni circa.
#Frequency = 1
piog_mensili=matrix(dataset,ncol=30,byrow=T)
medie_piog_mensili1=rowMeans(piog_mensili)
sum_piog_mensili2=medie_piog_mensili1*30
vmesi=sum_piog_mensili2
ts.plot(vmesi) #appare un dato anomalo in vmesi[301]
fix(vmesi) #serve a controllare sul video i grandi files anche
#per correggerli.
vmesi[301]
# Si corregge facendo direttamente a mano in itinere la media #dei due valori vicini e poi su richiesta si memorizza il vettore #corretto
ts.plot(vmesi) #dovrebbe essere corretto il dato mancante
#A partire da qui si deve ancora correggere!
____________________________________________
#E’ possibile anche costruire un vettore di 572 medie mensili #della pioggia a Larderello richiamabile (da pensare)
#Il programma R salta le righe con “#”, per cui il lavoro #presentato può essere. direttamente riportato sulla console di #R con copia incolla; il programma girerà autonomamente!
getwd()
#setwd(“X:/”) #X è il nome del dispositivo di massa su cui #memorizzare il file “Larderello_pioggia_csv1” che dovrà #avere suffisso .CSV
getwd()
#CERCANDO DI RIASSUMERE
dataset_lard_51_97=read.csv(“Larderello_pioggia_csv1.CSV”, sep=”,”) #OK, ma da controllare questo sep!
dataset_lard_51_97=dataset_lard_51_97[1:4]
#dataset_lard_51_97
attach(dataset_lard_51_97)
dataset=dataset_lard_51_97[,4]
dataset=ts(dataset)
head(dataset)
tail(dataset)
#dataset
piog_mensili=matrix(dataset,ncol=30,byrow=T)
medie_piog_mensili1=rowMeans(piog_mensili)
sum_piog_mensili2=medie_piog_mensili1*30
vmesi=sum_piog_mensili2
ts.plot(vmesi) #appare un dato anomalo in vmesi[301]
fix(vmesi) #serve a controllare sul video i grandi files anche
#per correggerli.
vmesi[301]
# Si corregga in divenire (in fieri, in corso d’opera) facendo #direttamente a man0 la media dei due vicini.
ts.plot(vmesi) #dovrebbe essere corretto il dato mancante
UN VELOCE EXCURSUM DA RIVEDERE ED AGGIORNARE ATTRAVERSO I LINKS INTERNI CONTINUAMENTE AMPLIATI.
#Potrei riclassificare in una matrice vmesi per righe, a partire #da gennaio 1951, di 12 colonne, dove le somme dei valori di #ogni riga rappresenterebbero la pioggia caduta nei diversi #anni a partire da 1951 e in ogni colonna andrebbero i valori #dei mesi per ogni anno; avremo così – in quanto abbiamo #corretto il numero dati per la presenza dei mesi diversi da 30 #giorni – circa 47 righe complete e 12 colonne corrispondenti
#ai valori dei dodici mesi di ogni anno. La media di ogni riga #rappresenterebbe la pioggia media di ogni anno (per 12 #otterrei le piogge in ogni anno) e la media di ogni colonna #sarebbe la media di pioggia caduta in tutti i 47 i gennaio, i #febbraio ecc.
#Le piogge cadute nei 47 anni, ottenute col comando #rowMeans, costituirebbero una serie storica annuale da #studiare a parte, magari inserendola nel post costruito per #questo studio già elaborato.
#Potremmo farlo ancora con la funzione
#matrix (piog_anni=matrix(vmesi, ncol=12, byrow=T), o #anche con la funzione ts (che ha come #argomenti: file,start, #e frequency), la quale raggruppa i dati con i valori di ogni #mese nella stessa colonna. Nella tabella apparirebbero il
#nome dei mesi ad ogni colonna e degli anni ad ogni riga; #siamo così in grado di prendere i 47 valori di ogni mese (una #volta ogni dodici) per farne la media #piog_anni.ts1=ts(vmesi, #start=1951, frequency=12).
#Questo per un controllo incrociato.
#Poi con subas =vmesi.ts1[seq(1, length(vmesi), by=12)] si #raccolgono i dati di gennaio per i 47 anni (o quanti sono) e ne #fa la media; per gli altri mesi la media si calcola con un for #integrando il comando precedente con la sostituzione di un i #ad 1.
#media_mesi=c()
#for(i in 1:12) {media_mesi[i]=mean(vmesi.ts1[seq(i, #length(vmesi), by=12)])}
#Da confrontare poi media-mesi con colMeans comando usato #con matrix.
#Seguiranno le istruzioni descritte. Si passerà poi ai filtri!
#Da confrontare poi media-mesi con mediacol comando usato #con matrix.
#In tal modo si viene a costruire l ‘EFFETTO STAGIONALE.
#Le dodici medie di colonna relative ai 47 mesi dello stesso #nome (gennaio, febbraio…dicembre), è conseguenza #dell’ipotesi plausibile che, all’interno di ogni anno #debba oscillare un’onda di pioggia legata alle stagioni
#(componente stagionale della serie storica).
#Osservando il grafico del vettore vmesi invece non si notano #trends e ad occhio anche le eventuali oscillazioni sembrano #mascherate, nonostante l’acf del vettore (autocorrelazione) #risulti significativo. Se esiste un’oscillazione di ordine dodici la #riassumiamo dalle medie di ogni mese nel corso dei 47 anni. #Potremmo anche spezzare i dati in 5 parti (4 da dieci anni e #una da 7) per studiarle separatamente onde controllarne le #variazioni nel tempo (come cambia la pioggia nelle varie #stagioni col tempo?)
#Si passerà poi ai filtri!
#Un modo alternativo più ortodosso di studiare una #serie storica mensile detrendizzata infatti è quello, #suggerito sempre dall’ipotesi accennata suddetta, di calcolare #una media mobile di ordine 12 su tutti dati o sui singoli pezzi #per estrarre dai dati originali un’onda di periodo opportuno #(stagionalità) costruendo così una seconda serie che, poi #sottratta dall’originale, ne lascia una residuale contenente #ancora trend (se esisteva prima), e qualche ciclo. Alla fine #rimarrà così solo da testare i residui.
#Seguono le istruzioni descritte.
piog_anni=matrix(vmesi, ncol=12, byrow=T)
m_anni=rowMeans(vmesi)
pioganni=m_anni*12
piog_anni.ts1=ts(vmesi, start=1951, frequency=12)
vmesi.ts1 = piog_anni.ts1
subas =vmesi.ts1[seq(1, length(vmesi), by=12)]
media_mesi=c()
for(i in 1:12) {media_mesi[i]=mean(vmesi.ts1[seq(i, length(vmesi), by=12)])}
ts.plot(media-mesi)
DA CONTROLLARE, CORREGGERE ESPANDERE, CONTINUARE….con calma, avendo altri post avviati da gestire.
SEGUIRE I LINKS INTERNI CONTINUAMENTE AGGIORNATI