1. Una introduzione ad R
parte I
C. White, Part of “ Drops of Rain”, 1967
Riccardo Rigon, Matteo Dall’Amico
Tuesday, March 6, 12
2. “La potenza è nulla senza
controllo”
Pubblicità Pirelli
Tuesday, March 6, 12
3. 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’Amico
Tuesday, March 6, 12
4. 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 diversi
Corrado 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’Amico
Tuesday, March 6, 12
5. Una Introduzione ad R: parte I
R: un ambiente opensource per l’analisi statistica dei dati
Installazione
Installazione
Corrado Caudek
5
Riccardo Rigon, Matteo Dall’Amico
Tuesday, March 6, 12
6. Una Introduzione ad R: parte II
6
Riccardo Rigon, Matteo Dall’Amico
Tuesday, March 6, 12
7. Una Introduzione ad R: parte I
R: un ambiente opensource per l’analisi statistica dei dati
Installazione
Installazione
Corrado Caudek
7
Riccardo Rigon, Matteo Dall’Amico
Tuesday, March 6, 12
8. Una Introduzione ad R: parte I
R: un ambiente opensource per l’analisi statistica dei dati
Installazione
Installazione
Corrado Caudek
8
Riccardo Rigon, Matteo Dall’Amico
Tuesday, March 6, 12
9. 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 di
Corrado 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’Amico
Tuesday, March 6, 12
10. Una Introduzione ad R: parte I
R: un ambiente opensource per l’analisi statistica dei dati
Installazione
Pacchetti
Pacchetti
Corrado Caudek
10
Riccardo Rigon, Matteo Dall’Amico
Tuesday, March 6, 12
11. 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’Amico
Tuesday, March 6, 12
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 dati
Corrado 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’Amico
Tuesday, March 6, 12
13. 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’Amico
Tuesday, March 6, 12
14. Una Introduzione ad R: parte I
Le funzionalità dell’ambiente R
Sommario
Elementi di sintassi
Iniziare e chiudere una sessione di R
Aritmetica
Corrado 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’Amico
Tuesday, March 6, 12
15. 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’Amico
Tuesday, March 6, 12
16. 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+3
Corrado 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’Amico
Tuesday, March 6, 12
17. 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’Amico
Tuesday, March 6, 12
18. 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 <- 2
Corrado Caudek
> a
[1] 2
L’operatore “<-” si ottiene digitando “<” seguito da “-”
(senza spazi tra i due).
18
Riccardo Rigon, Matteo Dall’Amico
Tuesday, March 6, 12
19. 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’Amico
Tuesday, March 6, 12
20. 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), ma
Corrado 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’Amico
Tuesday, March 6, 12
21. 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’Amico
Tuesday, March 6, 12
22. 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 <- 2
Corrado Caudek
> a
[1] 2
> a + 2
[1] 4
Queste stesse le operazioni aritmetiche possono essere
applicate ai vettori.
22
Riccardo Rigon, Matteo Dall’Amico
Tuesday, March 6, 12
23. 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:
> x
Corrado 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’Amico
Tuesday, March 6, 12
24. 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’Amico
Tuesday, March 6, 12
25. 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 selezionati
Corrado 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’Amico
Tuesday, March 6, 12
26. 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 calcolare
Corrado 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’Amico
Tuesday, March 6, 12
27. 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 della
Corrado 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’Amico
Tuesday, March 6, 12
28. 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’Amico
Tuesday, March 6, 12
29. 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
n
Corrado 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’Amico
Tuesday, March 6, 12
30. 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 =
x
Corrado 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’Amico
Tuesday, March 6, 12
31. 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 .x
Corrado 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’Amico
Tuesday, March 6, 12
32. 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’Amico
Tuesday, March 6, 12
33. 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 terzo
Corrado 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’Amico
Tuesday, March 6, 12
34. 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 in
Corrado 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’Amico
Tuesday, March 6, 12
35. 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’Amico
Tuesday, March 6, 12
36. Una Introduzione ad R: parte I
Le funzionalità dell’ambiente R
La matrice dei dati
Definizione
Matrice dei dati
Corrado 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’Amico
Tuesday, March 6, 12
37. 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 variabili
Corrado Caudek
quantiative sono dette vettori.
37
Riccardo Rigon, Matteo Dall’Amico
Tuesday, March 6, 12
38. 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’Amico
Tuesday, March 6, 12
39. 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 la
Corrado 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’Amico
Tuesday, March 6, 12
40. 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’Amico
Tuesday, March 6, 12
41. 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’Amico
Tuesday, March 6, 12
42. 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 (primo
Corrado 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’Amico
Tuesday, March 6, 12
43. 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’Amico
Tuesday, March 6, 12
44. 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 dal
Corrado 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’Amico
Tuesday, March 6, 12
45. 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’Amico
Tuesday, March 6, 12
46. 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’Amico
Tuesday, March 6, 12
47. 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’Amico
Tuesday, March 6, 12
48. 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, che
Corrado 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’Amico
Tuesday, March 6, 12
49. 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, ma
Corrado 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’Amico
Tuesday, March 6, 12
50. 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 alla
Corrado 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’Amico
Tuesday, March 6, 12
51. 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’Amico
Tuesday, March 6, 12
52. 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 dataframe
Corrado 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’Amico
Tuesday, March 6, 12
53. 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’Amico
Tuesday, March 6, 12
54. 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’Amico
Tuesday, March 6, 12
55. 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 del
Corrado 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’Amico
Tuesday, March 6, 12
56. 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’Amico
Tuesday, March 6, 12
57. 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’Amico
Tuesday, March 6, 12
58. 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’Amico
Tuesday, March 6, 12
59. 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’Amico
Tuesday, March 6, 12
60. 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’Amico
Tuesday, March 6, 12
61. 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’Amico
Tuesday, March 6, 12
62. 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.086420
Corrado 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’Amico
Tuesday, March 6, 12
63. 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.11
Corrado 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’Amico
Tuesday, March 6, 12
64. 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 1
Corrado Caudek
> sd(education)
[1] 29.76083
> sqrt(var(education))
[1] 29.76083
64
Riccardo Rigon, Matteo Dall’Amico
Tuesday, March 6, 12
65. 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’Amico
Tuesday, March 6, 12
66. 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, utilizzeremmo
Corrado Caudek
l’operatore :
seq()
rep()
66
Riccardo Rigon, Matteo Dall’Amico
Tuesday, March 6, 12
67. 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’Amico
Tuesday, March 6, 12
68. 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 individua
Corrado 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’Amico
Tuesday, March 6, 12
69. 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’Amico
Tuesday, March 6, 12
70. 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’Amico
Tuesday, March 6, 12
71. 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’Amico
Tuesday, March 6, 12
72. 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’Amico
Tuesday, March 6, 12
73. 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 omettere
Corrado 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’Amico
Tuesday, March 6, 12
74. 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:
> X
Corrado 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’Amico
Tuesday, March 6, 12
75. 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:
> X
Corrado 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’Amico
Tuesday, March 6, 12
76. Un introduzione ad R
parte II
C. White, Part of “ Drops of Rain”, 1967
Riccardo Rigon, Matteo Dall’Amico
Tuesday, March 6, 12
77. Una Introduzione ad R: parte II
La potenza è nulla senza controllo
Pubblicità della Pirelli
Sommario
77
Riccardo Rigon, Matteo Dall’Amico
Tuesday, March 6, 12
78. 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
77
Riccardo Rigon, Matteo Dall’Amico
Tuesday, March 6, 12
79. 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”
78
Riccardo Rigon, Matteo Dall’Amico
Tuesday, March 6, 12
80. Una Introduzione ad R: parte II
Un Caso:
l’analisi delle portate dell’Adige a Ponte S. Lorenzo
79
Riccardo Rigon, Matteo Dall’Amico
Tuesday, March 6, 12
81. 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()
80
Riccardo Rigon, Matteo Dall’Amico
Tuesday, March 6, 12
82. Una Introduzione ad R: parte II
81
Riccardo Rigon, Matteo Dall’Amico
Tuesday, March 6, 12
83. Una Introduzione ad R: parte II
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/".
> 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)
82
Riccardo Rigon, Matteo Dall’Amico
Tuesday, March 6, 12
84. 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).
83
Riccardo Rigon, Matteo Dall’Amico
Tuesday, March 6, 12
85. 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).
83
Riccardo Rigon, Matteo Dall’Amico
Tuesday, March 6, 12
86. 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. 84
Riccardo Rigon, Matteo Dall’Amico
Tuesday, March 6, 12
87. 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)
85
Riccardo Rigon, Matteo Dall’Amico
Tuesday, March 6, 12
88. 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”. 86
Riccardo Rigon, Matteo Dall’Amico
Tuesday, March 6, 12
89. 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
87
Riccardo Rigon, Matteo Dall’Amico
Tuesday, March 6, 12
90. 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.
88
Riccardo Rigon, Matteo Dall’Amico
Tuesday, March 6, 12
91. 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
NA's : 1.00
89
Riccardo Rigon, Matteo Dall’Amico
Tuesday, March 6, 12
92. 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
90
Riccardo Rigon, Matteo Dall’Amico
Tuesday, March 6, 12
93. 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:
91
Riccardo Rigon, Matteo Dall’Amico
Tuesday, March 6, 12
94. 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
92
Riccardo Rigon, Matteo Dall’Amico
Tuesday, March 6, 12
95. 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
93
Riccardo Rigon, Matteo Dall’Amico
Tuesday, March 6, 12
96. 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.
94
Riccardo Rigon, Matteo Dall’Amico
Tuesday, March 6, 12
97. 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.
94
Riccardo Rigon, Matteo Dall’Amico
Tuesday, March 6, 12
98. 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 95
Riccardo Rigon, Matteo Dall’Amico
Tuesday, March 6, 12
99. 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)
96
Riccardo Rigon, Matteo Dall’Amico
Tuesday, March 6, 12
100. 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) 97
Riccardo Rigon, Matteo Dall’Amico
Tuesday, March 6, 12
101. 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)
98
Riccardo Rigon, Matteo Dall’Amico
Tuesday, March 6, 12
102. 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
99
Riccardo Rigon, Matteo Dall’Amico
Tuesday, March 6, 12
103. Una Introduzione ad R: parte II
Un altro Caso:
la lettura e l’analisi di dati provenienti dagli annali idrologici
100
Riccardo Rigon, Matteo Dall’Amico
Tuesday, March 6, 12
104. Una Introduzione ad R: parte II
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
Riccardo Rigon, Matteo Dall’Amico
Tuesday, March 6, 12
105. Una Introduzione ad R: parte II
#per vedere i files della directory in cui si sta lavorando
list.files()
102
Riccardo Rigon, Matteo Dall’Amico
Tuesday, March 6, 12
106. 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".
103
Riccardo Rigon, Matteo Dall’Amico
Tuesday, March 6, 12
107. Una Introduzione ad R: parte II
104
Riccardo Rigon, Matteo Dall’Amico
Tuesday, March 6, 12
108. 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
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
Riccardo Rigon, Matteo Dall’Amico
Tuesday, March 6, 12
109. 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 l'opportuno menu' a tendina.
106
Riccardo Rigon, Matteo Dall’Amico
Tuesday, March 6, 12
110. Una Introduzione ad R: parte II
107
Riccardo Rigon, Matteo Dall’Amico
Tuesday, March 6, 12
111. 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?
108
Riccardo Rigon, Matteo Dall’Amico
Tuesday, March 6, 12