9 introduzione r

158
C. White, Part of “ Drops of Rain”, 1967 Una introduzione ad R parte I Riccardo Rigon, Matteo Dall’Amico Tuesday, March 6, 12

Upload: riccardo-rigon

Post on 13-Jun-2015

3.509 views

Category:

Documents


5 download

DESCRIPTION

Una breve introduzione al software R.

TRANSCRIPT

Page 1: 9   introduzione r

C. W

hit

e, P

art

of

“ D

rop

s of

Rai

n”,

19

67

Una introduzione ad Rparte I

Riccardo Rigon, Matteo Dall’Amico

Tuesday, March 6, 12

Page 2: 9   introduzione r

“La potenza è nulla senza controllo”

Pubblicità Pirelli

Tuesday, March 6, 12

Page 3: 9   introduzione r

Una Introduzione ad R: parte I

Riccardo Rigon, Matteo Dall’Amico

3

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

Tuesday, March 6, 12

Page 4: 9   introduzione r

Una Introduzione ad R: parte I

Riccardo Rigon, Matteo Dall’Amico

Corr

ado C

aud

ek

4

R: un ambiente opensource per l’analisi statistica dei dati

Che cos’è R?

Che cos’è R?R è un software che permette di elaborare dati, eseguirecalcoli ed effettuare rappresantazioni grafiche.E’ distribuito gratuitamente ed disponibile per diversisistemi operativi: Windows, MacOS, Unix, Linux.Sul sito http://www.r-project.org è possibilescaricare, oltre che il programma base, anche una serie dimoduli aggiuntivi (packages) e un’ampia manualistica.

Tuesday, March 6, 12

Page 5: 9   introduzione r

Una Introduzione ad R: parte I

Riccardo Rigon, Matteo Dall’Amico

Corr

ado C

aud

ek

5

R: un ambiente opensource per l’analisi statistica dei dati

Installazione

Installazione

Tuesday, March 6, 12

Page 6: 9   introduzione r

Una Introduzione ad R: parte II

Riccardo Rigon, Matteo Dall’Amico

6

Tuesday, March 6, 12

Page 7: 9   introduzione r

Una Introduzione ad R: parte I

Riccardo Rigon, Matteo Dall’Amico

Corr

ado C

aud

ek

7

R: un ambiente opensource per l’analisi statistica dei dati

Installazione

Installazione

Tuesday, March 6, 12

Page 8: 9   introduzione r

Una Introduzione ad R: parte I

Riccardo Rigon, Matteo Dall’Amico

Corr

ado C

aud

ek

8

R: un ambiente opensource per l’analisi statistica dei dati

Installazione

Installazione

Tuesday, March 6, 12

Page 9: 9   introduzione r

Una Introduzione ad R: parte I

Riccardo Rigon, Matteo Dall’Amico

Corr

ado C

aud

ek

9

R: un ambiente opensource per l’analisi statistica dei dati

Installazione

Pacchetti

PacchettiIl modulo base offre gli strumenti fondamentali per l’analisistatistica.Questo modulo base può essere integrato da una serie dialtre librerie addizionali che possono essere installatedall’utente dopo averle scaricate dal sito succitato.Sul sito del The Comprehensive R Archive Network -CRAN è possibile scaricare un grande numero dipackages che spaziano nei più disparati campi dellastatistica applicata.

Tuesday, March 6, 12

Page 10: 9   introduzione r

Una Introduzione ad R: parte I

Riccardo Rigon, Matteo Dall’Amico

Corr

ado C

aud

ek

10

R: un ambiente opensource per l’analisi statistica dei dati

Installazione

Pacchetti

Pacchetti

Tuesday, March 6, 12

Page 11: 9   introduzione r

Una Introduzione ad R: parte I

Riccardo Rigon, Matteo Dall’Amico

Corr

ado C

aud

ek

11

R: un ambiente opensource per l’analisi statistica dei dati

Interagire con R

La R-console

Interfaccia CUICome indicato dall’esempio precedente, R utilizzaun’interfaccia utente a carattere (CUI) in cui le funzioni ele istruzioni vengono immesse da una linea di comando.

Esiste un’interfacca GUI chiamata R Commander che èequivalente a quella dei software commerciali.Per motivi di ordine didattico, in questo corso impareremoad usare direttamente le funzioni di R attraverso laR-console, senza ricorrere all’interfaccia grafica.

Tuesday, March 6, 12

Page 12: 9   introduzione r

Una Introduzione ad R: parte I

Riccardo Rigon, Matteo Dall’Amico

Corr

ado C

aud

ek

12

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 Rsenza l’interfaccia grafica:

è inutile e dannoso svolgere una qualunque analisi dei datisenza capire che cosa si sta facendo;l’utilizzo di R aiuta a rendere esplicite le operazioni chestanno alla base delle analisi statistiche e quindirappresenta un efficace strumento didattico.

Tuesday, March 6, 12

Page 13: 9   introduzione r

Una Introduzione ad R: parte I

Riccardo Rigon, Matteo Dall’Amico

Corr

ado C

aud

ek

13

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 checonsente di svolgere la grande maggioranza delle analisidei dati psicologici;consente di svolgere con semplicità la visualizzazione el’analisi esplorativa dei dati – due operazioni che sonospecialmente importanti per l’analisi dei dati psicologici;è corredato da un’ampia documentazione;è gratuito.

•si possono lanciare script

Tuesday, March 6, 12

Page 14: 9   introduzione r

Una Introduzione ad R: parte I

Riccardo Rigon, Matteo Dall’Amico

Corr

ado C

aud

ek

14

Le funzionalità dell’ambiente R

SommarioElementi di sintassi

Iniziare e chiudere una sessione di RAritmeticaVettoriGestione di vettori

La matrice dei datiDefinizioneIl dataframe

Lo spazio di lavoroWorkspaceLa funzione search()La funzione attach()La funzione detach()

Tuesday, March 6, 12

Page 15: 9   introduzione r

Una Introduzione ad R: parte I

Riccardo Rigon, Matteo Dall’Amico

Corr

ado C

aud

ek

15

Le funzionalità dell’ambiente R

Elementi di sintassi

Iniziare e chiudere una sessione di R

Iniziare e chiudere una sessione di RPer iniziare una sessione R fare un doppio click di mousesulla icona di R.Per uscire da R, chiudere la finestra della R-console.

Alla domanda rispondere “Registro un’immagine delworkspace?” rispondere “No”.Se si risponde affermativamente, i dati e le variabili dellasessione corrente verranno salvati per la sessionesuccessiva.Per liberarsi di questi dati, digitare> unlink(".RData")

Tuesday, March 6, 12

Page 16: 9   introduzione r

Una Introduzione ad R: parte I

Riccardo Rigon, Matteo Dall’Amico

Corr

ado C

aud

ek

16

Le funzionalità dell’ambiente R

Elementi di sintassi

Aritmetica

Semplice aritmeticaIn R, qualunque cosa venga scritta al prompt vienevalutata:> 2+3[1] 5> 2-3[1] -1> 2*3[1] 6> 2/3[1] 0.6666667> 2^3[1] 8

Tuesday, March 6, 12

Page 17: 9   introduzione r

Una Introduzione ad R: parte I

Riccardo Rigon, Matteo Dall’Amico

Corr

ado C

aud

ek

17

Le funzionalità dell’ambiente R

Elementi di sintassi

Aritmetica

