Sei sulla pagina 1di 16

Capitolo 1

Una breve introduzione ad R.


Lambiente di analisi statistica e graca denominato R `e anche un linguaggio di pro-
grammazione che permette allutente di programmare algoritmi o di utilizzare programmi
scritti da altri.
Lambiente R `e nato, negli anni 1990, come strumento didattico sostitutivo del software
commerciale S-plus, ad opera di Ross Ihaka e Robert Gentleman (Statistics Department
- University of Auckland), detti anche R & R.
L R Core Team, formatosi nel 1997, conserva, mantiene aggiornato e modica
larchivio del codice sorgente alla homepage uciale: http://www.r-project.org.
Connettendosi alla suddetta homepage, compare la schermata in Figura 1.1.
Figura 1.1: Homepage uciale di R-project.
Cliccando sul link What is R, a sinistra sotto About R, si ha accesso ad informazioni
pi` u dettagliate su cosa sia e come sia organizzato lambiente R.
1
2 CAPITOLO 1. UNA BREVE INTRODUZIONE AD R.
Cliccando su Manuals, in basso a sinistra sotto Documentation, si ha accesso ad
una serie di manuali sullambiente R.
1.1 Scaricare ed installare R.
Sulla homepage http://www.r-project.org (vedi Figura 1.1) a sinistra, sotto Down-
load, Packages, appare il link al CRAN (Comprehensive R Archive Network). Il
CRAN `e una rete di ftp e web servers, sparsi per il mondo, che conservano versioni iden-
tiche ed aggiornate dei codici e della documentazione di R. Cliccando sul link appare l
elenco delle URL di vari mirrors.
Selezionando, per esempio, l URL http://cran.mirror.garr.it/mirrors/CRAN/ del
Garr Mirror di Milano appare la pagina web in Figura 1.2 dalla quale si potr` a scegliere il
download per Windows, Mac o Linux.
Figura 1.2: Pagina del server locale di R.
Selezionando, per esempio, Download R for Windows e scegliendo base nella scher-
mata successiva, appare la pagina in Figura 1.3 dalla quale, cliccando su Download R
3.1.1 for Windows, si pu` o scaricare leseguibile R-3.1.1-win.exe.
Per installare (la versione base di) R cliccare sul le scaricato R-3.1.1-win.exe e
seguire le istruzioni. La procedura pi` u semplice `e di accettare, durante linstallazione, le
impostazioni predenite (default).
Terminata la procedura di installazione sul desktop dovrebbe apparire licona blu di
R.
Per gli utenti Mac, la procedura `e simile alla precedente.
1.2. LA CONSOLE R. 3
Per gli utenti Linux, probabilmente il modo migliore per installare R `e tramite il
package manager. Si pu`o trovare R cercando r-base-core. Istruzione dettagliate sulla
procedura di installazione sono disponibili insieme ai les di installazione.
Figura 1.3: Pagina dalla quale scaricare leseguibile di installazione.
1.2 La console R.
Per avviare R si pu`o operare un doppio click sullicona sul desktop.
Allavvio, appare sul monitor linterfaccia di R in Figura 1.4 con allinterno la nestra
chiamata R console.
Tutte le volte che si avvia R, allinterno della console appare un testo in blu riguardante
la versione di R in uso, questioni di copyright ed altro.
Immediatamente sotto questo testo appare la linea di comando (command prompt)
contrassegnata da un segno > rosso come in basso:
>
Un cursore lampeggiante a destra del > indica che R `e pronto per ricevere i nostri
comandi.
Questo `e il punto di partenza di tutto ci` o si voglia fare con R.
Per settare la working directory (wd) di R in una particolare cartella si usa il comando
setwd(). Settiamo la wd su una cartella C:/home/stat precedentemente creata:
> setwd("C:/home/stat")
4 CAPITOLO 1. UNA BREVE INTRODUZIONE AD R.
Figura 1.4: La console di R.
Al termine di ogni sessione di lavoro, per chiudere R si usa Exit dal menu File oppure,
in console, il comando
> q()
Quando si chiude R ci viene chiesto se salvare la workspace image. Per ritrovare il
nostro lavoro cliccheremo sempre su Si.
Alla sessione successiva, per ritrovare il lavoro svolto, apriremo R cliccando sulla sua
icona nella wd C:/home/stat.
Per cominciare a familiarizzare con R, intanto notiamo che pu` o essere usato come
comune calcolatrice. I simboli per addizione, sottrazione, moltiplicazione, divisione e
potenza sono, rispettivamente: +,-,*,/,^.
Per esempio, dopo aver avviato R, scrivendo in console 5-2 e premendo il tasto Invio
si ottiene
> 5-2
[1] 3
>
cio`e il risultato 3 delloperazione richiesta e, al rigo seguente, un segno > con cursore
lampeggiante indicante che R `e pronto a ricevere altri comandi.
Il simbolo [1] prima del risultato 3 indica con quale componente delloutput inizia il
rigo. In questo caso, in cui loutput `e composto da un solo numero, non `e rilevante.
Per esempio, per visionare la sequenza dei numeri interi da 1 a 50, si pu`o digitare 1:50
e premere Invio, ottenendo:
> 1:50
[1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
[26] 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
>
1.3. VECTOR, DATA.FRAME E FACTOR. 5
Il [26] sul secondo rigo delloutput indica che il primo oggetto in questo rigo `e il
26-esimo componente delloutput.
Se dopo aver premuto il tasto Invio appare un segno + sul rigo sottostante, invece del
>, vuol dire che il comando inviato non `e completo ed R sta attendendo che sia completato.
Per esempio scrivendo 5- e premendo Invio appare un +. Scrivendo ancora 2 e premendo
Invio, R acquisisce che il comando `e completo e fornisce in output il risultato, come
mostrato in basso
> 5-
+ 2
[1] 3
>
Caso frequente di comando non completo `e quello in cui ci si dimentica la chiusura di
parentesi, come illustrato in basso
> 2^3*(2+5
+ )
[1] 56
>
Per memorizzare il risultato delloperazione in un oggetto a:
> a <- 2^3*(2+5)
ove il simbolo <- dispone che il risultato delloperazione alla sua destra venga memo-
rizzato nelloggetto alla sua sinistra.
Infatti, digitando a e premendo Invio si visualizza il contenuto di a, ossia il risultato
(56) delloperazione precedente.
> a
[1] 56
1.3 Vector, data.frame e factor.
In questo corso capiter` a spesso di usare oggetti del tipo vector, data.frame e factor.
Un vector `e un oggetto che contiene dati di stesso tipo in un particolare ordine.
La sintassi per denire un vector `e c().
Per esempio, per memorizzare in x il vector composto da 2, 4, 5, 7, 9:
> x<-c(2,5,3,7,9)
Per visionare il contenuto di x:
> x
[1] 2 5 3 7 9
Per visionare il secondo dato in x:
6 CAPITOLO 1. UNA BREVE INTRODUZIONE AD R.
> x[2]
[1] 5
Quando si usano come argomenti di funzioni aritmetiche un vector ed un numero, R
applica la funzione a ciascun elemento del vector ed al numero, fornendo in risposta un
altro vector. Per esempio:
> x-4
[1] -2 1 -1 3 5
> 3*x
[1] 6 15 9 21 27
> x^2
[1] 4 25 9 49 81
> 2^x
[1] 4 32 8 128 512
Quando gli argomenti di funzioni aritmetiche sono vectors (di stessa lunghezza), le
funzioni vengono eseguite sulle coppie di elementi che occupano la stessa posizione nei
vectors ed il risultato `e ancora un vectors di stessa lunghezza. Per esempio, denito y
come segue
> y<-c(4,7,2,5,9)
risulta
> x
[1] 2 5 3 7 9
> y
[1] 4 7 2 5 9
> x+y
[1] 6 12 5 12 18
> x-y
[1] -2 -2 1 2 0
> x*y
[1] 8 35 6 35 81
> x/y
[1] 0.5000000 0.7142857 1.5000000 1.4000000 1.0000000
> x^y
[1] 16 78125 9 16807 387420489
Un vector di caratteri pu` o essere denito come un vector numerico. Per esempio:
> A<-c("a","b","c","d")
> A
[1] "a" "b" "c" "d"
Un factor dierisce da un vector di caratteri in quanto ha un ordinamento (levels)
tra i suoi elementi.
Per esempio, per denire e visionare un factor Af si pu` o usare il comando factor
come segue
1.3. VECTOR, DATA.FRAME E FACTOR. 7
> Af<-factor(c("a","b","c","d"))
> Af
[1] a b c d
Levels: a b c d
Lultimo rigo informa che, nei levels (didefault) di Af, a viene prima di b\che viene
prima di c che viene prima di d.
Per default R ordina i levels secondo lordine alfabetico.
si pu`o specicare un ordine diverso usando la specica levels nel comando factor;
per esempio
> Af <- factor(c("a","b","a","c","d"), levels=c("d","c","a","b"))
> Af
[1] a b a c d
Levels: d c a b
Per vericare a quale class appartiene un oggetto si pu` o usare il comando class:
> class(x)
[1] "numeric"
> class(A)
[1] "character"
> class(Af)
[1] "factor"
8 CAPITOLO 1. UNA BREVE INTRODUZIONE AD R.
Un data.frame `e un oggetto con una struttura rettangolare composta da vector di
stessa lunghezza, aventi ciascuno un nome e posti uno accanto allaltro.
Tutti i dati in un vector colonna devono essere dello stesso tipo (numeric, character,
factor, logical, complex number) mentre i dati in vector colonna diversi possono essere di
tipo diverso.
Si consideri per esempio il data frame ToothGrowth di R .
Per una visione compatta della struttura del data.frame ToothGrowth si pu` o usare il
comando
> str(ToothGrowth)
data.frame: 60 obs. of 3 variables:
$ len : num 4.2 11.5 7.3 5.8 6.4 10 11.2 11.2 5.2 7 ...
$ supp: Factor w/ 2 levels "OJ","VC": 2 2 2 2 2 2 2 2 2 2 ...
$ dose: num 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 ...
che ci dice in output che il data.frame `e composto dalle 60 osservazioni delle 3 variabili:
- len, che `e un vettore numerico,
- supp, che `e un factor con due levels: OJ e VC,
- dose, che `e un vettore numerico.
Per visionare il data.frame ToothGrowth in una nestra Data Editor a parte (vedi
Figura 1.5):
> fix(ToothGrowth)
Figura 1.5: La console di R.
Con il comando diretto
> ToothGrowth
1.3. VECTOR, DATA.FRAME E FACTOR. 9
il data.frame viene mostrato direttamente nella console.
Per visionare sulla console solo la testa del data.frame (ossia la riga dei nomi delle
colonne e le prime sei righe di dati)
> head(ToothGrowth)
len supp dose
1 4.2 VC 0.5
2 11.5 VC 0.5
3 7.3 VC 0.5
4 5.8 VC 0.5
5 6.4 VC 0.5
6 10.0 VC 0.5
Per visionare sulla console solo la coda del data.frame (ossia la riga dei nomi delle
colonne e le ultime sei righe di dati)
> tail(ToothGrowth)
len supp dose
55 24.8 OJ 2
56 30.9 OJ 2
57 26.4 OJ 2
58 27.3 OJ 2
59 29.4 OJ 2
60 23.0 OJ 2
Per ulteriori informazioni sul data.frame ToothGrowth si pu`o usare il comando:
> ?ToothGrowth
che fornisce come output una nestra html con varie informazioni sul data.frame.
Per visionare sulla console una particolare colonna del data.frame ToothGrowth basta
digitare il nome del data.frame seguito da un $ e dal nome della colonna. Per esempio
> ToothGrowth$dose
[1] 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 1.0 1.0 1.0 1.0 1.0 1.0 1.0
[18] 1.0 1.0 1.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 0.5 0.5 0.5 0.5
[35] 0.5 0.5 0.5 0.5 0.5 0.5 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 2.0
[52] 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0
> ToothGrowth$supp
[1] VC VC VC VC VC VC VC VC VC VC VC VC VC VC VC VC VC VC VC VC VC VC VC VC VC
[26] VC VC VC VC VC OJ OJ OJ OJ OJ OJ OJ OJ OJ OJ OJ OJ OJ OJ OJ OJ OJ OJ OJ OJ
[51] OJ OJ OJ OJ OJ OJ OJ OJ OJ OJ
Levels: OJ VC
Lultimo rigo delloutput del secondo comando specica che nel factor ordinato supp,
il level OJ precede il level VC.
Per conoscere la natura di una singola colonna si pu` o usare il comando class; per
esempio
> class(ToothGrowth$supp)
[1] "factor"
> class(ToothGrowth$dose)
[1] "numeric"
10 CAPITOLO 1. UNA BREVE INTRODUZIONE AD R.
La struttura di un data.frame `e simile ad una matrice e ci si pu` o riferire a particolari
elementi specicando le righe e le colonne. Per esempio
> ToothGrowth[2,3]
[1] 0.5
> ToothGrowth[2,]
len supp dose
2 11.5 VC 0.5
> ToothGrowth[,3]
[1] 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0
[20] 1.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5
[39] 0.5 0.5 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0
[58] 2.0 2.0 2.0
> ToothGrowth[1:5,3]
[1] 0.5 0.5 0.5 0.5 0.5
Caricare in un data.frame i dati contenuti in le
Il comando read.table `e utile per caricare allinterno di un data.frame di R i dati
contenuti in un le opportuno.
Per esempio il le crab.txt contiene le quattro colonne sex, CW, CL e CH di stessa
lunghezza.
Per caricare il contenuto del le in un data.frame di nome crabdf:
> crabdf<-read.table("dati/crab.txt",header=TRUE)
La specica header=TRUE va usata se la prima riga del le contiene i nomi delle colonne.
La dimensione del data.frame `e
> dim(crabdf)
[1] 153 4
Per visionare le prime sei righe di dati del data.frame
> head(crabdf)
sex CW CL CH
1 m 76.36 68.19 35.38
2 f 74.49 67.86 40.91
3 m 78.46 69.71 37.92
4 f 69.45 63.81 36.28
5 m 78.11 68.97 36.23
6 m 70.40 63.99 34.33
1.4. FUNCTION. 11
1.4 Function.
Oltre alle funzioni aritmetiche, in R sono predenite una serie di function (funzioni
elementari) come: exp, log, sqrt, sin, ... . Per usare una di queste funzioni si scrive
il nome della funzione seguito da due parentesi tonde allinterno dalle quali viene scritto
largomento.
Per esempio:
> exp(3)
[1] 20.08554
Quando si usa un vector come argomento di funzioni pensate per avere come argomento
un numero, R applica la funzione a ciascun elemento del vector e fornisce in risposta un
altro vector. Per esempio:
> exp(x)
[1] 7.389056 148.413159 20.085537 1096.633158 8103.083928
La funzione length conta il numero di elementi di un vector
> length(x)
[1] 5
La funzione sum calcola la somma di tutti gli elementi di un vector
> sum(x)
[1] 26
Infatti
> x[1]+x[2]+x[3]+x[4]+x[5]
[1] 26
> 2+5+3+7+9
[1] 26
La funzione mean calcola la media degli elementi di un vector, ossia `e denita, per ogni
vettore x, da
mean(x) := sum(x)/length(x) (1.4.1)
Per esempio
> mean(x)
[1] 5.2
infatti
> sum(x)/length(x)
[1] 5.2
12 CAPITOLO 1. UNA BREVE INTRODUZIONE AD R.
Sum of squares.
In R `e possibile denire delle proprie function.
Per esempio nel corso si user` a la funzione somma dei quadrati (degli scarti dalla
media). Essa `e denita per ogni vector x da
ss(x) = sum((x mean(x))
2
) (1.4.2)
La funzione ss non `e predenita in R. Per denirla:
> ss<-function(x){
+ sum((x-mean(x))^2)
+ }
Una volta denita la funzione ss, si pu` o calcolare la somma dei quadrati del vettore
x con
> ss(x)
[1] 32.8
Infatti
> sum((x-mean(x))^2)
[1] 32.8
Per calcolare la somma dei quadrati del vettore y con la funzione ss e con la denizione:
> ss(y); sum((y-mean(y))^2)
[1] 29.2
[1] 29.2
La ss misura la dispersione (rispetto alla media) presente in un vettore di dati.
Il valore della ss per`o aumenta allaumentare della length del vettore, indipendente-
mente dalla dispersione presente nei dati.
Si rende quindi necessario normalizzare il valore della ss rispetto alla length del
vettore.
Ci` o viene fatto con il calcolo della varianza, di seguito denita.
Varianza
La varianza di un vector numerico x `e la quantit` a var(x) denita da
var(x) := ss(x)/(length(x) 1) (1.4.3)
La funzione var, predenita in R, calcola la varianza di un vector numerico.
Per calcolare la varianza del vector x denito precedentemente
> var(x)
[1] 8.2
Infatti
1.4. FUNCTION. 13
> ss(x)/(length(x)-1)
[1] 8.2
Per calcolare la varianza del vettore y con la funzione var e con la denizione:
> var(y); ss(y)/(length(y)-1)
[1] 7.3
[1] 7.3
14 CAPITOLO 1. UNA BREVE INTRODUZIONE AD R.
Esercizio. Si deniscano i vettori di dati x1,x2,x3,x4 come segue
> x1<-c(1,3,5,7,9)
> x2<-c(3,4,5,6,7)
> x3<-c(4,6,8,10,12)
> x4<-c(1,2,3,4,5,6,7,8,9)
Un graco dei valori dei quattro vettori `e mostrata in Figura 1.6
G G G G G
G G G G G
G G G G G
G G G G G G G G G
2 4 6 8 10 12
x
1
x
2
x
3
x
4
Figura 1.6: Rappresentazione graca dei vettori x1, x2, x3, x4.
I valori di length, mean, ss e var dei precedenti vettori, sono
> c(length(x1),length(x2),length(x3),length(x4))
[1] 5 5 5 9
> c(mean(x1),mean(x2),mean(x3),mean(x4))
[1] 5 5 8 5
> c(ss(x1),ss(x2),ss(x3),ss(x4))
[1] 40 10 40 60
> c(var(x1),var(x2),var(x3),var(x4))
[1] 10.0 2.5 10.0 7.5
Guardando i valori di mean, si nota che i vettori x1, x2, x4 sono centrati sullo stesso
valore (5), mentre il vettore x3 `e centrato su un valore maggiore (8).
Guardando i valori di ss, si nota che il vettore x2 `e meno disperso di x1 ed x3.
La ss(x4) non pu`o essere confrontata con le precedenti essendo length(x4) diversa dalle
length di x1, x2, x3.
Guardando i valori di var, si deduce che x4 `e meno disperso di x1 ed x3 ma `e pi` u
disperso di x2.
1.4. FUNCTION. 15
Somma dei prodotti
Si chiama somma dei prodotti (degli scarti dalla media) tra due vector x ed y il
numero sp(x, y) denito da:
sp(x, y) := sum((x mean(x)) (y mean(y))). (1.4.4)
La funzione somma dei prodotti non `e predenita in R. Per denirla:
> sp<-function(x,y){
+ sum((x-mean(x))*(y-mean(y)))
+ }
Per calcolare la somma dei prodotti dei vettori x ed y utilizzando la funzione sp appena
denita:
> sp(x,y)
[1] 24.6
Infatti
> sum((x-mean(x))*(y-mean(y)))
[1] 24.6
In Figura 1.7 sono rappresentati i punti di coordinate (x,y) (puntini neri) ed il punto
di coordinate (mean(x),mean(y)) (segno +).
G
G
G
G
G
2 3 4 5 6 7 8 9
2
3
4
5
6
7
8
9
x
y
Figura 1.7: Rappresentazione graca dei punti x,y e del punto (mean(x),mean(y)).
La sp(x,y) `e una misura di come i punti di coordinate (x,y) sono dispersi nel piano
rispetto al punto (mean(x),mean(y)).
La sp(x,y) pu` o assumere valori > 0 o < 0 a seconda che nella sommatoria prevalgano
i termini positivi o negativi.
16 CAPITOLO 1. UNA BREVE INTRODUZIONE AD R.
Ogni punto da un contributo positivo (risp. negativo) alla sp(x,y) se si trova nel primo
o nel terzo (risp. secondo o quarto) quadrante rispetto a (mean(x),mean(y)).
Ciascun contributo sar` a tanto pi` u grande quanto pi` u il punto `e lontano da (mean(x),mean(y))
e vicino alla bisettrice del quadrante.
Si noti che la sp(x,y) aumenta allaumentare del numero degli elementi del campione,
indipendentemente dalla dispersione dei punti rispetto a (mean(x),mean(y)). Serve quindi
una normalizzazione rispetto al numero di elementi dei campioni.
Covarianza
La covarianza tra due vector numerici x ed y (di uguale lunghezza) `e la quantit` a cov(x, y)
denita da
cov(x, y) := sp(x, y)/(length(x) 1) (1.4.5)
La funzione cov, predenita in R, calcola la covarianza tra due vector numerici.
Per calcolare la covarianza tra i vector x ed y deniti precedentemente
> cov(x,y)
[1] 6.15
Infatti
> sum((x-mean(x))*(y-mean(y)))/(length(x)-1)
[1] 6.15
La cov(x,y) `e, come sp(x,y), una misura della dispersione dei punti (x,y) rispetto a
(mean(x),mean(y)). A dierenza della sp(x,y), la covarianza `e normalizzata al numero di
elementi dei campioni.