• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
9   introduzione r
 

9 introduzione r

on

  • 2,665 views

Una breve introduzione al software R.

Una breve introduzione al software R.

Statistics

Views

Total Views
2,665
Views on SlideShare
2,665
Embed Views
0

Actions

Likes
0
Downloads
375
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    9   introduzione r 9 introduzione r Presentation Transcript

    • Una introduzione ad R parte I C. White, Part of “ Drops of Rain”, 1967 Riccardo Rigon, Matteo Dall’AmicoTuesday, March 6, 12
    • “La potenza è nulla senza controllo” Pubblicità PirelliTuesday, March 6, 12
    • Una Introduzione ad R: parte I Sommario •R: un ambiente open source per l’analisi statistica dei dati •Le funzionalità dell’ambiente R •Creazione e importazione dei dati Tratta dalle presentazioni di Corrado Caudek della facoltà di psicologia dell’università di Firenze nel corso di Tecniche di Ricerca Psicologica e di Analisi dei Dati, A.A. 2007/2008 3 Riccardo Rigon, Matteo Dall’AmicoTuesday, March 6, 12
    • Una Introduzione ad R: parte I R: un ambiente opensource per l’analisi statistica dei dati Che cos’è R? Che cos’è R? R è un software che permette di elaborare dati, eseguire calcoli ed effettuare rappresantazioni grafiche. E’ distribuito gratuitamente ed disponibile per diversiCorrado Caudek sistemi operativi: Windows, MacOS, Unix, Linux. Sul sito http://www.r-project.org è possibile scaricare, oltre che il programma base, anche una serie di moduli aggiuntivi (packages) e un’ampia manualistica. 4 Riccardo Rigon, Matteo Dall’AmicoTuesday, March 6, 12
    • Una Introduzione ad R: parte I R: un ambiente opensource per l’analisi statistica dei dati Installazione InstallazioneCorrado Caudek 5 Riccardo Rigon, Matteo Dall’AmicoTuesday, March 6, 12
    • Una Introduzione ad R: parte II 6Riccardo Rigon, Matteo Dall’AmicoTuesday, March 6, 12
    • Una Introduzione ad R: parte I R: un ambiente opensource per l’analisi statistica dei dati Installazione InstallazioneCorrado Caudek 7 Riccardo Rigon, Matteo Dall’AmicoTuesday, March 6, 12
    • Una Introduzione ad R: parte I R: un ambiente opensource per l’analisi statistica dei dati Installazione InstallazioneCorrado Caudek 8 Riccardo Rigon, Matteo Dall’AmicoTuesday, March 6, 12
    • Una Introduzione ad R: parte I R: un ambiente opensource per l’analisi statistica dei dati Installazione Pacchetti Pacchetti Il modulo base offre gli strumenti fondamentali per l’analisi statistica. Questo modulo base può essere integrato da una serie diCorrado Caudek altre librerie addizionali che possono essere installate dall’utente dopo averle scaricate dal sito succitato. Sul sito del The Comprehensive R Archive Network - CRAN è possibile scaricare un grande numero di packages che spaziano nei più disparati campi della statistica applicata. 9 Riccardo Rigon, Matteo Dall’AmicoTuesday, March 6, 12
    • Una Introduzione ad R: parte I R: un ambiente opensource per l’analisi statistica dei dati Installazione Pacchetti PacchettiCorrado Caudek 10 Riccardo Rigon, Matteo Dall’AmicoTuesday, March 6, 12
    • Una Introduzione ad R: parte I R: un ambiente opensource per l’analisi statistica dei dati Interagire con R La R-console Interfaccia CUI Come indicato dall’esempio precedente, R utilizza un’interfaccia utente a carattere (CUI) in cui le funzioni e le istruzioni vengono immesse da una linea di comando.Corrado Caudek Esiste un’interfacca GUI chiamata R Commander che è equivalente a quella dei software commerciali. Per motivi di ordine didattico, in questo corso impareremo ad usare direttamente le funzioni di R attraverso la R-console, senza ricorrere all’interfaccia grafica. 11 Riccardo Rigon, Matteo Dall’AmicoTuesday, March 6, 12
    • Una Introduzione ad R: parte I R: un ambiente opensource per l’analisi statistica dei dati Interagire con R La R-console Perché R? C’è un preciso motivo didattico per decidere di usare R senza l’interfaccia grafica: è inutile e dannoso svolgere una qualunque analisi dei datiCorrado Caudek senza capire che cosa si sta facendo; l’utilizzo di R aiuta a rendere esplicite le operazioni che stanno alla base delle analisi statistiche e quindi rappresenta un efficace strumento didattico. 12 Riccardo Rigon, Matteo Dall’AmicoTuesday, March 6, 12
    • Una Introduzione ad R: parte I R: un ambiente opensource per l’analisi statistica dei dati Interagire con R La R-console Perché R? Al di là dei suoi vantaggi didattici, il software R fornisce uno strumento di lavoro professionale che consente di svolgere la grande maggioranza delle analisi dei dati psicologici;Corrado Caudek consente di svolgere con semplicità la visualizzazione e l’analisi esplorativa dei dati – due operazioni che sono specialmente importanti per l’analisi dei dati psicologici; è corredato da un’ampia documentazione; è gratuito. •si possono lanciare script 13 Riccardo Rigon, Matteo Dall’AmicoTuesday, March 6, 12
    • Una Introduzione ad R: parte I Le funzionalità dell’ambiente R Sommario Elementi di sintassi Iniziare e chiudere una sessione di R AritmeticaCorrado Caudek Vettori Gestione di vettori La matrice dei dati Definizione Il dataframe Lo spazio di lavoro Workspace La funzione search() La funzione attach() La funzione detach() 14 Riccardo Rigon, Matteo Dall’AmicoTuesday, March 6, 12
    • Una Introduzione ad R: parte I Le funzionalità dell’ambiente R Elementi di sintassi Iniziare e chiudere una sessione di R Iniziare e chiudere una sessione di R Per iniziare una sessione R fare un doppio click di mouse sulla icona di R. Per uscire da R, chiudere la finestra della R-console.Corrado Caudek Alla domanda rispondere “Registro un’immagine del workspace?” rispondere “No”. Se si risponde affermativamente, i dati e le variabili della sessione corrente verranno salvati per la sessione successiva. Per liberarsi di questi dati, digitare > unlink(".RData") 15 Riccardo Rigon, Matteo Dall’AmicoTuesday, March 6, 12
    • Una Introduzione ad R: parte I Le funzionalità dell’ambiente R Elementi di sintassi Aritmetica Semplice aritmetica In R, qualunque cosa venga scritta al prompt viene valutata: > 2+3Corrado Caudek [1] 5 > 2-3 [1] -1 > 2*3 [1] 6 > 2/3 [1] 0.6666667 > 2^3 [1] 8 16 Riccardo Rigon, Matteo Dall’AmicoTuesday, March 6, 12
    • Una Introduzione ad R: parte I Le funzionalità dell’ambiente R Elementi di sintassi Aritmetica Semplice aritmetica > 4^2-3*2 [1] 10 > (4^2)-(3*2)Corrado Caudek [1] 10 > 2^-3 [1] 0.125 > -2--3 [1] 1 > -2 - -3 [1] 1 17 Riccardo Rigon, Matteo Dall’AmicoTuesday, March 6, 12
    • Una Introduzione ad R: parte I Le funzionalità dell’ambiente R Elementi di sintassi Aritmetica Assegnazione di valori Si può salvare un valore assegnandolo ad un oggetto mediante l’operatore “<-”: > a <- 2Corrado Caudek > a [1] 2 L’operatore “<-” si ottiene digitando “<” seguito da “-” (senza spazi tra i due). 18 Riccardo Rigon, Matteo Dall’AmicoTuesday, March 6, 12
    • Una Introduzione ad R: parte I Le funzionalità dell’ambiente R Elementi di sintassi Aritmetica Maiuscole e minuscole Si faccia attenzione che R è sensibile alla distinzione tra maiuscole e minuscole. Di conseguenza l’oggetto “a” è diverso dall’oggetto “A”:Corrado Caudek > A Errore: oggetto "A" non trovato > a [1] 2 19 Riccardo Rigon, Matteo Dall’AmicoTuesday, March 6, 12
    • Una Introduzione ad R: parte I Le funzionalità dell’ambiente R Elementi di sintassi Vettori Vettori Dal nostro punto di vista, i software statistici come R sono utili perché consentono di manipolare, non soltanto gli scalari (come fa qualunque calcolatrice portatile), maCorrado Caudek direttamente i vettori di una matrice di dati. Un vettore di dimensione n può essere definito come una sequenza ordinata di n numeri. Ad esempio (2, 5, 9.5, -3) rappresenta un vettore di dimensione 4 in cui il primo elemento è 2 ed il quarto è -3. 20 Riccardo Rigon, Matteo Dall’AmicoTuesday, March 6, 12
    • Una Introduzione ad R: parte I Le funzionalità dell’ambiente R Elementi di sintassi Vettori Vettori Esistono molti modi per costruire un vettore nell’ambiente R, il più comune è utilizzare la funzione c(): > x <- c(2, 5, 9.5, -3)Corrado Caudek > x [1] 2.0 5.0 9.5 -3.0 Le variabili di una matrice di dati sono oggetti di questo tipo. 21 Riccardo Rigon, Matteo Dall’AmicoTuesday, March 6, 12
    • Una Introduzione ad R: parte I Le funzionalità dell’ambiente R Elementi di sintassi Vettori Vettori Abbiamo visto in precedenza come applicare le operazioni aritmetiche agli scalari: > a <- 2Corrado Caudek > a [1] 2 > a + 2 [1] 4 Queste stesse le operazioni aritmetiche possono essere applicate ai vettori. 22 Riccardo Rigon, Matteo Dall’AmicoTuesday, March 6, 12
    • Una Introduzione ad R: parte I Le funzionalità dell’ambiente R Elementi di sintassi Vettori Operazioni sui vettori Le operazioni aritmetiche applicate ai vettori sono eseguite elemento per elemento: > xCorrado Caudek [1] 2.0 5.0 9.5 -3.0 > x + 2 [1] 4.0 7.0 11.5 -1.0 > x / 2 [1] 1.00 2.50 4.75 -1.50 > a [1] 2 > a * x [1] 4 10 19 -6 23 Riccardo Rigon, Matteo Dall’AmicoTuesday, March 6, 12
    • Una Introduzione ad R: parte I Le funzionalità dell’ambiente R Elementi di sintassi Vettori Operazioni sui vettori Si noti come, nel caso di un’operazione algebrica compiuta su un vettore e uno scalare, quello che facciamo è semplicemente di ripetere l’operazione algebrica per ciascuno degli elementi del vettore.Corrado Caudek Nel primo esempio, abbiamo eseguito 4 somme, una per ciascuno degli elementi del vettore x. Nel secondo caso, sono stati eseguiti 4 rapporti. 24 Riccardo Rigon, Matteo Dall’AmicoTuesday, March 6, 12
    • Una Introduzione ad R: parte I Le funzionalità dell’ambiente R Elementi di sintassi Vettori Selezione degli elementi dei vettori Come possono essere selezionati gli elementi di un vettore? Gli elementi di un vettore possono essere selezionatiCorrado Caudek usando le parentesi quadre []: > x [1] 2.0 5.0 9.5 -3.0 > > x[2] [1] 5 > > x[2] / x[1] [1] 2.5 25 Riccardo Rigon, Matteo Dall’AmicoTuesday, March 6, 12
    • Una Introduzione ad R: parte I Le funzionalità dell’ambiente R Elementi di sintassi Gestione di vettori Gestione di vettori R offre varie funzioni per la manipolazione dei vettori. Per i nostri scopi, sarà necessario conoscere le funzioni che consentono di calcolareCorrado Caudek il numero di elementi contenuti in un vettore: length() il valore massimo degli elementi di un vettore: max() il valore minimo degli elementi di un vettore: min() la somma degli elementi di un vettore: sum() 26 Riccardo Rigon, Matteo Dall’AmicoTuesday, March 6, 12
    • Una Introduzione ad R: parte I Le funzionalità dell’ambiente R Elementi di sintassi Gestione di vettori Funzioni R Le funzioni R richiedono uno o più argomenti che vengono inseriti all’interno di parentesi tonde. Per esempio, la funzione per calcolare la media di una variabile, mean() richiede come argomento il nome dellaCorrado Caudek variabile, per esempio x, di cui si vuole calcolare la media: > mean(x) La funzione plot() utilizzata per creare un diagramma di dispersione richiede due argomenti, separati da una virgola, la variabile x posta in ascissa e la variabile y in ordinata: > plot(x, y) 27 Riccardo Rigon, Matteo Dall’AmicoTuesday, March 6, 12
    • Una Introduzione ad R: parte I Le funzionalità dell’ambiente R Elementi di sintassi Gestione di vettori Gestione di vettori > x [1] 2.0 5.0 9.5 -3.0 > length(x)Corrado Caudek [1] 4 > min(x) [1] -3 > max(x) [1] 9.5 > sum(x) [1] 13.5 > mean(x) [1] 3.375 28 Riccardo Rigon, Matteo Dall’AmicoTuesday, March 6, 12
    • Una Introduzione ad R: parte I Le funzionalità dell’ambiente R Elementi di sintassi Gestione di vettori Media La media di x è n i=1 xi ¯= x nCorrado Caudek > sum(x) [1] 13.5 > length(x) [1] 4 > sum(x)/length(x) [1] 3.375 > mean(x) [1] 3.375 n Si noti che la funzione sum(x) esegue la somma i=1 xi . 29 Riccardo Rigon, Matteo Dall’AmicoTuesday, March 6, 12
    • Una Introduzione ad R: parte I Le funzionalità dell’ambiente R Elementi di sintassi Gestione di vettori Varianza Calcoliamo ora la varianza di x è n i=1 (xi ¯)2 x s2 = xCorrado Caudek n 1 Gli scarti di ciascun valore dalla media sono > x - mean(x) [1] -1.375 1.625 6.125 -6.375 Il quadrato degli scarti è > ( x - mean(x) )^2 [1] 1.890625 2.640625 37.515625 40.640625 30 Riccardo Rigon, Matteo Dall’AmicoTuesday, March 6, 12
    • Una Introduzione ad R: parte I Le funzionalità dell’ambiente R Elementi di sintassi Gestione di vettori Varianza La somma del quadrato degli scarti è > sum( ( x - mean(x) )^2 ) [1] 82.6875 Il numeratore della varianza è la devianza: n (xi ¯)2 .xCorrado Caudek i=1 La devianza divisa per i gradi di libertà (n 1) produce la varianza: > sum( ( x - mean(x) )^2 ) / (length(x)-1) [1] 27.5625 Lo stesso risultato viene prodotto dalla funzione var(): > var(x) [1] 27.5625 31 Riccardo Rigon, Matteo Dall’AmicoTuesday, March 6, 12
    • Una Introduzione ad R: parte I Le funzionalità dell’ambiente R Elementi di sintassi Gestione di vettori Deviazione standard La radice quadrata della varianza è la deviazione standard ⇥ n i=1 (xi ¯)2 x sx =Corrado Caudek n 1 > sqrt( sum( ( x - mean(x) )^2 ) / (length(x)-1) ) [1] 5.25 > sd(x) [1] 5.25 > sqrt(var(x)) [1] 5.25 32 Riccardo Rigon, Matteo Dall’AmicoTuesday, March 6, 12
    • Una Introduzione ad R: parte I Le funzionalità dell’ambiente R Elementi di sintassi Gestione di vettori summary() La funzione summary() è molto utile per ottenere alcune statistiche descrittive di una variabile: il valore minimo, il massimo, il primo quartile, il terzoCorrado Caudek quartile, la mediana e la media. > summary(x) Min. 1st Qu. Median Mean 3rd Qu. Max. -3.000 0.750 3.500 3.375 6.125 9.500 33 Riccardo Rigon, Matteo Dall’AmicoTuesday, March 6, 12
    • Una Introduzione ad R: parte I Le funzionalità dell’ambiente R La matrice dei dati Definizione Matrice dei dati Il ricercatore sceglie un certo insieme di oggetti (detti casi – per es., soggetti) e registra il loro stato su alcune proprietà (per es., intelligenza), che vengono trasformate inCorrado Caudek variabili mediante altrettante definizioni operative (per es., il punteggio di QI prodotto dalla WAIS-III). Se la registrazione è sistematica (si registra lo stato di tutti i casi su tutte le proprietà), è possibile organizzare l’informazione raccolta in una matrice dei dati. 34 Riccardo Rigon, Matteo Dall’AmicoTuesday, March 6, 12
    • Una Introduzione ad R: parte I Le funzionalità dell’ambiente R La matrice dei dati Definizione Matrice dei dati La matrice dei dati ha tante righe quanti sono i casi e tante colonne quante sono le variabili. Nell’intersezione tra una riga e una colonna sta un dato,Corrado Caudek cioè il valore assegnato a un certo caso su una certa proprietà. 35 Riccardo Rigon, Matteo Dall’AmicoTuesday, March 6, 12
    • Una Introduzione ad R: parte I Le funzionalità dell’ambiente R La matrice dei dati Definizione Matrice dei datiCorrado Caudek Si noti che, a differenza da quanto indicato nella figura, R non consente l’uso di spazi nelle etichette utilizzate per le modalità delle variabili qualitative. 36 Riccardo Rigon, Matteo Dall’AmicoTuesday, March 6, 12
    • Una Introduzione ad R: parte I Le funzionalità dell’ambiente R La matrice dei dati Definizione Matrice dei dati Come indicato nella figura, la matrice dei dati contiene sia variabili quantitative, sia variabili qualitative. Le colonne della matrice dei dati che contengono variabiliCorrado Caudek quantiative sono dette vettori. 37 Riccardo Rigon, Matteo Dall’AmicoTuesday, March 6, 12
    • Una Introduzione ad R: parte I Le funzionalità dell’ambiente R La matrice dei dati Il dataframe La matrice di dati in R La matrice di dati viene generata in R con la funzione data.frame(). Supponiamo di avere tre variabili costituite dallo stesso numero di elementi:Corrado Caudek > x <- c(1, 2, 3, 3, 5, 7) > y <- c(2, 3, 1, 4, 6, 8) > z <- factor( c(’a’,’b’,’c’,’a’,’b’,’c’) ) Le variabili x e y sono quantitative; la variable z è qualitativa. 38 Riccardo Rigon, Matteo Dall’AmicoTuesday, March 6, 12
    • Una Introduzione ad R: parte I Le funzionalità dell’ambiente R La matrice dei dati Il dataframe Funzione factor() Si noti la particolare sintassi usata per creare una variabile qualitativa. In primo luogo, la funzione factor() specifica che laCorrado Caudek variabile va intesa come una variabile qualitativa. In secondo luogo, gli elementi passati alla fuzione c() sono racchiusi da virgolette. > z <- factor( c(’a’,’b’,’c’,’a’,’b’,’c’) ) > z [1] a b c a b c Levels: a b c 39 Riccardo Rigon, Matteo Dall’AmicoTuesday, March 6, 12
    • Una Introduzione ad R: parte I Le funzionalità dell’ambiente R La matrice dei dati Il dataframe Funzione data.frame() La matrice di dati che contiene le variabili x, y, z si costruisce nel modo seguente: > dat <- data.frame(x, y, z)Corrado Caudek > dat x y z 1 1 2 a 2 2 3 b 3 3 1 c 4 3 4 a 5 5 6 b 6 7 8 c Abbiamo così costruito un oggetto R di classe data.frame. 40 Riccardo Rigon, Matteo Dall’AmicoTuesday, March 6, 12
    • Una Introduzione ad R: parte I Le funzionalità dell’ambiente R La matrice dei dati Il dataframe Dimensioni del dataframe Il numero di righe e di colonne di un dataframe viene calcolato dalla funzione dim(): > dim(dat)Corrado Caudek [1] 6 3 > > dat x y z 1 1 2 a 2 2 3 b 3 3 1 c 4 3 4 a 5 5 6 b 6 7 8 c 41 Riccardo Rigon, Matteo Dall’AmicoTuesday, March 6, 12
    • Una Introduzione ad R: parte I Le funzionalità dell’ambiente R La matrice dei dati Il dataframe Selezionare una parte del dataframe Come nel caso dei vettori, gli elementi di un dataframe possono essere selezionati utilizzando le parentesi quadre, ovvero specificando il numero di riga (primoCorrado Caudek parametro) e il numero di colonna (secondo parametro): > dat x y z 1 1 2 a 2 2 3 b 3 3 1 c 4 3 4 a 5 5 6 b 6 7 8 c > dat[3,2] [1] 1 > dat[5,3] [1] b 42 Riccardo Rigon, Matteo Dall’AmicoTuesday, March 6, 12
    • Una Introduzione ad R: parte I Le funzionalità dell’ambiente R La matrice dei dati Il dataframe Selezionare una parte del dataframe Se uno dei due indici non viene specificato, si intendono tutti gli elementi di quella/e riga/e o colonna/e: > dat[,1]Corrado Caudek [1] 1 2 3 3 5 7 > dat[,2] [1] 2 3 1 4 6 8 > dat[,3] [1] a b c a b c Levels: a b c > > dat[2,] x y z 2 2 3 b > dat[3,] x y z 3 3 1 c 43 Riccardo Rigon, Matteo Dall’AmicoTuesday, March 6, 12
    • Una Introduzione ad R: parte I Le funzionalità dell’ambiente R La matrice dei dati Il dataframe Operatore : L’operatore : viene usato per indicare la gamma di variazione di un indice. Per esempio, per selezionare le righe 3, 4, 5, 6 dalCorrado Caudek dataframe dat usiamo la seguente sintassi: > dat[3:6, ] x y z 3 3 1 c 4 3 4 a 5 5 6 b 6 7 8 c 44 Riccardo Rigon, Matteo Dall’AmicoTuesday, March 6, 12
    • Una Introduzione ad R: parte I Le funzionalità dell’ambiente R Lo spazio di lavoro Workspace Lo spazio di lavoro Gli oggetti presenti nello spazio di lavoro (workspace) possono essere elencati usando la funzione ls(): > ls()Corrado Caudek [1] "dat" "x" "y" "z" Eliminiamo ora dallo spazio di lavoro gli oggetti x, x, z: > rm(x, y, z) > ls() [1] "dat" 45 Riccardo Rigon, Matteo Dall’AmicoTuesday, March 6, 12
    • Una Introduzione ad R: parte I Le funzionalità dell’ambiente R Lo spazio di lavoro Workspace Lo spazio di lavoro Si noti che l’oggetto x, per esempio, non è più presente nello spazio di lavoro, pur essendo contenuto nel dataframe dat:Corrado Caudek > x Errore: oggetto "x" non trovato > dat x y z 1 1 2 a 2 2 3 b 3 3 1 c 4 3 4 a 5 5 6 b 6 7 8 c 46 Riccardo Rigon, Matteo Dall’AmicoTuesday, March 6, 12
    • Una Introduzione ad R: parte I Le funzionalità dell’ambiente R Lo spazio di lavoro La funzione attach() La funzione attach() Utilizziamo ora la funzione attach() a cui passiamo come parametro il nome dell’oggetto dat avente classe data.frame:Corrado Caudek > attach(dat) > search() [1] ".GlobalEnv" "dat" [3] "tools:RGUI" "package:stats" [5] "package:graphics" "package:grDevices" [7] "package:utils" "package:datasets" [9] "package:methods" "Autoloads" [11] "package:base" 47 Riccardo Rigon, Matteo Dall’AmicoTuesday, March 6, 12
    • Una Introduzione ad R: parte I Le funzionalità dell’ambiente R Lo spazio di lavoro La funzione attach() La funzione attach() Ora dat è presente nel percorso di ricerca. Quando digitiamo x, l’interprete R svolge una ricerca in tutte le locazioni specificate dal percorso di ricerca, cheCorrado Caudek ora comprende il dataframe dat, e recupera la variabile x dal dataframe dat: > x [1] 1 2 3 3 5 7 48 Riccardo Rigon, Matteo Dall’AmicoTuesday, March 6, 12
    • Una Introduzione ad R: parte I Le funzionalità dell’ambiente R Lo spazio di lavoro La funzione attach() La funzione attach() Si tenga a mente che è pericoloso applicare la funzione attach() a più di un dataframe simultaneamente. Se due dataframe contengono due variabili diverse, maCorrado Caudek aventi lo stesso nome, l’interprete R ne selezionerà quella contenuta nel dataframe che precede l’altro nel percorso di ricerca. Questo può non essere quello che intende l’utente. Per evitare pasticci, dunque, quando un dataframe non viene più utilizzato, è opportuno eliminarlo dal percorso di ricerca. 49 Riccardo Rigon, Matteo Dall’AmicoTuesday, March 6, 12
    • Una Introduzione ad R: parte I Le funzionalità dell’ambiente R Lo spazio di lavoro La funzione detach() La funzione detach() Dal momento che le variabili in un dataframe possono “mascherare” le variabili in un altro dataframe, è buona pratica usare la funzione attach() con un dataframe allaCorrado Caudek volta. Un data frame può essere rimosso dal percorso di ricerca mediante la funzione detach(): > detach(dat) > x Errore: oggetto "x" non trovato 50 Riccardo Rigon, Matteo Dall’AmicoTuesday, March 6, 12
    • Una Introduzione ad R: parte I Le funzionalità dell’ambiente R Lo spazio di lavoro La funzione detach() Selezione di una variabile da un dataframe In alternativa, senza utilizzare la funzione attach(), una variabile può essere recuperata direttamente da un dataframe utilizzando la seguente sintassi:Corrado Caudek > x Errore: oggetto "x" non trovato > dat$x [1] 1 2 3 3 5 7 51 Riccardo Rigon, Matteo Dall’AmicoTuesday, March 6, 12
    • Una Introduzione ad R: parte I Creazione e importazione di dati Importazione di dati Funzione read.table() Importazione dei dati L’inserimento dei dati nello spazio di lavoro può essere affrontato mediante la funzione data.frame(). Alternativamente, X<-data.frame() crea un dataframeCorrado Caudek che è poi possibile aprire con fix(X) per l’inserimento dei dati direttamente nelle celle. Un’altra possibilità è quella di importare i dati che sono disponibili in un file ASCII creato da un qualsiasi altro programma. 52 Riccardo Rigon, Matteo Dall’AmicoTuesday, March 6, 12
    • Una Introduzione ad R: parte I Creazione e importazione di dati Importazione di dati Funzione read.table() Importazione dei dati contenuti in un file ASCII La funzione da utilizzare a tale scopo è read.table(). Si supponga che il file ASCII duncan.txt sia così costituito:Corrado Caudek type income education prestige prof 62 86 82 prof 72 76 83 prof 75 92 90 prof 55 90 76 prof 64 86 90 ... Si noti che la prima riga contiene il nome delle variabili. 53 Riccardo Rigon, Matteo Dall’AmicoTuesday, March 6, 12
    • Una Introduzione ad R: parte I Creazione e importazione di dati Importazione di dati Funzione read.table() Importazione dei dati contenuti in un file ASCII La prima operazione da fare è quella di selezionare, mediante il menu della R-console, l’opportuna cartella di lavoro che contiene il file di dati.Corrado Caudek Fatto ciò, i dati possono essere importati nell’ambiente R nel modo seguente: > duncan <- read.table("duncan.txt", header=TRUE) 54 Riccardo Rigon, Matteo Dall’AmicoTuesday, March 6, 12
    • Una Introduzione ad R: parte I Creazione e importazione di dati Importazione di dati Funzione read.table() Importazione dei dati contenuti in un file ASCII Si noti che il nome del file deve essere racchiuso da virgolette doppie; il nome del file deve contenere l’estensione .txt; l’argomento header= TRUE specifica che la prima riga delCorrado Caudek file contiene il nome delle variabili; i due argomenti (il nome del file "duncan.txt" e l’argomento header= TRUE) devono essere separati da una virgola; mediante l’operatore “<-” abbiamo creato l’oggetto duncan che conterrà la matrice dei dati. 55 Riccardo Rigon, Matteo Dall’AmicoTuesday, March 6, 12
    • Una Introduzione ad R: parte I Creazione e importazione di dati Importazione di dati Funzione read.table() Importazione dei dati contenuti in un file ASCII Digitando il nome di un oggetto, il contenuto di quell’oggetto viene stampato nella R-console. Nel caso presente, digitando duncan otteniamo:Corrado Caudek > duncan type income education prestige 1 prof 62 86 82 2 prof 72 76 83 3 prof 75 92 90 4 prof 55 90 76 5 prof 64 86 90 ... 56 Riccardo Rigon, Matteo Dall’AmicoTuesday, March 6, 12
    • Una Introduzione ad R: parte I Creazione e importazione di dati Importazione di dati Funzione read.table() Importazione dei dati contenuti in un file ASCII Quello che abbiamo fatto fino ad ora è di creare un oggetto chiamato duncan che è disponibile nella memoria di lavoro di R e che contiene le variabili type, income,Corrado Caudek education e prestige. Ovviamente, siamo interessati alle variabili contenute in duncan e non all’oggetto duncan nel suo complesso. 57 Riccardo Rigon, Matteo Dall’AmicoTuesday, March 6, 12
    • Una Introduzione ad R: parte I Creazione e importazione di dati Importazione di dati Funzione read.table() Dataframe nello spazio di lavoro Se digitiamo il nome di una variabile, es. education, notiamo che tale variabile non è presente nello spazio di lavoro:Corrado Caudek > education Errore: oggetto "education" non trovato Per rendere disponibili nello spazio di lavoro le variabili contenute nel data frame duncan usiamo la funzione attach(): > education [1] 86 76 92 90 86 84 93 100 87 86 74 98 97 [14] 84 91 34 45 56 44 82 72 55 71 50 23 39 [27] 28 32 22 25 29 7 26 19 15 20 26 28 17 [40] 22 30 25 20 47 32 58 Riccardo Rigon, Matteo Dall’AmicoTuesday, March 6, 12
    • Una Introduzione ad R: parte I Creazione e importazione di dati Importazione di dati Funzione read.table() Media A questo punto, education è presente nello spazio di lavoro e può essere manipolata usando le funzioni di R. Contiamo il numero di casi:Corrado Caudek > length(education) [1] 45 Calcoliamo la media di education: > mean(education) [1] 52.55556 59 Riccardo Rigon, Matteo Dall’AmicoTuesday, March 6, 12
    • Una Introduzione ad R: parte I Creazione e importazione di dati Importazione di dati Funzione read.table() Media La media è uguale a n ¯ i=1 Yi Y=Corrado Caudek n La somma degli elementi di una variabile si calcola nel modo seguente: > sum(education) [1] 2365 Calcoliamo nuovamente la media di education: > sum(education)/length(education) [1] 52.55556 60 Riccardo Rigon, Matteo Dall’AmicoTuesday, March 6, 12
    • Una Introduzione ad R: parte I Creazione e importazione di dati Importazione di dati Funzione read.table() Varianza Pn i=1 (Yi Y)2 ¯ La varianza di education è s2 Y = n 1 Gli scarti dei valori di education dalla media sono:Corrado Caudek > education - mean(education) [1] 33.444444 23.444444 39.444444 37.444444 [5] 33.444444 31.444444 40.444444 47.444444 [9] 34.444444 33.444444 21.444444 45.444444 [13] 44.444444 31.444444 38.444444 -18.555556 [17] -7.555556 3.444444 -8.555556 29.444444 [21] 19.444444 2.444444 18.444444 -2.555556 [25] -29.555556 -13.555556 -24.555556 -20.555556 [29] -30.555556 -27.555556 -23.555556 -45.555556 [33] -26.555556 -33.555556 -37.555556 -32.555556 [37] -26.555556 -24.555556 -35.555556 -30.555556 [41] -22.555556 -27.555556 -32.555556 -5.555556 [45] -20.555556 61 Riccardo Rigon, Matteo Dall’AmicoTuesday, March 6, 12
    • Una Introduzione ad R: parte I Creazione e importazione di dati Importazione di dati Funzione read.table() Varianza Gli scarti al quadrato sono: > ( education - mean(education) )^2 [1] 1118.530864 549.641975 1555.864198 1402.086420Corrado Caudek [5] 1118.530864 988.753086 1635.753086 2250.975309 [9] 1186.419753 1118.530864 459.864198 2065.197531 [13] 1975.308642 988.753086 1477.975309 344.308642 [17] 57.086420 11.864198 73.197531 866.975309 [21] 378.086420 5.975309 340.197531 6.530864 [25] 873.530864 183.753086 602.975309 422.530864 [29] 933.641975 759.308642 554.864198 2075.308642 [33] 705.197531 1125.975309 1410.419753 1059.864198 [37] 705.197531 602.975309 1264.197531 933.641975 [41] 508.753086 759.308642 1059.864198 30.864198 [45] 422.530864 62 Riccardo Rigon, Matteo Dall’AmicoTuesday, March 6, 12
    • Una Introduzione ad R: parte I Creazione e importazione di dati Importazione di dati Funzione read.table() Varianza La somma degli scarti al quadrato è: > sum( ( education - mean(education) )^2 ) [1] 38971.11Corrado Caudek Dividendo per n 1 si ottiene la varianza > sum((education - mean(education))^2)/(length(education) - 1) [1] 885.707 > var(education) [1] 885.707 63 Riccardo Rigon, Matteo Dall’AmicoTuesday, March 6, 12
    • Una Introduzione ad R: parte I Creazione e importazione di dati Importazione di dati Funzione read.table() Deviazione standard La deviazione standard è la radice quadrata della varianza: Pn i=1 (Yi Y)2 ¯ s= n 1Corrado Caudek > sd(education) [1] 29.76083 > sqrt(var(education)) [1] 29.76083 64 Riccardo Rigon, Matteo Dall’AmicoTuesday, March 6, 12
    • Una Introduzione ad R: parte I Creazione e importazione di dati Importazione di dati Funzione read.table() summary() Si noti che informazioni base sulle variabili contenute in un dataframe si possono ottenere usando la funzione summary():Corrado Caudek > summary(duncan) type income education prestige bc :21 Min. : 7.00 Min. : 7.00 Min. : 3.00 prof:18 1st Qu.:21.00 1st Qu.: 26.00 1st Qu.:16.00 wc : 6 Median :42.00 Median : 45.00 Median :41.00 Mean :41.87 Mean : 52.56 Mean :47.69 3rd Qu.:64.00 3rd Qu.: 84.00 3rd Qu.:81.00 Max. :81.00 Max. :100.00 Max. :97.00 65 Riccardo Rigon, Matteo Dall’AmicoTuesday, March 6, 12
    • Una Introduzione ad R: parte I Creazione e importazione di dati Sequenze Creare una sequenza Sequenze R offre varie funzioni per per creare vettori che sono sequenze di numeri. Per i nostri scopi, utilizzeremmoCorrado Caudek l’operatore : seq() rep() 66 Riccardo Rigon, Matteo Dall’AmicoTuesday, March 6, 12
    • Una Introduzione ad R: parte I Creazione e importazione di dati Sequenze Creare una sequenza Sequenze Operatore : L’operatore : consente di generare sequenze di numeri interi:Corrado Caudek > 1:4 [1] 1 2 3 4 67 Riccardo Rigon, Matteo Dall’AmicoTuesday, March 6, 12
    • Una Introduzione ad R: parte I Creazione e importazione di dati Sequenze Creare una sequenza Sequenze Operatore : Tale operatore può essere usato all’interno delle parentesi quadre che per specificare i valori dell’indice che individuaCorrado Caudek gli elementi di un vettore: > y <- c(2, 3, 5, 1, 9) > y [1] 2 3 5 1 9 > y[2] [1] 3 > y[2:4] [1] 3 5 1 68 Riccardo Rigon, Matteo Dall’AmicoTuesday, March 6, 12
    • Una Introduzione ad R: parte I Creazione e importazione di dati Sequenze Creare una sequenza Sequenze Funzione seq() La funzione seq() consente di generare sequenze di numeri più complesse:Corrado Caudek > seq(2, 8, by=2) [1] 2 4 6 8 > seq(0, 1, by=.1) [1] 0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0 > seq(1, 30, length.out=10) [1] 1.00 4.22 7.44 10.67 13.89 17.11 20.33 [8] 23.56 26.78 30.00 69 Riccardo Rigon, Matteo Dall’AmicoTuesday, March 6, 12
    • Una Introduzione ad R: parte I Creazione e importazione di dati Sequenze Creare una sequenza Sequenze Funzione rep() Qui sono forniti alcuni esempi relativi alla funzione rep(): > rep(c(1, 2, 3), each=3)Corrado Caudek [1] 1 1 1 2 2 2 3 3 3 > f1 <- factor( rep(c(’a’, ’b’, ’c’), each=3) ) > f1 [1] a a a b b b c c c Levels: a b c 70 Riccardo Rigon, Matteo Dall’AmicoTuesday, March 6, 12
    • Una Introduzione ad R: parte I Creazione e importazione di dati Matrici numeriche Creazioni di matrici numeriche Matrici Per creare una matrice di dati si utilizza il comando matrix(): > X <- matrix(c( + 4, 3, 6,Corrado Caudek + 1, 5, 2, + 3, 2, 7, + 9, 3, 1), + ncol=3, byrow=TRUE) > X [,1] [,2] [,3] [1,] 4 3 6 [2,] 1 5 2 [3,] 3 2 7 [4,] 9 3 1 Bisogna specificare nrow o ncol per comunicare a R la dimensione della matrice; byrow=TRUE significa che la matrice è riempita seguendo le righe. 71 Riccardo Rigon, Matteo Dall’AmicoTuesday, March 6, 12
    • Una Introduzione ad R: parte I Creazione e importazione di dati Matrici numeriche Creazioni di matrici numeriche Selezione degli elementi di una matrice Per estrarre da una matrice un elemento, bisogna specificarne le due coordinate (ovvero il numero della riga e il numero della colonna) usando le parentesi quadre:Corrado Caudek > X [,1] [,2] [,3] [1,] 4 3 6 [2,] 1 5 2 [3,] 3 2 7 [4,] 9 3 1 > > X[3,1] [1] 3 > X[4,3] [1] 1 72 Riccardo Rigon, Matteo Dall’AmicoTuesday, March 6, 12
    • Una Introduzione ad R: parte I Creazione e importazione di dati Matrici numeriche Creazioni di matrici numeriche Selezione degli elementi di una matrice Se non si indica una delle coordinate, si ottiene un’intera riga/colonna. Per selezionare una colonna della matrice basta omettereCorrado Caudek l’indice delle righe: > X [,1] [,2] [,3] [1,] 4 3 6 [2,] 1 5 2 [3,] 3 2 7 [4,] 9 3 1 > > X[, 2] [1] 3 5 2 3 > X[, 3] [1] 6 2 7 1 73 Riccardo Rigon, Matteo Dall’AmicoTuesday, March 6, 12
    • Una Introduzione ad R: parte I Creazione e importazione di dati Matrici numeriche Creazioni di matrici numeriche Selezione degli elementi di una matrice Per selezionare una riga basta omettere l’indice delle colonne: > XCorrado Caudek [,1] [,2] [,3] [1,] 4 3 6 [2,] 1 5 2 [3,] 3 2 7 [4,] 9 3 1 > > X[2, ] [1] 1 5 2 > X[4, ] [1] 9 3 1 74 Riccardo Rigon, Matteo Dall’AmicoTuesday, March 6, 12
    • Una Introduzione ad R: parte I Creazione e importazione di dati Matrici numeriche Creazioni di matrici numeriche Dimensioni della matrice La funzione dim() indica la dimensione (numero di righe e numero di colonne) della matrice: > XCorrado Caudek [,1] [,2] [,3] [1,] 4 3 6 [2,] 1 5 2 [3,] 3 2 7 [4,] 9 3 1 > > dim(X) [1] 4 3 75 Riccardo Rigon, Matteo Dall’AmicoTuesday, March 6, 12
    • Un introduzione ad R parte II C. White, Part of “ Drops of Rain”, 1967 Riccardo Rigon, Matteo Dall’AmicoTuesday, March 6, 12
    • Una Introduzione ad R: parte II La potenza è nulla senza controllo Pubblicità della Pirelli Sommario 77Riccardo Rigon, Matteo Dall’AmicoTuesday, March 6, 12
    • Una Introduzione ad R: parte II La potenza è nulla senza controllo Pubblicità della Pirelli Sommario • Nella lezione presente si introduce l’uso di R, facendo alcune semplici operazioni 77Riccardo Rigon, Matteo Dall’AmicoTuesday, March 6, 12
    • Una Introduzione ad R: parte II Filosofando... Ingenui, se fino a questo momento credevate che un buon software possa risolvere tutti i vostri problemi di tipo statistico, ricordatevi bene che in realtà non esiste un sostituto per l’esperienza e la conoscenza di un esperto, anche se l’analisi statistica da eseguire può sembrare semplice! Né R né qualunque altro sistema statistico vi daranno l’esperienza statistica necessaria per usare tecniche sofisticate, o per sapere quando i metodi semplici non sono sufficienti. In attesa di trovare un adeguato detto in Latino, accontentiamoci di uno in Inglese: "The data analyst knows more than the computer: failure to use that knowledge produces inadequate data analysis." “Toller-Confucio” 78Riccardo Rigon, Matteo Dall’AmicoTuesday, March 6, 12
    • Una Introduzione ad R: parte II Un Caso: l’analisi delle portate dell’Adige a Ponte S. Lorenzo 79Riccardo Rigon, Matteo Dall’AmicoTuesday, March 6, 12
    • Una Introduzione ad R: parte II Prima di tutto bisogna sapere in quale directory (folder) è R #per vedere i files della directory in cui si sta lavorando list.files() 80Riccardo Rigon, Matteo Dall’AmicoTuesday, March 6, 12
    • Una Introduzione ad R: parte II 81Riccardo Rigon, Matteo Dall’AmicoTuesday, March 6, 12
    • Una Introduzione ad R: parte II In seguito e’ senzaltro necessario cambiare directory, lo si puo’ fare con setwd("Documents/AAA-Idrologia/LezioniIdrologia/R/ Dati_Comandi/") questo perchè nel mio computer, il file 1990-2005.txt che contiene i dati di portata è nella directory: "/home/riccardo/AAA-Idrologia/LezioniIdrologia/R/Dati_Comandi/". > f<-"/Users/Matteo/Documents/costruz_idrauliche/6b- R/Dati_Comandi/1990-2005.txt" > dirname(f) [1] "/Users/Matteo/Documents/costruz_idrauliche/6b- R/Dati_Comandi" > setwd(dirname(f) 82Riccardo Rigon, Matteo Dall’AmicoTuesday, March 6, 12
    • Una Introduzione ad R: parte II Un nuovo list.files() permette di verificare quali files siano effettivamente presenti nella directory. Il file 1990-2005.txt è un file di testo (o file ASCII) e non contiene nessuno dei caratteri di controllo tipici di programmi di formattazione dei testi (come MS Word). 83Riccardo Rigon, Matteo Dall’AmicoTuesday, March 6, 12
    • Una Introduzione ad R: parte II Un nuovo list.files() permette di verificare quali files siano effettivamente presenti nella directory. Il file 1990-2005.txt è un file di testo (o file ASCII) e non contiene nessuno dei caratteri di controllo tipici di programmi di formattazione dei testi (come MS Word). 83Riccardo Rigon, Matteo Dall’AmicoTuesday, March 6, 12
    • Una Introduzione ad R: parte II Questo file non è comunque un esempio da seguire. Un file di dati veramente usabile deve essere accompagnato dagli appositi metadati che ne specificano i contenuti. 84Riccardo Rigon, Matteo Dall’AmicoTuesday, March 6, 12
    • Una Introduzione ad R: parte II Il file può essere letto con vari metodi (per esempio) usando read.table(), ma qui, usiamo un comando diverso che si trova nel pacchetto Zoo - Z’s ordered obiservations. Innanzitutto bisogna caricare il pacchetto con il comando: > library(zoo) naturalmente, se nella cartella, library è presente, il pacchetto, opportunamente scaricato e decompattato dal CRAN > install.packages("zoo") Una volta caricata la libreria, per leggere il file basta usare il comando: > read.zoo(“1990-2005.txt”) -> prt Per avere delle statistiche elementari sui dati, basta usare il comando > summary(prt) 85Riccardo Rigon, Matteo Dall’AmicoTuesday, March 6, 12
    • Una Introduzione ad R: parte II > summary(prt) Index V1 Min. : 1 Min. : -1.0 1st Qu.:1462 1st Qu.: 109.2 Median :2922 Median : 156.4 Mean :2922 Mean : 188.8 3rd Qu.:4382 3rd Qu.: 235.9 Max. :5843 Max. :1447.7 summary ha alcuni “side effects” applicato sull’oggetto prt. Infatti produce anche le media e i quantili dell’indice (che non ha alcun significato) summary(coredata(prt)) la funzione coredata(prt) estrae, in effetti, dall’oggetto (zoo()) solo i dati “nudi”. 86Riccardo Rigon, Matteo Dall’AmicoTuesday, March 6, 12
    • Una Introduzione ad R: parte II Si può fare di meglio: > read.zoo(“1990-2005.txt”, col.names=”Portate”) -> prt da anche il nome corretto ai valori nella prima colonna > summary(coredata(prt)) Portate Min. : -1.0 1st Qu.: 109.2 Median : 156.4 Mean : 188.8 3rd Qu.: 235.9 Max. :1447.7 87Riccardo Rigon, Matteo Dall’AmicoTuesday, March 6, 12
    • Una Introduzione ad R: parte II Si notino un paio di cose: 1 - Il valore minimo della portata è -1. Fatto che significa che i dati non sono così corretti come si vorrebbe. Il dato -1, quasi sicuramente, è stato scritto per significare CHE QUEL GIORNO non sono presenti misure. In R tale informazione è marcata con il simbolo NA. 2 - Si vorrebbe che accanto ai dati, fossero presenti anche le date in cui tali misure sono state prese. 88Riccardo Rigon, Matteo Dall’AmicoTuesday, March 6, 12
    • Una Introduzione ad R: parte II= Risolviamo: 1 - Il valore minimo della portata è -1. Fatto che significa che i dati non sono così corretti come si vorrebbe. Il dato -1, quasi sicuramente, è stato scritto per significare CHE QUEL GIORNO non sono presenti misure. In R tale informazione è marcata con il simbolo NA. > which.min(coredata(prt)) [1] 3674 > prt[3674][[1]] <- NA > summary(coredata(prt)) Portate Min. : 34.44 1st Qu.: 109.20 Median : 156.40 Mean : 188.86 3rd Qu.: 235.92 Max. :1447.70 NAs : 1.00 89Riccardo Rigon, Matteo Dall’AmicoTuesday, March 6, 12
    • Una Introduzione ad R: parte II 2 - Si vorrebbe che accanto ai dati, fossero presenti anche le date in cui tali misure sono state prese. 1400 1200 1000 800 prt 600 400 200 0 0 1000 2000 3000 4000 5000 6000 Index 90Riccardo Rigon, Matteo Dall’AmicoTuesday, March 6, 12
    • Una Introduzione ad R: parte II 2 - Si vorrebbe che accanto ai dati, fossero presenti anche le date in cui tali misure sono state prese. Il comando > time(prt) consente di capire quale sia il tempo nella variabile prt. La risposta,in questo caso da una (lunga sequenza) di numeri interi. Significa che non è stata attribuita alcuna associazione tra prt e una variabile “tempo”. Infatti il file iniziale conteneva una sola colonna con i dati. SAPENDO che i dati si riferiscono al periodo compreso tra il 1 Gennaio 1990 e il 31 Dicembre 2005, si opera nel modo seguente: 91Riccardo Rigon, Matteo Dall’AmicoTuesday, March 6, 12
    • Una Introduzione ad R: parte II A - Si construisce una serie di dati di date: >seq(from=as.Date("1990-01-02"),to=as.Date("2005-12-31"),by="days") ->ymd B - Si assegna alla variabile “time” associata a “prt” il valore di ymd: > time(prt) <-ymd C - Se si disegna ora il grafico delle portate 92Riccardo Rigon, Matteo Dall’AmicoTuesday, March 6, 12
    • Una Introduzione ad R: parte II C - Se si disegna ora il grafico delle portate: >plot(prt,xlab="Anno",ylab="Portate m^3/s") 1400 1200 1000 Portate m^3/s 800 600 400 200 0 1990 1995 2000 2005 Anno 93Riccardo Rigon, Matteo Dall’AmicoTuesday, March 6, 12
    • Una Introduzione ad R: parte II Interpretiamo ora i comandi contenuti in: >seq(from=as.Date("1990-01-02"),to=as.Date("2005-12-31"),by="days") ->ymd - seq() genera una sequenza di dati. I suoi campi indicano rispettivamente: - from = .... il primo termine della sequenza - to = l’ultimo termine della serie di dati - by = lo “step”, ovvero l’intervallo che separa un dato dal successivo. 94Riccardo Rigon, Matteo Dall’AmicoTuesday, March 6, 12
    • Una Introduzione ad R: parte II Interpretiamo ora i comandi contenuti in: >seq(from=as.Date("1990-01-02"),to=as.Date("2005-12-31"),by="days") ->ymd - seq() genera una sequenza di dati. I suoi campi indicano rispettivamente: - from = .... il primo termine della sequenza - to = l’ultimo termine della serie di dati - by = lo “step”, ovvero l’intervallo che separa un dato dal successivo. NOTA: SI OSSERVI CHE QUESTO COMANDO E’ UNA DIMOSTRAZIONE DELLA STRUTTURA OBJECT ORIENTED (ORIENTATA AGLI OGGETTI) DEL LINGUAGGIO R. INIZIO, FINE DELLA SEQUENZA SONO INFATTI DICHIARATI COME OGGETTI “DATA” E, DI CONSEGUENZA ANCHE LO STEP E’ UNA UNITA’ DI TEMPO E LA SERIE RISULTANTE E’ UNA SERIE DI DATE. SE seq() fosse stata applicata a dei numeri, la sequanza generata sarebbe risultata una sequenza di numeri. 94Riccardo Rigon, Matteo Dall’AmicoTuesday, March 6, 12
    • Una Introduzione ad R: parte II Vogliamo ora disegnare i dati relativi ad un solo anno. R ha il comando window() che permette di selezionare una “finestra” temporale. > data.1990 <- window(prt,start=as.Date("1990-01-02"),end=as.Date("1990-12-01")) > plot(data.1990,xlab="Anno",ylab="Portate m^3/s") 400 300 Portate m^3/s 200 100 Jan Mar May Jul Sep Nov Anno 95Riccardo Rigon, Matteo Dall’AmicoTuesday, March 6, 12
    • Una Introduzione ad R: parte II Istogramma delle portate tra il 1990 e il 2005: Histogram of coredata(prt) 2500 2000 1500 Frequency 1000 500 0 0 500 1000 1500 coredata(prt) 96Riccardo Rigon, Matteo Dall’AmicoTuesday, March 6, 12
    • Una Introduzione ad R: parte II Istogramma delle portate tra il 1990 e il 2005: > hist(coredata(prt),breaks=20) Histogram of coredata(prt) 1500 1000 Frequency 500 0 0 500 1000 1500 coredata(prt) 97Riccardo Rigon, Matteo Dall’AmicoTuesday, March 6, 12
    • Una Introduzione ad R: parte II Istogramma delle portate tra il 1990 e il 2005: > hist(coredata(prt),breaks=80) Histogram of coredata(prt) 600 500 400 Frequency 300 200 100 0 0 200 400 600 800 1000 1200 1400 coredata(prt) 98Riccardo Rigon, Matteo Dall’AmicoTuesday, March 6, 12
    • Una Introduzione ad R: parte II BoxPlot delle portate tra il 1990 e il 2005 > as.factor(format(ymd,format="%Y"))->fyear >boxplot(coredata(prt)~fyear) 1400 1200 1000 800 600 400 200 0 1990 1992 1994 1996 1998 2000 2002 2004 99Riccardo Rigon, Matteo Dall’AmicoTuesday, March 6, 12
    • Una Introduzione ad R: parte II Un altro Caso: la lettura e l’analisi di dati provenienti dagli annali idrologici 100Riccardo Rigon, Matteo Dall’AmicoTuesday, March 6, 12
    • Una Introduzione ad R: parte IIQuello che ci proponiano è di leggere la tabella di dati contenuta nel file esterno"PluviometriaPaperopoli. txt"Assunto di avere istallato R e di averlo funzionante sul proprio computer, eseguiamoallora i comandi: 101Riccardo Rigon, Matteo Dall’AmicoTuesday, March 6, 12
    • Una Introduzione ad R: parte II #per vedere i files della directory in cui si sta lavorando list.files() 102Riccardo Rigon, Matteo Dall’AmicoTuesday, March 6, 12
    • Una Introduzione ad R: parte II Il comando per leggere il file è data = read.table("PluviometriaPaperopoli.txt",header=TRUE,skip=1) Nel caso in cui si voglia considerare -1 come un NA data = read.table("PluviometriaPaperopoli.txt",header=TRUE,skip=1,na.string s=-1) Per ottenere una completa spiegazione della sintassi del comando, si può usare: ?read.table() Il risultato è immagazzinato nella variabile "data". 103Riccardo Rigon, Matteo Dall’AmicoTuesday, March 6, 12
    • Una Introduzione ad R: parte II 104Riccardo Rigon, Matteo Dall’AmicoTuesday, March 6, 12
    • Una Introduzione ad R: parte II Esistono altri comandi per leggere informazioni da files, per esempio "scan()". read.table() è tuttavia semplice e conveniente; "data" è un oggetto che, in R, è chiamato "data frame" o "table frame", che corrisponde ad una lista (list) di oggetti numerici e non numerici. Tutti i comandi o le parole chiave di R di cui sopra possono essere interrogati con ?comando Loggetto "data" ha una struttura complessa e i suoi elementi possono essere estratti come data[1], data[2], ecc. Questi pero non sono vettori, ma a loro volta dei data.frame. Per estrarre il vettore bisogna fare data1[[1]]. Infatti: is.vector(data[[1]]) dà TRUE. 105Riccardo Rigon, Matteo Dall’AmicoTuesday, March 6, 12
    • Una Introduzione ad R: parte II Osservando i dati contenuti in data, si vede che alcuni anni sono ripetuti. Questi elementi vanno cancellati nelle successive analisi (gli elementi da cancellare sno diversi da un intervallo temporale ad un altro). R è dotato di un editor dei dati che si può invocare con il comando edit(data) o, nella maggior parte delle interfaccie ad R usando lopportuno menu a tendina. 106Riccardo Rigon, Matteo Dall’AmicoTuesday, March 6, 12
    • Una Introduzione ad R: parte II 107Riccardo Rigon, Matteo Dall’AmicoTuesday, March 6, 12
    • Una Introduzione ad R: parte II Ci sono righe ripetute? Proviamo a controllare... as.factor() mi dice quante sono le “etichette” dei dati di un vettore, length mi dice quanti sono i dati totali in un vettore > as.factor(data[,1]) [1] 1925 1925 1925 1928 1928 1929 1930 1930 1931 1932 [11] 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 [21] 1944 1950 1951 1952 1955 1955 1956 1957 1958 1959 [31] 1959 1960 1960 1961 1961 1962 1963 1964 1965 1966 [41] 1967 1968 1969 1971 1972 1973 1974 1975 1976 1977 [51] 1978 1979 1980 1984 1985 1986 1987 1988 50 Levels: 1925 1928 1929 1930 1931 1932 1934 ... 1988 > length(data[,1]) [1] 58 Ci sono dunque 8 righe che sono ripetute. Quali sono? 108Riccardo Rigon, Matteo Dall’AmicoTuesday, March 6, 12
    • Una Introduzione ad R: parte II duplic<-which(duplicated(data[,1])==TRUE) > duplic [1] 2 3 5 8 26 31 33 35 > data[duplic,1] [1] 1925 1925 1928 1930 1955 1959 1960 1961 quindi 1925 è ripetuto per due volte, e poi ci sono altri record che sono ripetuti una volta. Quali cancellare? A noi interessa il massimo max(data[duplic[1],]) dobbiamo dire di non [1] NA considerare gli NA 109Riccardo Rigon, Matteo Dall’AmicoTuesday, March 6, 12
    • Una Introduzione ad R: parte II duplic<-which(duplicated(data[,1])==TRUE) > duplic [1] 2 3 5 8 26 31 33 35 > data[duplic,1] [1] 1925 1925 1928 1930 1955 1959 1960 1961 quindi 1925 è ripetuto per due volte, e poi ci sono altri record che sono ripetuti una volta. Quali cancellare? A noi interessa il massimo max(data[duplic[1],]) dobbiamo dire di non [1] NA considerare gli NA > max(data[duplic[1],],na.rm=TRUE) dobbiamo dire di [1] 1925 escludere la prima colonna 109Riccardo Rigon, Matteo Dall’AmicoTuesday, March 6, 12
    • Una Introduzione ad R: parte II duplic<-which(duplicated(data[,1])==TRUE) > duplic [1] 2 3 5 8 26 31 33 35 > data[duplic,1] [1] 1925 1925 1928 1930 1955 1959 1960 1961 quindi 1925 è ripetuto per due volte, e poi ci sono altri record che sono ripetuti una volta. Quali cancellare? A noi interessa il massimo max(data[duplic[1],]) [1] NA > max(data[duplic[1],],na.rm=TRUE) [1] 1925 > max(data[duplic[1],-1],na.rm=TRUE) [1] 50 non considera gli NA primo elemento del vettore in tutte le colonne a parte la prima (Year) 110Riccardo Rigon, Matteo Dall’AmicoTuesday, March 6, 12
    • Una Introduzione ad R: parte II > for (i in 1:length(duplic)) { print(paste(data[duplic[i],1],":",sep="")) ; print(max(data[duplic[i],-1],na.rm=TRUE)) } [1] "1925:" [1] 50 [1] "1925:" [1] 25 [1] "1928:" [1] 67.6 [1] "1930:" [1] 53 [1] "1955:" [1] 93.8 [1] "1959:" [1] 22 [1] "1960:" [1] 60.8 [1] "1961:" [1] 20.2 111Riccardo Rigon, Matteo Dall’AmicoTuesday, March 6, 12
    • Una Introduzione ad R: parte II > for (i in 1:length(duplic)) { stampa a video l’anno in cui print(paste(data[duplic[i],1],":",sep="")) c’è un record ripetuto ; print(max(data[duplic[i],-1],na.rm=TRUE)) mettendo alla fine i “:” } [1] "1925:" [1] 50 [1] "1925:" [1] 25 [1] "1928:" [1] 67.6 [1] "1930:" [1] 53 [1] "1955:" [1] 93.8 [1] "1959:" [1] 22 [1] "1960:" [1] 60.8 [1] "1961:" [1] 20.2 111Riccardo Rigon, Matteo Dall’AmicoTuesday, March 6, 12
    • Una Introduzione ad R: parte II > for (i in 1:length(duplic)) { stampa a video l’anno in cui print(paste(data[duplic[i],1],":",sep="")) c’è un record ripetuto ; print(max(data[duplic[i],-1],na.rm=TRUE)) mettendo alla fine i “:” } [1] "1925:" stampa a video il massmo [1] 50 [1] "1925:" [1] 25 [1] "1928:" [1] 67.6 [1] "1930:" [1] 53 [1] "1955:" [1] 93.8 [1] "1959:" [1] 22 [1] "1960:" [1] 60.8 [1] "1961:" [1] 20.2 111Riccardo Rigon, Matteo Dall’AmicoTuesday, March 6, 12
    • Una Introduzione ad R: parte II > for (i in 1:length(duplic)) { stampa a video l’anno in cui print(paste(data[duplic[i],1],":",sep="")) c’è un record ripetuto ; print(max(data[duplic[i],-1],na.rm=TRUE)) mettendo alla fine i “:” } [1] "1925:" stampa a video il massmo [1] 50 [1] "1925:" [1] 25 [1] "1928:" [1] 67.6 [1] "1930:" [1] 53 [1] "1955:" [1] 93.8 [1] "1959:" COSA MANCA? dobbiamo [1] 22 considerare che anche il [1] "1960:" dato precedente a “duplic” [1] 60.8 [1] "1961:" [1] 20.2 111Riccardo Rigon, Matteo Dall’AmicoTuesday, March 6, 12
    • Una Introduzione ad R: parte II Per quanto riguarda i dati orari, si osserva che gli elementi nella righe 1,3,5,7,25,30 sono delle ripetizioni e, non rappresentando i massimi annuali, vanno scartati. In R questo si può fare con i seguenti comandi: #Prima estraiamo i dati relativi agli anni validi e alle precipitazioni orarie yr=data[1] #Costruendo un vettore con il numero delle righe da eliminare cut=c(1,3,4,8,25,31,32,35) #Si possono poi eliminare i dati indesiderati yrh1=yr[[1]][-cut] data1h=data[2][[1]][-cut] 112Riccardo Rigon, Matteo Dall’AmicoTuesday, March 6, 12
    • Una Introduzione ad R: parte II I comandi richiedono un minimo di spiegazione: yr=data[1] yr è una lista. Pertanto i suoi elementi si possono accedere con le doppie parentesi quadre [[ ]]. Il comando yr[[1]] accede dunque il primo elemento della lista. Tale primo elemento, si potrebbe verificare (con il comando is.vector(yr[[1]]), è in vettore. Gli elementi di un vettore, contrariamente agli elementi di una lista, si accedono con le singole parentesi quadre [ ]. Una lista di numeri interi negativi compresa tra le parentesi quadre, elimina gli elementi corrispondenti del vettore. Dunque yrh1=yr[[1]][-cut] è un vettore contenente gli anni di misurazione, senza alcuna ripetizione. data1h=data[2][[1]][-cut] analogamente, contiene i valori di altezza di pioggia di durata oraria selezionati per gli anni contenuti in yr1 113Riccardo Rigon, Matteo Dall’AmicoTuesday, March 6, 12
    • Una Introduzione ad R: parte II 114Riccardo Rigon, Matteo Dall’AmicoTuesday, March 6, 12
    • Una Introduzione ad R: parte II Per fare listogramma (non normalizzato) dei dati: hist(data1h) Listogramma può essere disegnato con un numero maggiore di barre usando la parola chiave "breaks": hist(data1h, breaks=10) da 10 barre. Inoltre, possono essere cambiate i nomi degli assi e del grafico nel suo insieme: hist(data1h, breaks=10,xlab="h [mm]",ylab="Eventi", main="Dati orari di precipitazione") 115Riccardo Rigon, Matteo Dall’AmicoTuesday, March 6, 12
    • Una Introduzione ad R: parte II Istogramma precipitazioni massime 1 h 14 12 10 Frequenza 8 6 4 2 0 20 40 60 80 Precipitazioni Orarie 116Riccardo Rigon, Matteo Dall’AmicoTuesday, March 6, 12
    • Una Introduzione ad R: parte II Un altro comando, che sarà riusato in seguito, è quello che fornisce la frequenza di non superamento empirica (in inglese: empirical cumulative distribution function) ecdf(data1h) -> x plot(x,xlab="h[mm]",ylab="P[H<h]",main="Frequenza di non superamento") 117Riccardo Rigon, Matteo Dall’AmicoTuesday, March 6, 12
    • Una Introduzione ad R: parte II Frequenza di non superamento 1.0 ● ● ● ● ● ● ● ● ● ● 0.8 ● ● ● ● ● ● ● ● ● 0.6 ● ● P[H<h] ● ● ● ● ● ● ● 0.4 ● ● ● ● ● ● ● ● 0.2 ● ● ● ● ● ● ● ● ● 0.0 20 40 60 80 h[mm] 118Riccardo Rigon, Matteo Dall’AmicoTuesday, March 6, 12
    • Distribuzioni in R Pal Mondrian -View of the dunes, 1909 Riccardo RigonTuesday, March 6, 12
    • Distribuzioni in R Se c’e’ da rubare rubo Pablo Picasso Sommario 120Riccardo RigonTuesday, March 6, 12
    • Distribuzioni in R Se c’e’ da rubare rubo Pablo Picasso Sommario • Nella lezione presente illustremo come calcolare alcune distribuzioni in R 120Riccardo RigonTuesday, March 6, 12
    • Distribuzioni in R Distribuzioni in R > dnorm(1.645) [1] 0.1031108 > pnorm(1.645) [1] 0.950015 > pnorm(1.96) [1] 0.9750021 > pnorm(2) [1] 0.9772499 > qnorm(0.95,0,1) [1] 1.644854 > rnorm(5,0,1) [1] -0.0714020 0.3427821 -1.1009895 0.6383514 0.2380390 121Riccardo Rigon 4Tuesday, March 6, 12
    • Distribuzioni in R Distribuzioni in R > runif(1,0,2) # time at light [1] 1.088542 # also runif(1,min=0,max=2) > runif(5,0,2) # time at 5 lights [1] 0.8577781 1.4196343 1.5049239 1.9123655 0.6559980 > runif(5) # 5 random numbers in [0,1] [1] 0.1717392 0.5073215 0.7584391 0.1981516 0.8141901 122Riccardo RigonTuesday, March 6, 12
    • Distribuzioni in R Distribuzioni in R > x=runif(100) # get the random numbers > hist(x,probability=TRUE,col=gray(.9),main="uniform on [0,1]") uniform on [0,1] 1.4 1.2 1.0 0.8 Density 0.6 0.4 0.2 0.0 0.0 0.2 0.4 0.6 0.8 1.0 x 123Riccardo RigonTuesday, March 6, 12
    • Distribuzioni in R Distribuzioni in R > dnorm(1.645) [1] 0.1031108 > pnorm(1.645) [1] 0.950015 > pnorm(1.96) [1] 0.9750021 > pnorm(2) [1] 0.9772499 > qnorm(0.95,0,1) [1] 1.644854 > rnorm(5,0,1) [1] -0.0714020 0.3427821 -1.1009895 0.6383514 0.2380390 124Riccardo RigonTuesday, March 6, 12
    • Distribuzioni in R First make the log transform, and fit the normal density > log.xlnorm = log(xlnorm) > mu = mean(log.xlnorm) > sd = stdev(log.xlnorm) > hist(log.xlnorm, probability = T, col = 0) > x = seq(-1, 5, 0.1) > lines(x, dnorm(x, mu, sd)) > mu [1] 2.037 > sd [1] 1.012 > title(main = "HISTOGRAM … 125Riccardo RigonTuesday, March 6, 12
    • Distribuzioni in R >curve(dnorm(x,m=10,sd=2),from=0,to=20,main="Distribuzione normale") Distribuzione normale 0.20 0.15 dnorm(x, m = 10, sd = 2) 0.10 0.05 0.00 0 5 10 15 20 x 126Riccardo RigonTuesday, March 6, 12
    • Distribuzioni in R> curve(pnorm(x,m=10,sd=2),from=0,to=20,main="Distribuzione normale") Distribuzione normale 1.0 0.8 pnorm(x, m = 10, sd = 2) 0.6 0.4 0.2 0.0 0 5 10 15 20 x 127Riccardo RigonTuesday, March 6, 12
    • Distribuzioni in R > qnorm(0.6,m=10,sd=2) Distribuzione normale [1] 10.50669 1.0 0.8 pnorm(x, m = 10, sd = 2) 0.6 0.4 0.2 0.0 0 5 10 15 20 x 128Riccardo RigonTuesday, March 6, 12
    • Writing Functions in R C. White, Part of “ Drops of Rain”, 1967 Riccardo Rigon, Matteo Dall’AmicoTuesday, March 6, 12
    • Writing Functions in R Obiettivi • Perchè scriviamo funzioni in R ? • Come scriviamo funzioni in R ? La sintassi di base • Argomenti di una funzione • Output di una funzione • Alcuni esempi: – Intervallo di confidenza per la deviazione assoluta media. – Intervallo di confidenza per la frazione di due deviazioni medie assolute – Il calcolo del periodogramma e del suo cumulato – La stima delleo spettro di un segnale dalle autocorrelazioni 130 E. SeierTuesday, March 6, 12
    • Writing Functions in R Why do we write functions? The two main motivations are: • Sometimes we need to calcuate the same thing for several data sets. • What we want to calculate is not in the commercial software yet. 131 E. SeierTuesday, March 6, 12
    • Writing Functions in R Basic syntax name<-function(x,y) { You decide the name of the function Inside the parentheses you can write all the commands input you want and give them the name you want ; We need to type ; after every command output} All the set of commands goes inside brackets { } The name of whatever you want as output goes at the end of the function Any comment line starts with # At the beginning usually we include a description of the function starting with ## 132 E. SeierTuesday, March 6, 12
    • Writing Functions in R Example 1: calculating a confidence interval for the mean absolute deviation In a sample, MAD is calculated as the average of the distances of the values to the median. In Bonett & Seier (2003), ‘Confidence Intervals for Mean Absolute Deviations’ The American Statistical Association, Vol 57 # 4 the following formula for the confidence interval for the population mean absolute deviation was derived: 133 E. SeierTuesday, March 6, 12
    • Writing Functions in R Function citau: 134 E. SeierTuesday, March 6, 12
    • Writing Functions in R Function argument We need to indicate where (x) are the observations and what is the confidence we want to work with (z is the critical value). So, citau is a function of x and z. citau<-function(x,z){ 135 E. SeierTuesday, March 6, 12
    • Writing Functions in R Calculations: md=median(x); We use the following commands: m=mean(x) ; length: # number of observations v=var(x); mean tau=mean(abs(x-md)); median Var: variance del=(m-md)/tau; log: natural log n=length(x); exp(a) : e^a c=n/(n-1); sqrt: square root gam=v/(tau^2); ^*/+- varlnt=(del+gam-1)/n; setau=sqrt(varlnt); forlow=log(c*tau)- z*setau; forup=log(c*tau)+z*setau; lowerend=exp(forlow); upperend=exp(forup); 136 E. SeierTuesday, March 6, 12
    • Writing Functions in R The output We need to create an object with the results we want as output. In the example of the confidence interval we would like to have the lower end , the point estimate, and upper end of the interval. So we will create an object that we will call ci : ci<- c(lowerend, tau,upperend); We could put a name to each element of the output introducing a vector of names such as: a<-c(“lower-end”, “point-estimate”,”upper end”) names(ci)=a The last expression of the function should be the name of the object we want as output, in this case: ci} 137 E. SeierTuesday, March 6, 12
    • Writing Functions in R Executing the function Imagine we have a set of 100 observations from a random sample of a population. The data are in the file WTAM1G.dat . First we read the data with: x<-scan(“a:wtam1g.dat”) To calculate the 95% confidence interval, z=1.96 Once we have copied and pasted the function citau into R, we simply write: citau(x,1.96) and obtain : 0.6204765 0.7347000 0.8876145 If we wanted 90% confidence we would write: citau(x,1.645) 138 E. SeierTuesday, March 6, 12
    • Writing Functions in R Example 2: confidence interval for the ratio of two mean absolute deviation. Two populations can be compared in terms of their variability by comparing the variances ( Levene and Barlett tests) or their mean absolute deviations. In Bonett & Seier (2003), ‘Confidence Intervals for Mean Absolute Deviations’ The American Statistical Association, Vol 57 # 4, a formula for the confidence interval of the ratio of two MADs was derived. If the confidence interval covers the value 1, that means we would reject the hypothesis that the two population mean absolute deviations are equal. 139 E. SeierTuesday, March 6, 12
    • Writing Functions in R rataus<-function(x,y,z){ gam1=v1/(tau1^2); md1=median(x); gam2=v2/(tau2^2); md2=median(y); varlnt1=(del1+gam1-1)/n1; m1=mean(x) ; varlnt2=(del2+gam2-1)/n2; m2=mean(y); forrat=log((c1*tau1)/ v1=var(x); (c2*tau2)); v2=var(y); serat=sqrt(varlnt1+varlnt2); forlow=forrat-z*serat; tau1=mean(abs(x-md1)); forup=forrat+z*serat; tau2=mean(abs(y-md2)); ratau=exp(forrat); del1=(m1-md1)/tau1; lowerend=exp(forlow); del2=(m2-md2)/tau2; upperend=exp(forup); n1=length(x); ci<- c(exinf,ratau,exsup); n2=length(y); ci} c1=n1/(n1-1); c2=n2/(n2-1); 140 E. SeierTuesday, March 6, 12
    • Writing Functions in R Example 3: Plotting the periodogram of a time series. The main commponent of this program is the Fast Fourier Transform fft ## funcion for calculating the periodogram perioplot<-function(x){ adjx=x-mean(x); # substracts the mean of the series tf=fft(adjx); # calculates finite Fourier transform nf=length(tf); n2=nf/2+1; # decides the number of frequencies pritf<-tf[c(1:n2)]; # takes the elements of the Fourier transform intensity<-(abs(pritf^2))/nf; # calculates the ordinates of periodogram nyquist=1/2; pfreq<-seq(0,nf/2,by=1); # preparation for frequencies freq<-pfreq/(length(pfreq)-1)*nyquist; # calculates frequencies plot(freq,intensity,type="l")} 141 E. SeierTuesday, March 6, 12
    • Writing Functions in R Using the function perioplot First we need to copy and paste the function perioplot into R, read the data file and then execute the function tempmar<- scan(“a:tempsea.dat”) perioplot(tempmar) 142 E. SeierTuesday, March 6, 12
    • Writing Functions in R Example 4: Use of the cusum function to write the cumulative periodogram. The function cusum calculates the cumulative sum of the elements of a vector. periocum<-function(x){ adjx=x-mean(x); tf=fft(adjx); nf=length(tf); n2=nf/2+1; pritf<-tf[c(1:n2)]; intensity<-(abs(pritf^2))/nf; nyquist=1/2; pfreq<-seq(0,nf/2,by=1); freq<-pfreq/(length(pfreq)-1)*nyquist; cumint<-cumsum(intensity)/(max(cumsum(intensity))); plot(freq,cumint,type="l")} 143 E. SeierTuesday, March 6, 12
    • Writing Functions in R . Assuming that we have previously read the data of the sea temperature, to execute the function we just write periocum(tempmar) to obtain the plot at the left. The one of the right was obtained with a function that already comes with R. cpgram(tempmar) 144 E. SeierTuesday, March 6, 12
    • Writing Functions in R Example 5: Estimating the spectrum based on the autocorrelations We include this example to mention that generally it is better to avoid the loops like ‘do while’ if we can substitute them by matrix calculations The formula we want to calculate is: We will be using the operators outer and %*%. 145 E. SeierTuesday, March 6, 12
    • Writing Functions in R The input ‘au’ contains the autocorrelations of the series. Notice how matrix operations are used instead of loops. estspec<-function(au){ M<-length(au); # counts how many autocorrelations (M) we read j<-seq(1,M,by=1); # creates subindeces j:1…M lam=0.5*(1+cos(j*pi/M)); # calculates Tukey’s weights w<-seq(0,pi,by=pi/50); # calculates angular frequencies lac=t(lam)*au; # multiplies each weight by the corresponding autocorrelation f<-function(j,w) cos(j*w) ; z<-outer(j,w,f); # calculates cos j w for all values of w and j sz<-lac%*%z; # obtains the sum of weights *correlations *cos jw h<-(1/(2*pi))*(1+2*sz); # calculates h(w) plot(w,h ,type="l",main=”Estimated spectral density” ) } 146 E. SeierTuesday, March 6, 12
    • Writing Functions in R We read the first 30 autocorrelations of the sea temperatures au<- c(0.827,0.537,0.241,0.003,-0.155,- 0.223, -0.196, -0.087,0.075,0.253,,0.379,0.402,0. 306,0.124,-0.084,-0.256,-0.380,-0. 429,-0.382,-0.247,-0.055,0.141,0.2 88,0.352,0.289,0.123,-0.076,-0.261 ,-0.390,-0.444) Then we write estspec(au) to obtain the plot at the right. NB:- R has also a function specpgram that estimates the spectrum using a different 147 method. E. SeierTuesday, March 6, 12
    • Writing Functions in R Practicing writing functions a)Use the functions cuartil y maximo. max(), min(), median(), y quantile( , ) to write a new function that calculates the 5 number summay for the data set x and call c the new function ‘fivenum’ ) x<-c(0,2,9,1,8,7,5,5,6,2,5,1,9,4,8) b) To check if the function is correctly written, write fivenum(x) the results should be 0.0 2.0 5.0 7.5 9.0 c) There are functions already in R to calculate the 5 number summary: Quantile (x) and summary(x) , use them with the previous data set and compare the results with those of your function ‘fivenum’, what would you add to your function to put labels as the function ‘summary’? 148 E. SeierTuesday, March 6, 12
    • Bibliografia, Approfondimenti, Web La madre di tutte le informazioni su R è il sito http://www.r-project.org •Corrado Caudek, Appunti del “Corso di Tecniche di Ricerca Psicologica e di Analisi dei Dati”, A.A. 2007/2008 •Joseph Eschfaller, appunti di "Fondamenti di Informatica", http://felix.unife.it/++/ma-stat-rs, last accessed, 04/04/2010 •Vito Ricci, Analisi delle serie storiche con R, http://cran.r-project.org/doc/contrib/Ricci-ts-italian.pdf, 04/04/2010 •Vito Ricci, Principali tecniche di regressione con R, http://cran.r-project.org/doc/contrib/Ricci-regression- it.pdf, last accessed, 04/04/2010 •Virtual R Workbench, http://biocep-distrib.r-forge.r-project.org/, last accessed 20-10-2009 •Zoo, http://cran.r-project.org/package=zoo, last accessed 20-10-2009 •In Bonett & Seier, Confidence Intervals for Mean Absolute Deviations, The American Statistical Association, vol 57, n. 4, 2003Riccardo RigonTuesday, March 6, 12
    • Writing Functions in R Grazie per l’attenzione! G.Ulrici - 2000 ? 150 E. SeierTuesday, March 6, 12