Semplice aritmetica

> 4^2-3*2[1] 10> (4^2)-(3*2)[1] 10> 2^-3[1] 0.125> -2--3[1] 1> -2 - -3[1] 1

Tuesday, March 6, 12

Page 18: 9   introduzione r

Una Introduzione ad R: parte I

Riccardo Rigon, Matteo Dall’Amico

Corr

ado C

aud

ek

18

Le funzionalità dell’ambiente R

Elementi di sintassi

Aritmetica

Assegnazione di valoriSi può salvare un valore assegnandolo ad un oggettomediante l’operatore “<-”:> a <- 2> a[1] 2

L’operatore “<-” si ottiene digitando “<” seguito da “-”(senza spazi tra i due).

Tuesday, March 6, 12

Page 19: 9   introduzione r

Una Introduzione ad R: parte I

Riccardo Rigon, Matteo Dall’Amico

Corr

ado C

aud

ek

19

Le funzionalità dell’ambiente R

Elementi di sintassi

Aritmetica

Maiuscole e minuscoleSi faccia attenzione che R è sensibile alla distinzione tramaiuscole e minuscole.Di conseguenza l’oggetto “a” è diverso dall’oggetto “A”:> AErrore: oggetto "A" non trovato> a[1] 2

Tuesday, March 6, 12

Page 20: 9   introduzione r

Una Introduzione ad R: parte I

Riccardo Rigon, Matteo Dall’Amico

Corr

ado C

aud

ek

20

Le funzionalità dell’ambiente R

Elementi di sintassi

Vettori

VettoriDal nostro punto di vista, i software statistici come R sonoutili perché consentono di manipolare, non soltanto gliscalari (come fa qualunque calcolatrice portatile), madirettamente i vettori di una matrice di dati.Un vettore di dimensione n può essere definito come unasequenza ordinata di n numeri.Ad esempio (2, 5, 9.5, -3) rappresenta un vettore didimensione 4 in cui il primo elemento è 2 ed il quarto è -3.

Tuesday, March 6, 12

Page 21: 9   introduzione r

Una Introduzione ad R: parte I

Riccardo Rigon, Matteo Dall’Amico

Corr

ado C

aud

ek

21

Le funzionalità dell’ambiente R

Elementi di sintassi

Vettori

VettoriEsistono molti modi per costruire un vettorenell’ambiente R, il più comune è utilizzare la funzione c():> x <- c(2, 5, 9.5, -3)> x[1] 2.0 5.0 9.5 -3.0

Le variabili di una matrice di dati sono oggetti di questo tipo.

Tuesday, March 6, 12

Page 22: 9   introduzione r

Una Introduzione ad R: parte I

Riccardo Rigon, Matteo Dall’Amico

Corr

ado C

aud

ek

22

Le funzionalità dell’ambiente R

Elementi di sintassi

Vettori

VettoriAbbiamo visto in precedenza come applicare le operazioniaritmetiche agli scalari:> a <- 2> a[1] 2> a + 2[1] 4

Queste stesse le operazioni aritmetiche possono essereapplicate ai vettori.

Tuesday, March 6, 12

Page 23: 9   introduzione r

Una Introduzione ad R: parte I

Riccardo Rigon, Matteo Dall’Amico

Corr

ado C

aud

ek

23

Le funzionalità dell’ambiente R

Elementi di sintassi

Vettori

Operazioni sui vettoriLe operazioni aritmetiche applicate ai vettori sono eseguiteelemento per elemento:> x[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

Tuesday, March 6, 12

Page 24: 9   introduzione r

Una Introduzione ad R: parte I

Riccardo Rigon, Matteo Dall’Amico

Corr

ado C

aud

ek

24

Le funzionalità dell’ambiente R

Elementi di sintassi

Vettori

Operazioni sui vettoriSi noti come, nel caso di un’operazione algebrica compiutasu un vettore e uno scalare, quello che facciamo èsemplicemente di ripetere l’operazione algebrica perciascuno degli elementi del vettore.

Nel primo esempio, abbiamo eseguito 4 somme, una perciascuno degli elementi del vettore x.Nel secondo caso, sono stati eseguiti 4 rapporti.

Tuesday, March 6, 12

Page 25: 9   introduzione r

Una Introduzione ad R: parte I

Riccardo Rigon, Matteo Dall’Amico

Corr

ado C

aud

ek

25

Le funzionalità dell’ambiente R

Elementi di sintassi

Vettori

Selezione degli elementi dei vettoriCome possono essere selezionati gli elementi di unvettore?Gli elementi di un vettore possono essere selezionatiusando le parentesi quadre []:> x[1] 2.0 5.0 9.5 -3.0>> x[2][1] 5>> x[2] / x[1][1] 2.5

Tuesday, March 6, 12

Page 26: 9   introduzione r

Una Introduzione ad R: parte I

Riccardo Rigon, Matteo Dall’Amico

Corr

ado C

aud

ek

26

Le funzionalità dell’ambiente R

Elementi di sintassi

Gestione di vettori

Gestione di vettoriR offre varie funzioni per la manipolazione dei vettori.Per i nostri scopi, sarà necessario conoscere le funzioniche consentono di calcolare

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()

Tuesday, March 6, 12

Page 27: 9   introduzione r

Una Introduzione ad R: parte I

Riccardo Rigon, Matteo Dall’Amico

Corr

ado C

aud

ek

27

Le funzionalità dell’ambiente R

Elementi di sintassi

Gestione di vettori

Funzioni RLe funzioni R richiedono uno o più argomenti chevengono inseriti all’interno di parentesi tonde.

Per esempio, la funzione per calcolare la media di unavariabile, mean() richiede come argomento il nome dellavariabile, per esempio x, di cui si vuole calcolare la media:> mean(x)

La funzione plot() utilizzata per creare un diagramma didispersione richiede due argomenti, separati da unavirgola, la variabile x posta in ascissa e la variabile y inordinata:> plot(x, y)

Tuesday, March 6, 12

Page 28: 9   introduzione r

Una Introduzione ad R: parte I

Riccardo Rigon, Matteo Dall’Amico

Corr

ado C

aud

ek

28

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)[1] 4> min(x)[1] -3> max(x)[1] 9.5> sum(x)[1] 13.5> mean(x)[1] 3.375

Tuesday, March 6, 12

Page 29: 9   introduzione r

Una Introduzione ad R: parte I

Riccardo Rigon, Matteo Dall’Amico

Corr

ado C

aud

ek

29

Le funzionalità dell’ambiente R

Elementi di sintassi

Gestione di vettori

MediaLa media di x è

x =�n

i=1 xi

n

> sum(x)[1] 13.5> length(x)[1] 4> sum(x)/length(x)[1] 3.375> mean(x)[1] 3.375

Si noti che la funzione sum(x) esegue la somma�n

i=1 xi.

Tuesday, March 6, 12

Page 30: 9   introduzione r

Una Introduzione ad R: parte I

Riccardo Rigon, Matteo Dall’Amico

Corr

ado C

aud

ek

30

Le funzionalità dell’ambiente R

Elementi di sintassi

Gestione di vettori

VarianzaCalcoliamo ora la varianza di x è

s2x =

�ni=1(xi � x)2

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

Tuesday, March 6, 12

Page 31: 9   introduzione r

Una Introduzione ad R: parte I

Riccardo Rigon, Matteo Dall’Amico

Corr

ado C

aud

ek

31

Le funzionalità dell’ambiente R

Elementi di sintassi

Gestione di vettori

VarianzaLa somma del quadrato degli scarti è> sum( ( x - mean(x) )^2 )[1] 82.6875

Il numeratore della varianza è la devianza:�n

i=1(xi � x)2.La devianza divisa per i gradi di libertà (n� 1) produce lavarianza:> sum( ( x - mean(x) )^2 ) / (length(x)-1)[1] 27.5625

Lo stesso risultato viene prodotto dalla funzione var():> var(x)[1] 27.5625

Tuesday, March 6, 12

Page 32: 9   introduzione r

Una Introduzione ad R: parte I

Riccardo Rigon, Matteo Dall’Amico

Corr

ado C

aud

ek

32

Le funzionalità dell’ambiente R

Elementi di sintassi

Gestione di vettori

Deviazione standardLa radice quadrata della varianza è la deviazione standard

sx =

⇥�ni=1(xi � x)2

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

Tuesday, March 6, 12

Page 33: 9   introduzione r

Una Introduzione ad R: parte I

Riccardo Rigon, Matteo Dall’Amico

Corr

ado C

aud

ek

33

Le funzionalità dell’ambiente R

Elementi di sintassi

Gestione di vettori

summary()La funzione summary() è molto utile per ottenere alcunestatistiche descrittive di una variabile:

il valore minimo, il massimo, il primo quartile, il terzoquartile, 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

Tuesday, March 6, 12

Page 34: 9   introduzione r

Una Introduzione ad R: parte I

Riccardo Rigon, Matteo Dall’Amico

Corr

ado C

aud

ek

34

Le funzionalità dell’ambiente R

La matrice dei dati

Definizione

Matrice dei datiIl ricercatore sceglie un certo insieme di oggetti (detti casi– per es., soggetti) e registra il loro stato su alcuneproprietà (per es., intelligenza), che vengono trasformate invariabili mediante altrettante definizioni operative (per es.,il punteggio di QI prodotto dalla WAIS-III).Se la registrazione è sistematica (si registra lo stato di tuttii casi su tutte le proprietà), è possibile organizzarel’informazione raccolta in una matrice dei dati.

Tuesday, March 6, 12

Page 35: 9   introduzione r

Una Introduzione ad R: parte I

Riccardo Rigon, Matteo Dall’Amico

Corr

ado C

aud

ek

35

Le funzionalità dell’ambiente R

La matrice dei dati

Definizione

Matrice dei datiLa matrice dei dati ha tante righe quanti sono i casi e tantecolonne quante sono le variabili.Nell’intersezione tra una riga e una colonna sta un dato,cioè il valore assegnato a un certo caso su una certaproprietà.

Tuesday, March 6, 12

Page 36: 9   introduzione r

Una Introduzione ad R: parte I

Riccardo Rigon, Matteo Dall’Amico

Corr

ado C

aud

ek

36

Le funzionalità dell’ambiente R

La matrice dei dati

Definizione

Matrice dei dati

Si noti che, a differenza da quanto indicato nella figura, R nonconsente l’uso di spazi nelle etichette utilizzate per le modalitàdelle variabili qualitative.

Tuesday, March 6, 12

Page 37: 9   introduzione r

Una Introduzione ad R: parte I

Riccardo Rigon, Matteo Dall’Amico

Corr

ado C

aud

ek

37

Le funzionalità dell’ambiente R

La matrice dei dati

Definizione

Matrice dei datiCome indicato nella figura, la matrice dei dati contiene siavariabili quantitative, sia variabili qualitative.Le colonne della matrice dei dati che contengono variabiliquantiative sono dette vettori.

Tuesday, March 6, 12

Page 38: 9   introduzione r

Una Introduzione ad R: parte I

Riccardo Rigon, Matteo Dall’Amico

Corr

ado C

aud

ek

38

Le funzionalità dell’ambiente R

La matrice dei dati

Il dataframe

La matrice di dati in RLa matrice di dati viene generata in R con la funzionedata.frame().Supponiamo di avere tre variabili costituite dallo stessonumero di elementi:> 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.

Tuesday, March 6, 12

Page 39: 9   introduzione r

Una Introduzione ad R: parte I

Riccardo Rigon, Matteo Dall’Amico

Corr

ado C

aud

ek

39

Le funzionalità dell’ambiente R

La matrice dei dati

Il dataframe

Funzione factor()Si noti la particolare sintassi usata per creare una variabilequalitativa.

In primo luogo, la funzione factor() specifica che lavariabile 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 cLevels: a b c

Tuesday, March 6, 12

Page 40: 9   introduzione r

Una Introduzione ad R: parte I

Riccardo Rigon, Matteo Dall’Amico

Corr

ado C

aud

ek

40

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 sicostruisce nel modo seguente:> dat <- data.frame(x, y, z)> datx y z

1 1 2 a2 2 3 b3 3 1 c4 3 4 a5 5 6 b6 7 8 c

Abbiamo così costruito un oggetto R di classedata.frame.

Tuesday, March 6, 12

Page 41: 9   introduzione r

Una Introduzione ad R: parte I

Riccardo Rigon, Matteo Dall’Amico

Corr

ado C

aud

ek

41

Le funzionalità dell’ambiente R

La matrice dei dati

Il dataframe

Dimensioni del dataframeIl numero di righe e di colonne di un dataframe vienecalcolato dalla funzione dim():> dim(dat)[1] 6 3>> datx y z

1 1 2 a2 2 3 b3 3 1 c4 3 4 a5 5 6 b6 7 8 c

Tuesday, March 6, 12

Page 42: 9   introduzione r

Una Introduzione ad R: parte I

Riccardo Rigon, Matteo Dall’Amico

Corr

ado C

aud

ek

42

Le funzionalità dell’ambiente R

La matrice dei dati

Il dataframe

Selezionare una parte del dataframeCome nel caso dei vettori, gli elementi di un dataframepossono essere selezionati utilizzando le parentesiquadre, ovvero specificando il numero di riga (primoparametro) e il numero di colonna (secondo parametro):> datx y z

1 1 2 a2 2 3 b3 3 1 c4 3 4 a5 5 6 b6 7 8 c> dat[3,2][1] 1> dat[5,3][1] b

Tuesday, March 6, 12

Page 43: 9   introduzione r

Una Introduzione ad R: parte I

Riccardo Rigon, Matteo Dall’Amico

Corr

ado C

aud

ek

43

Le funzionalità dell’ambiente R

La matrice dei dati

Il dataframe

Selezionare una parte del dataframeSe uno dei due indici non viene specificato, si intendonotutti gli elementi di quella/e riga/e o colonna/e:> dat[,1][1] 1 2 3 3 5 7> dat[,2][1] 2 3 1 4 6 8> dat[,3][1] a b c a b cLevels: a b c>> dat[2,]x y z

2 2 3 b> dat[3,]x y z

3 3 1 c

Tuesday, March 6, 12

Page 44: 9   introduzione r

Una Introduzione ad R: parte I

Riccardo Rigon, Matteo Dall’Amico

Corr

ado C

aud

ek

44

Le funzionalità dell’ambiente R

La matrice dei dati

Il dataframe

Operatore :L’operatore : viene usato per indicare la gamma divariazione di un indice.Per esempio, per selezionare le righe 3, 4, 5, 6 daldataframe dat usiamo la seguente sintassi:> dat[3:6, ]x y z

3 3 1 c4 3 4 a5 5 6 b6 7 8 c

Tuesday, March 6, 12

Page 45: 9   introduzione r

Una Introduzione ad R: parte I

Riccardo Rigon, Matteo Dall’Amico

Corr

ado C

aud

ek

45

Le funzionalità dell’ambiente R

Lo spazio di lavoro

Workspace

Lo spazio di lavoroGli oggetti presenti nello spazio di lavoro (workspace)possono essere elencati usando la funzione ls():> ls()[1] "dat" "x" "y" "z"

Eliminiamo ora dallo spazio di lavoro gli oggetti x, x, z:> rm(x, y, z)> ls()[1] "dat"

Tuesday, March 6, 12

Page 46: 9   introduzione r

Una Introduzione ad R: parte I

Riccardo Rigon, Matteo Dall’Amico

Corr

ado C

aud

ek

46

Le funzionalità dell’ambiente R

Lo spazio di lavoro

Workspace

Lo spazio di lavoroSi noti che l’oggetto x, per esempio, non è più presentenello spazio di lavoro, pur essendo contenuto neldataframe dat:> xErrore: oggetto "x" non trovato> datx y z

1 1 2 a2 2 3 b3 3 1 c4 3 4 a5 5 6 b6 7 8 c

Tuesday, March 6, 12

Page 47: 9   introduzione r

Una Introduzione ad R: parte I

Riccardo Rigon, Matteo Dall’Amico

Corr

ado C

aud

ek

47

Le funzionalità dell’ambiente R

Lo spazio di lavoro

La funzione attach()

La funzione attach()Utilizziamo ora la funzione attach() a cui passiamocome parametro il nome dell’oggetto dat avente classedata.frame:> 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"

Tuesday, March 6, 12

Page 48: 9   introduzione r

Una Introduzione ad R: parte I

Riccardo Rigon, Matteo Dall’Amico

Corr

ado C

aud

ek

48

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 intutte le locazioni specificate dal percorso di ricerca, cheora comprende il dataframe dat, e recupera la variabile xdal dataframe dat:> x[1] 1 2 3 3 5 7

Tuesday, March 6, 12

Page 49: 9   introduzione r

Una Introduzione ad R: parte I

Riccardo Rigon, Matteo Dall’Amico

Corr

ado C

aud

ek

49

Le funzionalità dell’ambiente R

Lo spazio di lavoro

La funzione attach()

La funzione attach()Si tenga a mente che è pericoloso applicare la funzioneattach() a più di un dataframe simultaneamente.Se due dataframe contengono due variabili diverse, maaventi lo stesso nome, l’interprete R ne selezionerà quellacontenuta nel dataframe che precede l’altro nel percorso diricerca.Questo può non essere quello che intende l’utente. Perevitare pasticci, dunque, quando un dataframe non vienepiù utilizzato, è opportuno eliminarlo dal percorso diricerca.

Tuesday, March 6, 12

Page 50: 9   introduzione r

Una Introduzione ad R: parte I

Riccardo Rigon, Matteo Dall’Amico

Corr

ado C

aud

ek

50

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, è buonapratica usare la funzione attach() con un dataframe allavolta.Un data frame può essere rimosso dal percorso di ricercamediante la funzione detach():> detach(dat)> xErrore: oggetto "x" non trovato

Tuesday, March 6, 12

Page 51: 9   introduzione r

Una Introduzione ad R: parte I

Riccardo Rigon, Matteo Dall’Amico

Corr

ado C

aud

ek

51

Le funzionalità dell’ambiente R

Lo spazio di lavoro

La funzione detach()

Selezione di una variabile da un dataframeIn alternativa, senza utilizzare la funzione attach(), unavariabile può essere recuperata direttamente da undataframe utilizzando la seguente sintassi:> xErrore: oggetto "x" non trovato> dat$x[1] 1 2 3 3 5 7

Tuesday, March 6, 12

Page 52: 9   introduzione r

Una Introduzione ad R: parte I

Riccardo Rigon, Matteo Dall’Amico

Corr

ado C

aud

ek

52

Creazione e importazione di dati

Importazione di dati

Funzione read.table()

Importazione dei datiL’inserimento dei dati nello spazio di lavoro può essereaffrontato mediante la funzione data.frame().Alternativamente, X<-data.frame() crea un dataframeche è poi possibile aprire con fix(X) per l’inserimento deidati direttamente nelle celle.Un’altra possibilità è quella di importare i dati che sonodisponibili in un file ASCII creato da un qualsiasi altroprogramma.

Tuesday, March 6, 12

Page 53: 9   introduzione r

Una Introduzione ad R: parte I

Riccardo Rigon, Matteo Dall’Amico

Corr

ado C

aud

ek

53

Creazione e importazione di dati

Importazione di dati

Funzione read.table()

Importazione dei dati contenuti in un file ASCIILa funzione da utilizzare a tale scopo è read.table().Si supponga che il file ASCII duncan.txt sia cosìcostituito:type income education prestigeprof 62 86 82prof 72 76 83prof 75 92 90prof 55 90 76prof 64 86 90

...

Si noti che la prima riga contiene il nome delle variabili.

Tuesday, March 6, 12

Page 54: 9   introduzione r

Una Introduzione ad R: parte I

Riccardo Rigon, Matteo Dall’Amico

Corr

ado C

aud

ek

54

Creazione e importazione di dati

Importazione di dati

Funzione read.table()

Importazione dei dati contenuti in un file ASCIILa prima operazione da fare è quella di selezionare,mediante il menu della R-console, l’opportuna cartella dilavoro che contiene il file di dati.Fatto ciò, i dati possono essere importati nell’ambiente Rnel modo seguente:> duncan <- read.table("duncan.txt", header=TRUE)

Tuesday, March 6, 12

Page 55: 9   introduzione r

Una Introduzione ad R: parte I

Riccardo Rigon, Matteo Dall’Amico

Corr

ado C

aud

ek

55

Creazione e importazione di dati

Importazione di dati

Funzione read.table()

Importazione dei dati contenuti in un file ASCIISi 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 delfile contiene il nome delle variabili;i due argomenti (il nome del file "duncan.txt" el’argomento header= TRUE) devono essere separati dauna virgola;mediante l’operatore “<-” abbiamo creato l’oggetto duncanche conterrà la matrice dei dati.

Tuesday, March 6, 12

Page 56: 9   introduzione r

Una Introduzione ad R: parte I

Riccardo Rigon, Matteo Dall’Amico

Corr

ado C

aud

ek

56

Creazione e importazione di dati

Importazione di dati

Funzione read.table()

Importazione dei dati contenuti in un file ASCIIDigitando il nome di un oggetto, il contenuto diquell’oggetto viene stampato nella R-console.Nel caso presente, digitando duncan otteniamo:> duncan

type income education prestige1 prof 62 86 822 prof 72 76 833 prof 75 92 904 prof 55 90 765 prof 64 86 90

...

Tuesday, March 6, 12

Page 57: 9   introduzione r

Una Introduzione ad R: parte I

Riccardo Rigon, Matteo Dall’Amico

Corr

ado C

aud

ek

57

Creazione e importazione di dati

Importazione di dati

Funzione read.table()

Importazione dei dati contenuti in un file ASCIIQuello che abbiamo fatto fino ad ora è di creare un oggettochiamato duncan che è disponibile nella memoria dilavoro di R e che contiene le variabili type, income,education e prestige.Ovviamente, siamo interessati alle variabili contenute induncan e non all’oggetto duncan nel suo complesso.

Tuesday, March 6, 12

Page 58: 9   introduzione r

Una Introduzione ad R: parte I

Riccardo Rigon, Matteo Dall’Amico

Corr

ado C

aud

ek

58

Creazione e importazione di dati

Importazione di dati

Funzione read.table()

Dataframe nello spazio di lavoroSe digitiamo il nome di una variabile, es. education,notiamo che tale variabile non è presente nello spazio dilavoro:> educationErrore: oggetto "education" non trovato

Per rendere disponibili nello spazio di lavoro le variabilicontenute nel data frame duncan usiamo la funzioneattach():> 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

Tuesday, March 6, 12

Page 59: 9   introduzione r

Una Introduzione ad R: parte I

Riccardo Rigon, Matteo Dall’Amico

Corr

ado C

aud

ek

59

Creazione e importazione di dati

Importazione di dati

Funzione read.table()

MediaA questo punto, education è presente nello spazio dilavoro e può essere manipolata usando le funzioni di R.Contiamo il numero di casi:> length(education)[1] 45

Calcoliamo la media di education:> mean(education)[1] 52.55556

Tuesday, March 6, 12

Page 60: 9   introduzione r

Una Introduzione ad R: parte I

Riccardo Rigon, Matteo Dall’Amico

Corr

ado C

aud

ek

60

Creazione e importazione di dati

Importazione di dati

Funzione read.table()

MediaLa media è uguale a

Y =�n

i=1 Yi

n

La somma degli elementi di una variabile si calcola nelmodo seguente:> sum(education)[1] 2365

Calcoliamo nuovamente la media di education:> sum(education)/length(education)[1] 52.55556

Tuesday, March 6, 12

Page 61: 9   introduzione r

Una Introduzione ad R: parte I

Riccardo Rigon, Matteo Dall’Amico

Corr

ado C

aud

ek

61

Creazione e importazione di dati

Importazione di dati

Funzione read.table()

VarianzaLa varianza di education è s2

Y =Pn

i=1(Yi�Y)2

n�1

Gli scarti dei valori di education dalla media sono:> 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

Tuesday, March 6, 12

Page 62: 9   introduzione r

Una Introduzione ad R: parte I

Riccardo Rigon, Matteo Dall’Amico

Corr

ado C

aud

ek

62

Creazione e importazione di dati

Importazione di dati

Funzione read.table()

VarianzaGli scarti al quadrato sono:> ( education - mean(education) )^2[1] 1118.530864 549.641975 1555.864198 1402.086420[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

Tuesday, March 6, 12

Page 63: 9   introduzione r

Una Introduzione ad R: parte I

Riccardo Rigon, Matteo Dall’Amico

Corr

ado C

aud

ek

63

Creazione e importazione di dati

Importazione di dati

Funzione read.table()

VarianzaLa somma degli scarti al quadrato è:> sum( ( education - mean(education) )^2 )[1] 38971.11

Dividendo per n� 1 si ottiene la varianza> sum((education - mean(education))^2)/(length(education) - 1)[1] 885.707> var(education)[1] 885.707

Tuesday, March 6, 12

Page 64: 9   introduzione r

Una Introduzione ad R: parte I

Riccardo Rigon, Matteo Dall’Amico

Corr

ado C

aud

ek

64

Creazione e importazione di dati

Importazione di dati

Funzione read.table()

Deviazione standardLa deviazione standard è la radice quadrata della varianza:

s =�Pn

i=1(Yi�Y)2

n�1

> sd(education)[1] 29.76083> sqrt(var(education))[1] 29.76083

Tuesday, March 6, 12

Page 65: 9   introduzione r

Una Introduzione ad R: parte I

Riccardo Rigon, Matteo Dall’Amico

Corr

ado C

aud

ek

65

Creazione e importazione di dati

Importazione di dati

Funzione read.table()

summary()Si noti che informazioni base sulle variabili contenute in undataframe si possono ottenere usando la funzionesummary():> summary(duncan)

type income education prestigebc :21 Min. : 7.00 Min. : 7.00 Min. : 3.00prof:18 1st Qu.:21.00 1st Qu.: 26.00 1st Qu.:16.00wc : 6 Median :42.00 Median : 45.00 Median :41.00

Mean :41.87 Mean : 52.56 Mean :47.693rd Qu.:64.00 3rd Qu.: 84.00 3rd Qu.:81.00Max. :81.00 Max. :100.00 Max. :97.00

Tuesday, March 6, 12

Page 66: 9   introduzione r

Una Introduzione ad R: parte I

Riccardo Rigon, Matteo Dall’Amico

Corr

ado C

aud

ek

66

Creazione e importazione di dati

Sequenze

Creare una sequenza

SequenzeR offre varie funzioni per per creare vettori che sonosequenze di numeri.Per i nostri scopi, utilizzeremmo

l’operatore :seq()rep()

Tuesday, March 6, 12

Page 67: 9   introduzione r

Una Introduzione ad R: parte I

Riccardo Rigon, Matteo Dall’Amico

Corr

ado C

aud

ek

67

Creazione e importazione di dati

Sequenze

Creare una sequenza

SequenzeOperatore :

L’operatore : consente di generare sequenze di numeriinteri:> 1:4[1] 1 2 3 4

Tuesday, March 6, 12

Page 68: 9   introduzione r

Una Introduzione ad R: parte I

Riccardo Rigon, Matteo Dall’Amico

Corr

ado C

aud

ek

68

Creazione e importazione di dati

Sequenze

Creare una sequenza

SequenzeOperatore :

Tale operatore può essere usato all’interno delle parentesiquadre che per specificare i valori dell’indice che individuagli 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

Tuesday, March 6, 12

Page 69: 9   introduzione r

Una Introduzione ad R: parte I

Riccardo Rigon, Matteo Dall’Amico

Corr

ado C

aud

ek

69

Creazione e importazione di dati

Sequenze

Creare una sequenza

SequenzeFunzione seq()

La funzione seq() consente di generare sequenze dinumeri più complesse:> 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

Tuesday, March 6, 12

Page 70: 9   introduzione r

Una Introduzione ad R: parte I

Riccardo Rigon, Matteo Dall’Amico

Corr

ado C

aud

ek

70

Creazione e importazione di dati

Sequenze

Creare una sequenza

SequenzeFunzione rep()

Qui sono forniti alcuni esempi relativi alla funzione rep():> rep(c(1, 2, 3), each=3)[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 cLevels: a b c

Tuesday, March 6, 12

Page 71: 9   introduzione r

Una Introduzione ad R: parte I

Riccardo Rigon, Matteo Dall’Amico

Corr

ado C

aud

ek

71

Creazione e importazione di dati

Matrici numeriche

Creazioni di matrici numeriche

MatriciPer creare una matrice di dati si utilizza il comandomatrix():> X <- matrix(c(+ 4, 3, 6,+ 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 ladimensione della matrice; byrow=TRUE significa che lamatrice è riempita seguendo le righe.

Tuesday, March 6, 12

Page 72: 9   introduzione r

Una Introduzione ad R: parte I

Riccardo Rigon, Matteo Dall’Amico

Corr

ado C

aud

ek

72

Creazione e importazione di dati

Matrici numeriche

Creazioni di matrici numeriche

Selezione degli elementi di una matricePer estrarre da una matrice un elemento, bisognaspecificarne le due coordinate (ovvero il numero della rigae il numero della colonna) usando le parentesi quadre:> 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

Tuesday, March 6, 12

Page 73: 9   introduzione r

Una Introduzione ad R: parte I

Riccardo Rigon, Matteo Dall’Amico

Corr

ado C

aud

ek

73

Creazione e importazione di dati

Matrici numeriche

Creazioni di matrici numeriche

Selezione degli elementi di una matriceSe non si indica una delle coordinate, si ottiene un’interariga/colonna.Per selezionare una colonna della matrice basta ometterel’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

Tuesday, March 6, 12

Page 74: 9   introduzione r

Una Introduzione ad R: parte I

Riccardo Rigon, Matteo Dall’Amico

Corr

ado C

aud

ek

74

Creazione e importazione di dati

Matrici numeriche

Creazioni di matrici numeriche

Selezione degli elementi di una matricePer selezionare una riga basta omettere l’indice dellecolonne:> X

[,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

Tuesday, March 6, 12

Page 75: 9   introduzione r

Una Introduzione ad R: parte I

Riccardo Rigon, Matteo Dall’Amico

Corr

ado C

aud

ek

75

Creazione e importazione di dati

Matrici numeriche

Creazioni di matrici numeriche

Dimensioni della matriceLa funzione dim() indica la dimensione (numero di righee numero di colonne) della matrice:> X

[,1] [,2] [,3][1,] 4 3 6[2,] 1 5 2[3,] 3 2 7[4,] 9 3 1>> dim(X)[1] 4 3

Tuesday, March 6, 12

Page 76: 9   introduzione r

C. W

hit

e, P

art

of

“ D

rop

s of

Rai

n”,

19

67

Un introduzione ad Rparte II

Riccardo Rigon, Matteo Dall’Amico

Tuesday, March 6, 12

Page 77: 9   introduzione r

Una Introduzione ad R: parte II

Riccardo Rigon, Matteo Dall’Amico

77

La potenza è nulla senza controlloPubblicità della Pirelli

Sommario

Tuesday, March 6, 12

Page 78: 9   introduzione r

Una Introduzione ad R: parte II

Riccardo Rigon, Matteo Dall’Amico

77

La potenza è nulla senza controlloPubblicità della Pirelli

Sommario

• Nella lezione presente si introduce l’uso di R, facendo alcune semplici operazioni

Tuesday, March 6, 12

Page 79: 9   introduzione r

Una Introduzione ad R: parte II

Riccardo Rigon, Matteo Dall’Amico

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”78

Filosofando...

Tuesday, March 6, 12

Page 80: 9   introduzione r

Una Introduzione ad R: parte II

Riccardo Rigon, Matteo Dall’Amico

Un Caso:l’analisi delle portate dell’Adige a Ponte S. Lorenzo

79

Tuesday, March 6, 12

Page 81: 9   introduzione r

Una Introduzione ad R: parte II

Riccardo Rigon, Matteo Dall’Amico

Prima di tutto bisogna sapere in quale directory (folder) è R

#per vedere i files della directory in cui si sta lavorando

list.files()

80

Tuesday, March 6, 12

Page 82: 9   introduzione r

Una Introduzione ad R: parte II

Riccardo Rigon, Matteo Dall’Amico

81

Tuesday, March 6, 12

Page 83: 9   introduzione r

Una Introduzione ad R: parte II

Riccardo Rigon, Matteo Dall’Amico

In seguito e’ senz'altro 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/".

82

> 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)

Tuesday, March 6, 12

Page 84: 9   introduzione r

Una Introduzione ad R: parte II

Riccardo Rigon, Matteo Dall’Amico

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).

83

Tuesday, March 6, 12

Page 85: 9   introduzione r

Una Introduzione ad R: parte II

Riccardo Rigon, Matteo Dall’Amico

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).

83

Tuesday, March 6, 12

Page 86: 9   introduzione r

Una Introduzione ad R: parte II

Riccardo Rigon, Matteo Dall’Amico

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. 84

Tuesday, March 6, 12

Page 87: 9   introduzione r

Una Introduzione ad R: parte II

Riccardo Rigon, Matteo Dall’Amico

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)

85

Tuesday, March 6, 12

Page 88: 9   introduzione r

Una Introduzione ad R: parte II

Riccardo Rigon, Matteo Dall’Amico

> 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”. 86

Tuesday, March 6, 12

Page 89: 9   introduzione r

Una Introduzione ad R: parte II

Riccardo Rigon, Matteo Dall’Amico

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

87

Tuesday, March 6, 12

Page 90: 9   introduzione r

Una Introduzione ad R: parte II

Riccardo Rigon, Matteo Dall’Amico

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.

88

Tuesday, March 6, 12

Page 91: 9   introduzione r

Una Introduzione ad R: parte II

Riccardo Rigon, Matteo Dall’Amico

=

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 NA's : 1.00

89

Tuesday, March 6, 12

Page 92: 9   introduzione r

Una Introduzione ad R: parte II

Riccardo Rigon, Matteo Dall’Amico

2 - Si vorrebbe che accanto ai dati, fossero presenti anche le date in cui tali misure sono state prese.

0 1000 2000 3000 4000 5000 6000

0200

400

600

800

1000

1200

1400

Index

prt

90

Tuesday, March 6, 12

Page 93: 9   introduzione r

Una Introduzione ad R: parte II

Riccardo Rigon, Matteo Dall’Amico

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:

91

Tuesday, March 6, 12

Page 94: 9   introduzione r

Una Introduzione ad R: parte II

Riccardo Rigon, Matteo Dall’Amico

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

92

Tuesday, March 6, 12

Page 95: 9   introduzione r

Una Introduzione ad R: parte II

Riccardo Rigon, Matteo Dall’Amico

C - Se si disegna ora il grafico delle portate:

>plot(prt,xlab="Anno",ylab="Portate m^3/s")

0200

400

600

800

1000

1200

1400

Anno

Port

ate

m^3/s

1990 1995 2000 2005

93

Tuesday, March 6, 12

Page 96: 9   introduzione r

Una Introduzione ad R: parte II

Riccardo Rigon, Matteo Dall’Amico

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.

94

Tuesday, March 6, 12

Page 97: 9   introduzione r

Una Introduzione ad R: parte II

Riccardo Rigon, Matteo Dall’Amico

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.

94

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.

Tuesday, March 6, 12

Page 98: 9   introduzione r

Una Introduzione ad R: parte II

Riccardo Rigon, Matteo Dall’Amico

100

200

300

400

Anno

Port

ate

m^3/s

Jan Mar May Jul Sep Nov

95

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")

Tuesday, March 6, 12

Page 99: 9   introduzione r

Una Introduzione ad R: parte II

Riccardo Rigon, Matteo Dall’Amico

Istogramma delle portate tra il 1990 e il 2005:

Histogram of coredata(prt)

coredata(prt)

Frequency

0 500 1000 1500

0500

1000

1500

2000

2500

96

Tuesday, March 6, 12

Page 100: 9   introduzione r

Una Introduzione ad R: parte II

Riccardo Rigon, Matteo Dall’Amico

Istogramma delle portate tra il 1990 e il 2005:

> hist(coredata(prt),breaks=20)

Histogram of coredata(prt)

coredata(prt)

Frequency

0 500 1000 1500

0500

1000

1500

97

Tuesday, March 6, 12

Page 101: 9   introduzione r

Una Introduzione ad R: parte II

Riccardo Rigon, Matteo Dall’Amico

Histogram of coredata(prt)

coredata(prt)

Frequency

0 200 400 600 800 1000 1200 1400

0100

200

300

400

500

600

Istogramma delle portate tra il 1990 e il 2005:

> hist(coredata(prt),breaks=80)

98

Tuesday, March 6, 12

Page 102: 9   introduzione r

Una Introduzione ad R: parte II

Riccardo Rigon, Matteo Dall’Amico

1990 1992 1994 1996 1998 2000 2002 2004

0200

400

600

800

1000

1200

1400

BoxPlot delle portate tra il 1990 e il 2005

> as.factor(format(ymd,format="%Y"))->fyear>boxplot(coredata(prt)~fyear)

99

Tuesday, March 6, 12

Page 103: 9   introduzione r

Una Introduzione ad R: parte II

Riccardo Rigon, Matteo Dall’Amico

Un altro Caso:la lettura e l’analisi di dati provenienti dagli annali idrologici

100

Tuesday, March 6, 12

Page 104: 9   introduzione r

Una Introduzione ad R: parte II

Riccardo Rigon, Matteo Dall’Amico

Quello 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, eseguiamo allora i comandi:

101

Tuesday, March 6, 12

Page 105: 9   introduzione r

Una Introduzione ad R: parte II

Riccardo Rigon, Matteo Dall’Amico

#per vedere i files della directory in cui si sta lavorando

list.files()

102

Tuesday, March 6, 12

Page 106: 9   introduzione r

Una Introduzione ad R: parte II

Riccardo Rigon, Matteo Dall’Amico

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.strings=-1)

Per ottenere una completa spiegazione della sintassi del comando, si può usare:

?read.table()

Il risultato è immagazzinato nella variabile "data".

103

Tuesday, March 6, 12

Page 107: 9   introduzione r

Una Introduzione ad R: parte II

Riccardo Rigon, Matteo Dall’Amico

104

Tuesday, March 6, 12

Page 108: 9   introduzione r

Una Introduzione ad R: parte II

Riccardo Rigon, Matteo Dall’Amico

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

L'oggetto "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.

105

Tuesday, March 6, 12

Page 109: 9   introduzione r

Una Introduzione ad R: parte II

Riccardo Rigon, Matteo Dall’Amico

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 l'opportuno menu' a tendina.

106

Tuesday, March 6, 12

Page 110: 9   introduzione r

Una Introduzione ad R: parte II

Riccardo Rigon, Matteo Dall’Amico

107

Tuesday, March 6, 12

Page 111: 9   introduzione r

Una Introduzione ad R: parte II

Riccardo Rigon, Matteo Dall’Amico

108

> 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 198850 Levels: 1925 1928 1929 1930 1931 1932 1934 ... 1988

> length(data[,1])[1] 58

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

Ci sono dunque 8 righe che sono ripetute.Quali sono?

Tuesday, March 6, 12

Page 112: 9   introduzione r

Una Introduzione ad R: parte II

Riccardo Rigon, Matteo Dall’Amico

109

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

dobbiamo dire di non considerare gli NA

Tuesday, March 6, 12

Page 113: 9   introduzione r

Una Introduzione ad R: parte II

Riccardo Rigon, Matteo Dall’Amico

109

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

dobbiamo dire di non considerare gli NA

> max(data[duplic[1],],na.rm=TRUE)[1] 1925

dobbiamo dire di escludere la prima colonna

Tuesday, March 6, 12

Page 114: 9   introduzione r

Una Introduzione ad R: parte II

Riccardo Rigon, Matteo Dall’Amico

110

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

in tutte le colonne a parte la prima (Year)

non considera gli NAprimo elemento del vettore

Tuesday, March 6, 12

Page 115: 9   introduzione r

Una Introduzione ad R: parte II

Riccardo Rigon, Matteo Dall’Amico

111

> 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

Tuesday, March 6, 12

Page 116: 9   introduzione r

Una Introduzione ad R: parte II

Riccardo Rigon, Matteo Dall’Amico

111

> 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

stampa a video l’anno in cui c’è un record ripetuto mettendo alla fine i “:”

Tuesday, March 6, 12

Page 117: 9   introduzione r

Una Introduzione ad R: parte II

Riccardo Rigon, Matteo Dall’Amico

111

> 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

stampa a video l’anno in cui c’è un record ripetuto mettendo alla fine i “:”

stampa a video il massmo

Tuesday, March 6, 12

Page 118: 9   introduzione r

Una Introduzione ad R: parte II

Riccardo Rigon, Matteo Dall’Amico

111

> 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

stampa a video l’anno in cui c’è un record ripetuto mettendo alla fine i “:”

stampa a video il massmo

COSA MANCA? dobbiamo considerare che anche il dato precedente a “duplic”

Tuesday, March 6, 12

Page 119: 9   introduzione r

Una Introduzione ad R: parte II

Riccardo Rigon, Matteo Dall’Amico

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]

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.

112

Tuesday, March 6, 12

Page 120: 9   introduzione r

Una Introduzione ad R: parte II

Riccardo Rigon, Matteo Dall’Amico

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 113

Tuesday, March 6, 12

Page 121: 9   introduzione r

Una Introduzione ad R: parte II

Riccardo Rigon, Matteo Dall’Amico

114

Tuesday, March 6, 12

Page 122: 9   introduzione r

Una Introduzione ad R: parte II

Riccardo Rigon, Matteo Dall’Amico

Per fare l'istogramma (non normalizzato) dei dati:

hist(data1h)

L'istogramma 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")

115

Tuesday, March 6, 12

Page 123: 9   introduzione r

Una Introduzione ad R: parte II

Riccardo Rigon, Matteo Dall’Amico

Istogramma precipitazioni massime 1 h

Precipitazioni Orarie

Freq

uenz

a

20 40 60 80

02

46

810

1214

116

Tuesday, March 6, 12

Page 124: 9   introduzione r

Una Introduzione ad R: parte II

Riccardo Rigon, Matteo Dall’Amico

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) -> xplot(x,xlab="h[mm]",ylab="P[H<h]",main="Frequenza di non superamento")

117

Tuesday, March 6, 12

Page 125: 9   introduzione r

Una Introduzione ad R: parte II

Riccardo Rigon, Matteo Dall’Amico

20 40 60 80

0.0

0.2

0.4

0.6

0.8

1.0

Frequenza di non superamento

h[mm]

P[H<h]

●●●●●

●●●●●

●●●●●

●●●●●●●

●●●●●●

●●●●●●●

●●●●

●●

●●

118

Tuesday, March 6, 12

Page 126: 9   introduzione r

Distribuzioni in R

Pal

Mon

dri

an -

Vie

w o

f th

e d

un

es, 1

90

9

Riccardo Rigon

Tuesday, March 6, 12

Page 127: 9   introduzione r

Distribuzioni in R

Riccardo Rigon

120

Sommario

Se c’e’ da rubare ruboPablo Picasso

Tuesday, March 6, 12

Page 128: 9   introduzione r

Distribuzioni in R

Riccardo Rigon

120

Sommario

• Nella lezione presente illustremo come calcolare alcune distribuzioni in R

Se c’e’ da rubare ruboPablo Picasso

Tuesday, March 6, 12

Page 129: 9   introduzione r

Distribuzioni in R

Riccardo Rigon

121

Distribuzioni in R

4

> 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

Tuesday, March 6, 12

Page 130: 9   introduzione r

Distribuzioni in R

Riccardo Rigon

122

> 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

Distribuzioni in R

Tuesday, March 6, 12

Page 131: 9   introduzione r

Distribuzioni in R

Riccardo Rigon

123

Distribuzioni in R

uniform on [0,1]

x

Density

0.0 0.2 0.4 0.6 0.8 1.0

0.0

0.2

0.4

0.6

0.8

1.0

1.2

1.4

> x=runif(100) # get the random numbers> hist(x,probability=TRUE,col=gray(.9),main="uniform on [0,1]")

Tuesday, March 6, 12

Page 132: 9   introduzione r

Distribuzioni in R

Riccardo Rigon

124

> 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

Distribuzioni in R

Tuesday, March 6, 12

Page 133: 9   introduzione r

Distribuzioni in R

Riccardo Rigon

125

> 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 …

First make the log transform, and fit the normal density

Tuesday, March 6, 12

Page 134: 9   introduzione r

Distribuzioni in R

Riccardo Rigon

126

0 5 10 15 20

0.00

0.05

0.10

0.15

0.20

Distribuzione normale

x

dn

orm

(x,

m =

10

, sd

= 2

)

>curve(dnorm(x,m=10,sd=2),from=0,to=20,main="Distribuzione normale")

Tuesday, March 6, 12

Page 135: 9   introduzione r

Distribuzioni in R

Riccardo Rigon

127

> curve(pnorm(x,m=10,sd=2),from=0,to=20,main="Distribuzione normale")

0 5 10 15 20

0.0

0.2

0.4

0.6

0.8

1.0

Distribuzione normale

x

pn

orm

(x,

m =

10

, sd

= 2

)

Tuesday, March 6, 12

Page 136: 9   introduzione r

Distribuzioni in R

Riccardo Rigon

128

> qnorm(0.6,m=10,sd=2)[1] 10.50669

0 5 10 15 20

0.0

0.2

0.4

0.6

0.8

1.0

Distribuzione normale

x

pnorm

(x, m

= 1

0, sd =

2)

Tuesday, March 6, 12

Page 137: 9   introduzione r

C. W

hit

e, P

art

of

“ D

rop

s of

Rai

n”,

19

67

Riccardo Rigon, Matteo Dall’Amico

Writing Functions in R

Tuesday, March 6, 12

Page 138: 9   introduzione r

E. Seier

Writing Functions in R

130

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

Tuesday, March 6, 12

Page 139: 9   introduzione r

E. Seier

Writing Functions in R

131

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.

Tuesday, March 6, 12

Page 140: 9   introduzione r

E. Seier

Writing Functions in R

132

Basic syntax

name<-function(x,y) {

commands

;output}

You decide the name of the function

Inside the parentheses you can write all the input you want and give them the name you want

We need to type ; after every command

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

##

Tuesday, March 6, 12

Page 141: 9   introduzione r

E. Seier

Writing Functions in R

133

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:

Tuesday, March 6, 12

Page 142: 9   introduzione r

E. Seier

Writing Functions in R

134

Function citau:

Tuesday, March 6, 12

Page 143: 9   introduzione r

E. Seier

Writing Functions in R

135

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){

Tuesday, March 6, 12

Page 144: 9   introduzione r

E. Seier

Writing Functions in R

136

Calculations:md=median(x);m=mean(x) ; v=var(x);tau=mean(abs(x-md));del=(m-md)/tau;n=length(x);c=n/(n-1); 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);

We use the following commands:length: # number of observationsmean median Var: variancelog: natural logexp(a) : e^a sqrt: square root^ * / + -

Tuesday, March 6, 12

Page 145: 9   introduzione r

E. Seier

Writing Functions in R

137

The outputWe 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}

Tuesday, March 6, 12

Page 146: 9   introduzione r

E. Seier

Writing Functions in R

138

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)

Tuesday, March 6, 12

Page 147: 9   introduzione r

E. Seier

Writing Functions in R

139

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.

Tuesday, March 6, 12

Page 148: 9   introduzione r

E. Seier

Writing Functions in R

140

rataus<-function(x,y,z){

md1=median(x);

md2=median(y);

m1=mean(x) ;

m2=mean(y);

v1=var(x);

v2=var(y);

tau1=mean(abs(x-md1));

tau2=mean(abs(y-md2));

del1=(m1-md1)/tau1;

del2=(m2-md2)/tau2;

n1=length(x);

n2=length(y);

c1=n1/(n1-1);

c2=n2/(n2-1);

gam1=v1/(tau1^2);

gam2=v2/(tau2^2);

varlnt1=(del1+gam1-1)/n1;

varlnt2=(del2+gam2-1)/n2;

forrat=log((c1*tau1)/(c2*tau2));

serat=sqrt(varlnt1+varlnt2);

forlow=forrat-z*serat;

forup=forrat+z*serat;

ratau=exp(forrat);

lowerend=exp(forlow);

upperend=exp(forup);

ci<- c(exinf,ratau,exsup); ci}

Tuesday, March 6, 12

Page 149: 9   introduzione r

E. Seier

Writing Functions in R

141

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 periodogramperioplot<-function(x){adjx=x-mean(x); # substracts the mean of the series tf=fft(adjx); # calculates finite Fourier transformnf=length(tf); n2=nf/2+1; # decides the number of frequencies pritf<-tf[c(1:n2)]; # takes the elements of the Fourier transformintensity<-(abs(pritf^2))/nf; # calculates the ordinates of

periodogramnyquist=1/2; pfreq<-seq(0,nf/2,by=1); # preparation for frequencies freq<-pfreq/(length(pfreq)-1)*nyquist; # calculates frequenciesplot(freq,intensity,type="l")}

Tuesday, March 6, 12

Page 150: 9   introduzione r

E. Seier

Writing Functions in R

142

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)

Tuesday, March 6, 12

Page 151: 9   introduzione r

E. Seier

Writing Functions in R

143

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")}

Tuesday, March 6, 12

Page 152: 9   introduzione r

E. Seier

Writing Functions in R

144

.

Assuming that we have previously read the data of the sea temperature, to execute the funct ion 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)

Tuesday, March 6, 12

Page 153: 9   introduzione r

E. Seier

Writing Functions in R

145

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 %*%.

Tuesday, March 6, 12

Page 154: 9   introduzione r

E. Seier

Writing Functions in R

146

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” )

}

Tuesday, March 6, 12

Page 155: 9   introduzione r

E. Seier

Writing Functions in R

147

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.288,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 functionspecpgram that estimates thespectrum using a different method.

Tuesday, March 6, 12

Page 156: 9   introduzione r

E. Seier

Writing Functions in R

148

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’?

Tuesday, March 6, 12

Page 157: 9   introduzione r

Bibliografia, Approfondimenti, Web

Riccardo Rigon

•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, 2003

•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, Principali tecniche di regressione con R, http://cran.r-project.org/doc/contrib/Ricci-regression-it.pdf, 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

La madre di tutte le informazioni su R è il sito http://www.r-project.org

Tuesday, March 6, 12

Page 158: 9   introduzione r

E. Seier

Writing Functions in R

150

Grazie per l’attenzione!

G.U

lric

i -

20

00

?

Tuesday, March 6, 12