Sei sulla pagina 1di 82

Introduzione al Calcolo Grafico e Statistico

con R
Mario Romanazzi
Dipartimento di Statistica, Universit`a di Venezia Ca Foscari
S. Giobbe, Cannaregio 873, 30100 Venezia
17 dicembre 2007

Indice
1 Cos`
e R?

2 Primi passi
11
2.1 Operatori aritmetici e logici . . . . . . . . . . . . . . . . . . . . . 12
2.2 Variabili e operatore di assegnazione . . . . . . . . . . . . . . . . 13
3 Oggetti
3.1 Vettore . . . . . .
3.2 Matrice . . . . . .
3.3 Data Frame . . . .
3.4 Fattore . . . . . . .
3.5 Lista . . . . . . . .
3.6 Funzione . . . . . .
3.7 Cambiare modalit`
a

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

15
15
17
17
18
19
19
21

4 Lavorare con gli oggetti


4.1 Vettori numerici . . . . . . . . . . . . . . .
4.2 Matrici . . . . . . . . . . . . . . . . . . . . .
4.3 Estrazione e modifica di elementi di oggetti
4.4 Subsetting . . . . . . . . . . . . . . . . . . .
4.5 Stringhe di caratteri . . . . . . . . . . . . .
4.6 Dati mancanti . . . . . . . . . . . . . . . . .

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

23
23
24
25
26
27
28

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

5 Importazione ed esportazione di dati

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

31

6 Distribuzioni di probabilit`
a
35
6.1 Distribuzioni di probabilit`
a . . . . . . . . . . . . . . . . . . . . . 35
6.2 Campionamento . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
7 Un primo sguardo ai grafici
41
7.1 La funzione plot() . . . . . . . . . . . . . . . . . . . . . . . . . . 41
7.2 Le primitive grafiche . . . . . . . . . . . . . . . . . . . . . . . . . 44
3

4
8 Analisi iniziale dei dati
8.1 Tabelle di frequenza . . . .
8.2 Istogrammi . . . . . . . . .
8.3 Diagrammi scatola-baffi . .
8.4 Indici di sintesi . . . . . . .
8.5 Analisi della concentrazione

INDICE

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

49
49
54
58
61
63

9 Visualizzare dati multivariati


65
9.1 Correlazione lineare . . . . . . . . . . . . . . . . . . . . . . . . . 66
9.2 Diagrammi di dispersione . . . . . . . . . . . . . . . . . . . . . . 67
9.3 Componenti principali . . . . . . . . . . . . . . . . . . . . . . . . 68
10 Modelli lineari

75

Elenco delle tabelle


2.1

Operatori aritmetici, di confronto binario e logici. . . . . . . . . .

13

3.1

Funzioni elementari. . . . . . . . . . . . . . . . . . . . . . . . . .

20

4.1
4.2

Arrotondamento. . . . . . . . . . . . . . . . . . . . . . . . . . . .
Funzioni di matrici. . . . . . . . . . . . . . . . . . . . . . . . . . .

24
25

5.1
5.2

Opzioni di read.table. . . . . . . . . . . . . . . . . . . . . . . .
Opzioni di write.table. . . . . . . . . . . . . . . . . . . . . . . .

32
33

6.1

Distribuzioni di Probabilit`
a Univariate. . . . . . . . . . . . . . .

36

7.1

Alcuni parametri grafici. . . . . . . . . . . . . . . . . . . . . . . .

47

8.1

Principali diagrammi statistici. . . . . . . . . . . . . . . . . . . .

50

ELENCO DELLE TABELLE

Elenco delle figure


2.1
2.2

Console di R. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Dizionario alfabetico dellaiuto in linea. . . . . . . . . . . . . . .

11
12

7.1
7.2
7.3
7.4
7.5
7.6

Diagrammi di funzioni con plot().


Funzioni di densit`
a gaussiane. . . .
Funzione di probabilit`
a binomiale.
Funzioni di ripartizione binomiale e
Ottagono regolare. . . . . . . . . .
Cerchi casuali. . . . . . . . . . . .

42
43
44
45
46
48

8.1
8.2

Campione Banca dItalia: distribuzione territoriale delle famiglie.


Campione Banca dItalia: numero di componenti delle famiglie
per area territoriale. . . . . . . . . . . . . . . . . . . . . . . . . .
Campione Banca dItalia: reddito familiare per area territoriale.
Campione Banca dItalia: distribuzione del reddito familiare con
interpolante lognormale. . . . . . . . . . . . . . . . . . . . . . . .
Campione Banca dItalia: quantili del reddito empirici e basati
sul modello lognormale. . . . . . . . . . . . . . . . . . . . . . . .
Voto di laurea in Economia. . . . . . . . . . . . . . . . . . . . . .
Voto di diploma dei laureati in Economia. . . . . . . . . . . . . .
Campione Banca dItalia: quantili del reddito nelle aree territoriali.
Campione Banca dItalia: curva di concentrazione di Lorenz. . .

8.3
8.4
8.5
8.6
8.7
8.8
8.9
9.1
9.2
9.3
9.4
9.5

. . . . . .
. . . . . .
. . . . . .
normale.
. . . . . .
. . . . . .

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

Dendrogramma delle variabili socio-demografiche. . . . . . . . . .


Frazione di famiglie con un solo componente e frazione di separati
e divorziati. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Diagramma di dispersione delle componenti principali standardizzate. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Biplot dei comuni e delle variabili socio-demografiche. . . . . . .
Errore di approssimazione dei dati socio-demografici dei comuni.

10.1 Redditi e consumi familiari pro capite (scala logaritmica). . . . .


10.2 Influenza delle variabili di stratificazione sulla relazione reddito
consumo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

51
53
55
56
57
59
60
62
64
67
69
71
72
73
76
77

ELENCO DELLE FIGURE

Capitolo 1

Cos`
e R?
Come S-Plus, R `e figlio del linguaggio S, sviluppato negli anni ottanta del secolo
scorso presso i Bell Laboratories AT&T da R. Becker, J. Chambers e A. Wilks.
Latto di nascita ufficiale `e larticolo di R. Ihaka e R. Gentleman R: a language
for data analysis and graphics [2] apparso nel 1996 sul Journal of Computational
and Graphical Statistics. Da allora il software si `e sviluppato grazie ai contributi
dei ricercatori del Comprehensive R Archive Network (CRAN).
A differenza di S-Plus, R `e un software non commerciale, ed `e distribuito
gratuitamente sotto le condizioni dettate dalla GNU Public Licence della Free
Software Foundation. La sua caratteristica distintiva `e di essere open source,
il che significa che lutente ha la possibilit`
a di accedere al codice che sta alla
base del programma, ed eventualmente modificarlo e redistribuirlo. Un altro
punto di forza `e la compatibilit`
a con gran parte dei sistemi operativi in uso, da
Windows a Linux, da Unix a Mac/OS.
Ma cos`e R? Lo si pu`
o definire un linguaggio di programmazione e, nello
stesso tempo, un sistema integrato di calcolo le cui risorse consentono di
specificare un insieme di comandi e richiederne lesecuzione,
visualizzare i risultati in formato testo,
visualizzare i grafici in una finestra ausiliaria,
accedere ad archivi esterni, anche sulla rete, per acquisire documenti, dati
e grafici,
archiviare in modo permanente risultati e/o grafici.
Il software di R, con la relativa documentazione, cos` come le informazioni su
aggiornamenti e progetti collaterali, sono facilmente ottenibili dalla rete. Ecco
gli indirizzi pi`
u utili.
http://www.r-project.org: pagina principale,
http://cran.at.r-project.org/sources.html: software,
9

` R?
CAPITOLO 1. COSE

10

http://cran.at.r-project.org/manuals.html: documentazione,
http://cran.at.r-project.org/faqs.html: archivio delle domande pi`
u
frequenti,
http://cran.at.r-project.org/mail.html: mailing list.
La guida di riferimento di R `e [3]
R Development Core Team, A language and environment for statistical
computing,
R Foundation for Statistical Computing, Vienna, 2006
(http://www.R-project.org).
Applicazioni della metodologia statistica di base con R sono illustrate nel
manuale di S. M. Iacus e G. Masarotto, Laboratorio di Statistica con R, McGrawHill, 2007 [1].
Lo sviluppo del sistema `e curato dalla Fondazione R, raggiungibile allindirizzo http://www.r-project.org/foundation/main.html, sostenuta finanziariamente da contributi di una rete di universit`
a, istituzioni ed imprese sparse
in tutto il mondo. R `e affiancato da progetti che mirano a sviluppare software
dedicato ad applicazioni particolari. Ricordiamo tra gli altri
Bioconductor (http://www.bioconductor.org): analisi statistica di dati
di espressione genica,
gR (http://www.r-project.org/gR): modelli grafici statistici.

Capitolo 2

Primi passi
Quando si lancia R mediante leseguibile Rgui.exe si apre una finestra, la console
di R (illustrata nella Figura 2.1), contenente informazioni sulla versione del
programma e laiuto in linea.
Figura 2.1: Console di R.
Il segnale che il sistema `e pronto a ricevere i comandi `e il simbolo di maggiore
che appare sul lato sinistro della console
>
R non supporta men`
u se non in misura limitata perci`
o i comandi devono
essere digitati sulla tastiera e vengono eseguiti premendo il tasto Enter. Il
segnale del sistema e i comandi sono evidenziati in rosso. Commenti e note
esplicative si possono inserire dopo il carattere # (cancelletto). Data e ora si
ottengono mediante la funzione date()
> date()
[1] Fri Dec 17 19:01:33 2007
Per uscire dal sistema si d`
a il comando
> q()
Il sistema offre varie forme di assistenza. Lassistenza in linea si ottiene
digitando il punto interrogativo seguito dal nome della funzione desiderata. Ad
esempio eseguendo
> ?mean
il sistema visualizza in una finestra a parte la descrizione della funzione mean
(media aritmetica di un insieme di dati).
Il comando
11

12

CAPITOLO 2. PRIMI PASSI

> help.start()
apre un file HTML contenente informazioni sui diversi elementi del programma,
in particolare sulle librerie disponibili. Utilissimo lelenco alfabetico dei comandi, illustrato nella Figura 2.2, con descrizioni corredate da esempi e collegamenti
ipertestuali.
Figura 2.2: Dizionario alfabetico dellaiuto in linea.

2.1

Operatori aritmetici e logici

R offre tutte le funzionalit`


a di una calcolatrice numerica. Per valutare lespressione numerica (15 + 5)(19 15)3 /2 si digita il comando
> (15+5)*(19-15)^3/2 # Esempio di espressione numerica
la cui esecuzione produce la visualizzazione sulla console del messaggio
[1] 640
contenente il risultato; [1] indica che la visualizzazione parte dal primo, e in
` imporquesto caso unico, dato prodotto dalla valutazione dellespressione. E
tante notare che il risultato stesso non `e archiviato in memoria. I simboli
+, , , /, , ()
rappresentano gli operatori aritmetici di addizione, sottrazione, moltiplicazione,
divisione e potenza e le parentesi. I simboli
==, ! =, <, <=, >, >=
indicano invece gli operatori logici di uguale, diverso, minore e minore o uguale,
maggiore e maggiore o uguale . Ne illustriamo luso con alcuni esempi.
> 5 == 10
[1] FALSE
> 5 != -1
[1] TRUE
> 2*(6-8)
[1] FALSE
> 2*(6-8)
[1] TRUE

# Proposizione falsa
# Proposizione vera
< -4
<= -4

TRUE e FALSE indicano le costanti logiche VERO, FALSO. Gli operatori logici
AND (prodotto logico), OR (somma logica), NOT (negazione logica) sono resi
mediante i simboli
&, |, !

il cui uso ` illustrato di seguito.

2.2. VARIABILI E OPERATORE DI ASSEGNAZIONE

13

> (1+4)>0 & (1-10)>0 # Operatore AND


[1] FALSE
> (1+4)>0 | (1-10)>0 # Operatore OR
[1] TRUE
> !(2*(5-10)>0) # Operatore NOT
[1] TRUE
La Tabella 2.1 offre un prospetto riassuntivo degli operatori aritmetici, di
confronto binario e logici.
Operatori Aritmetici
+
addizione

sottrazione

prodotto
/
divisione

potenza
%/%
divisione intera
%%
resto della divisione intera
Operatori di Confronto Binario
< (<=) minore (minore o uguale)
> (>=) maggiore (maggiore o uguale)
==
uguale
!=
diverso
Operatori Logici
!
negazione logica (NOT)
&
prodotto logico (AND)

somma logica (OR)


Tabella 2.1: Operatori aritmetici, di confronto binario e logici.

2.2

Variabili e operatore di assegnazione

In una sessione di lavoro sorge spesso la necessit`


a di archiviare dati nella memoria del computer in modo da poterli usare pi`
u volte. Possiamo ad esempio
richiedere che la variabile cambio contenga il cambio dollaro - euro, circa uguale
a 1.4741. Il comando
> cambio <- 1.4741
archivia il numero decimale 1.4741 in unarea della memoria identificata dal
nome cambio. La freccia (ottenuta digitando il simbolo di minore, <, seguito
dal simbolo di sottrazione, -) `e loperatore di assegnazione . Il comando
> cambio
produce il risultato

14

CAPITOLO 2. PRIMI PASSI

[1] 1.4741
cio`e visualizza il contenuto corrente dellarea di memoria corrispondente al nome
cambio. Ecco ulteriori esempi.
> 10000/cambio
[1] 6783.8
R gestisce correttamente le situazioni eccezionali.
> 0 -> zero
> 1/zero
[1] Inf
> 10-1/zero
[1] -Inf
> 0*1/zero
[1] NaN
Le costanti numeriche -Inf e Inf sono usate per rappresentare quantit`
a
non limitate mentre NaN (not a number, non `e un numero) `e il codice utilizzato
per risultati non interpretabili come numeri e nemmeno uguali a -INF o INF.

Capitolo 3

Oggetti
Le entit`
a con cui si opera nellambiente di R prendono il nome di oggetti e sono
caratterizzati da due attributi base: mode (traducibile con modo o modalit`
a) e
length (lunghezza) .
Mode Mode `e la modalit`
a di base degli elementi che formano un oggetto. Ci
sono quattro modalit`
a fondamentali
numeric (numero reale),

complex (numero complesso),

logical (dato logico, con due possibili determinazioni: vero o falso),

character (carattere alfanumerico),

function (funzione), riservata alle funzioni.


Length Length `e il numero di elementi che compongono un oggetto.
Gli oggetti pi`
u importanti sono vettore, matrice, data frame, lista, fattore e
funzione. La funzione ls() visualizza sulla console lelenco degli oggetti correntemente presenti nella memoria. La funzione str(nome) produce una breve
descrizione della struttura delloggetto nome. La funzione rm(nome1,nome2,...)
rimuove dalla memoria gli oggetti specificati.
> ls() # Quali sono gli oggetti presenti nella memoria?
[1] cambio cost zero
> rm(cost) # Libera larea di memoria occupata da cost
> ls()
[1] cambio zero

3.1

Vettore

Il vettore `e una collezione ordinata di n 1 componenti aventi tutte la stessa


modalit`
a (numeric, complex, logical, character) ed `e loggetto base di R (uno
15

16

CAPITOLO 3. OGGETTI

scalare `e un vettore di lunghezza unitaria. Il metodo pi`


u generale di definire un
vettore `e di usare la funzione c()(c sta per concatenate, cio`e componi in ununica
sequenza ordinata). Ad esempio, per costruire il vettore vett1 con componenti
ordinatamente uguali a -1.5, 0, 3, -4 daremo il comando
> vett1 <- c(-1.5,0,3,-4)
> mode(vett1); length(vett1)
[1] numeric
[1] 4
Otteniamo un vettore logico se controlliamo quali componenti di vett1 sono
minori di zero.
> vett2 <- vett1<0
> vett2
[1] TRUE FALSE FALSE TRUE
> length(vett2) == length(vett1)
[1] TRUE
Vale la pena osservare che, nellespressione vett1<0, loperatore di confronto
binario `e applicato singolarmente a tutte le componenti del vettore.
Ancora, il vettore vett3 alfanumerico avente come elementi le sigle automobilistiche delle province del Veneto si costruisce col comando
> vett2 <- c(BL,PD,RO,TV,VE,VI,VR)
> mode(vett2); length(vett2)
[1] character
[1] 7
La funzione rep() (da repeat, ripeti) crea vettori con elementi ripetuti, come
ad esempio
> rep(1,times=5)
[1] 1 1 1 1 1
> rep(c(0,1),c(5,5))
[1] 0 0 0 0 0 1 1 1 1 1
> rep(c(0,1),5)
[1] 0 1 0 1 0 1 0 1 0 1

# forma breve

La funzione seq() (sequence, sequenza) produce vettori con componenti


equispaziate.
> seq(from=0,to=1,by=0.2)
[1] 0.0 0.2 0.4 0.6 0.8 1.0
> seq(0,1,0.3)
[1] 0.0 0.3 0.6 0.9

# forma breve

Un operatore utilissimo `e : che produce vettori con elementi separati da


intervalli unitari.

3.2. MATRICE

17

> 15:20
[1] 15 16 17 18 19 20
> c(1.1:5,5.5:8.5)
[1] 1.1 2.1 3.1 4.1 5.5 6.5 7.5 8.5

3.2

Matrice

La matrice (pi`
u in generale, un array) `e una generalizzazione multivariata del
vettore. Una matrice n m si pu`
o considerare come la collezione ordinata dei
suoi n vettori riga (ciascuno con m componenti) o dei suoi m vettori colonna
(ciascuno con n componenti). Come per i vettori, gli elementi di una matrice
devono avere la stessa modalit`
a (non necessariamente numeric).
La funzione pi`
u semplice per definire una matrice `e matrix(). La matrice
4 3 avente nelle colonne i numeri da 1 a 12 si ottiene con
> matr1 <- matrix(1:12,nrow=4,ncol=3,byrow=FALSE)
> matr1
[,1] [,2] [,3]
[1,]
1
5
9
[2,]
2
6
10
[3,]
3
7
11
[4,]
4
8
12
> length(matr1); dim(matr1); str(matr1)
[1] 12
[1] 4 3
int [1:4, 1:3] 1 2 3 4 5 6 7 8 9 10 ...
La funzione dim() (da dimensions, dimensioni) restituisce ordinatamente il
numero di righe e di colonne. I seguenti comandi costruiscono la matrice nulla
3 3 e la matrice identica dordine tre.
> matrix(0,3,3)
[,1] [,2] [,3]
[1,]
0
0
0
[2,]
0
0
0
[3,]
0
0
0
> matrix(c(rep(c(1,0,0,0),2),1),3,3)
[,1] [,2] [,3]
[1,]
1
0
0
[2,]
0
1
0
[3,]
0
0
1

3.3

Data Frame

` un oggetto simile ad una matrice, ma i vettori colonna possono avere modalit`


E
a
diverse. Un esempio importante di data frame `e la matrice dati derivante dalla

18

CAPITOLO 3. OGGETTI

rilevazione di m variabili (non necessariamente tutte numeriche) su n unit`


a
statistiche. Supponiamo ad esempio di aver rilevato nome, numero di matricola,
genere ed et`
a di un campione di cinque studenti e di aver ordinato i dati di
ciascuna variabile in un vettore.
>
>
>
>

nome <- c(Dino,Anna,Luisa,Marco,Paolo)


matr <- c(492311,500542,596759,486415,678076)
gen <- c(M,F,F,M,M)
eta <- c(22,19,20,23,24)

Per ordinare dati osservati in ununica tabella in cui le righe corrispondono


agli studenti, le colonne alle variabili `e utile la funzione data.frame().
> dati <- data.frame(matr,gen,eta,row.names = nome)
> dati
matr gen eta
Dino
492311 M 22
Anna
500542 F 19
Luisa
596759 F 20
Marco
486415 M 23
Paolo
678076 M 24
Lopzione row.names = nome associa ad ogni riga unetichetta corrispondente alla determinazione di nome. Se non lavessimo specificata le etichette
sarebbero state 1, 2, 3, 4, 5. Loggetto dati non pu`
o avere una struttura di
matrice perch`e le colonne hanno tipologie differenti.

3.4

Fattore

` un vettore le cui componenti corrispondono ai gruppi individuati da una


E
classificazione. Lutilizzazione pi`
u frequente `e la ripartizione delle n unit`
a di
un collettivo in gruppi corrispondenti alle determinazioni distinte di una variabile categoriale. Nellesempio del campione di studenti possiamo considerare
il gruppo dei maschi e quello delle femmine. La funzione factor() crea un
fattore assegnando opportune etichette alle modalit`
a. Una funzione frequentemente usata con i fattori `e tapply(oggetto, fattore, funzione) che applica
una funzione specificata ai gruppi definiti dalle determinazioni di un fattore.
> genere <- factor(gen,labels=c(Femmina,Maschio))
> mean(eta) # media complessiva
[1] 21.6
> tapply(eta,genere,mean) # medie parziali
Femmina Maschio
19.5
23.0
> tapply(eta,genere,length) # dimensioni dei gruppi
Femmina Maschio
2
3

3.5. LISTA

19

Nellesempio precedente tapply(, ,mean) calcola let`


a media separatamente
per le femmine e per i maschi mentre tapply(, ,length) fornisce le numerosit`
a
dei due gruppi.

3.5

Lista

La lista generalizza ulteriormente la nozione di vettore perch`e gli elementi possono avere modalit`
a diverse ed essere a loro volta vettori, matrici, liste. I risultati di molte funzioni statistiche hanno questa struttura. Illustriamo di seguito
la costruzione di una lista contenente le regioni delle Venezie, il numero delle
rispettive province e le corrispondenti sigle automobilistiche.
>
>
>
>
>

reg <- c(FriuliVG,TrentinoAA,Veneto)


npr <- c(4,2,7)
pfvg <- c(GO,PN,TS,UD)
ptaa<-c(BZ,TN)
pven <- c(BL,PD,RO,TV,VE,VI,VR)
La funzione che costruisce la lista `e list().

> venezie <- list(regione=reg,nprov=npr,


+ province=list(pfvg,ptaa,pven))
> venezie
$regione
[1] FriuliVG TrentinoAA Veneto
$nprov
[1] 4 2 7
$province
$province[[1]]
[1] GO PN TS UD
$province[[2]]
[1] BZ TN
$province[[3]]
[1] BL PD RO TV VE VI VR

3.6

Funzione

Le funzioni (sia quelle interne del sistema sia quelle definite dagli utenti) sono
oggetti con modalit`
a function. Ne abbiamo gi`
a incontrato svariati esempi, come
gli operatori aritmetici e logici, le funzioni che costruiscono gli oggetti (c(),
matrix(), data.frame(), list(), factor()) e quelle che ne descrivono le
caratteristiche (mode(), length(), dim()). Funzioni come ls(), rm() permettono di controllare linsieme degli oggetti presenti nella memoria. La funzione
mean() esegue invece una trasformazione di un vettore numerico, cio`e il calcolo
della corrispondente media aritmetica. La Tabella 3.1 riporta un elenco di altre
funzioni di questo tipo. Vale la pena osservare che, mentre il risultato di funzioni

20

CAPITOLO 3. OGGETTI
Funzione R
min(x), max(x)
range(x)
sum(x), prod(x)
sort(x)
abs(x)
sqrt(x)
log(x), log10(x)
exp(x)
sin(x), cos(x), tan(x)
asin(x), acos(x), atan(x)

Risultato
elemento minimo (massimo)
vettore con elementi min(x), max(x)
somma (prodotto)
vettore ordinato in modo crescente
valore assoluto
radice quadrata
logaritmo (naturale e in base 10)
esponenziale
funzioni trigonometriche
funzioni trigonometriche inverse

Tabella 3.1: Funzioni elementari.


come sort(), sum(), min(), max() dipende da tutte le componenti del vettore,
le funzioni abs(), sqrt() ecc. operano separatamente su ciascuna componente.
Tipicamente, le funzioni definite dallutente eseguono microprogrammi che
risolvono problemi particolari. Lesempio seguente mostra la definizione di una
funzione che calcola la media geometrica1 di n numeri positivi.
> mgeo <- function(x)
+ {
+ if (length(x)==0) return(NaN)
+ if(!is.numeric(x)) return(NaN)
+ if(min(x)<0) return(NaN)
+ if(min(x)==0) return(0)
+ if(min(x)>0) return(prod(x)^(1/length(x)))
+ }
> mgeo(1:3)
[1] 1.817121
> mgeo(c(-1,3,5))
[1] NaN
Il nome della funzione `e mgeo e gli argomenti ammissibili sono vettori numerici con componenti non negative. Il programma comprende alcuni controlli
sui dati. Se, ad esempio, il vettore non `e numerico oppure ci sono dati negativi,
il risultato predefinito `e NaN. Il costrutto if (cond) expr esegue lespressione
expr a condizione che cond sia vera. Il costrutto if (cond) expr1 else expr2
esegue expr1 se cond `e vera, altrimenti esegue expr2.
Come ulteriore esempio proponiamo un microprogramma per la generazione
dei primi n numeri di Fibonacci2 .
> fibon <- function(x)
1 La media geometrica dei numeri positivi x , ..., x `
n e la radice n-esima del prodotto di
1
x1 , ..., xn .
2 La successione di Fibonacci `
e definita dalle propriet`
a x1 = x2 = 1 e, per i > 2, xi =
xi1 + xi2 .

`
3.7. CAMBIARE MODALITA

21

+ {
+ str1 <- Numeri di Fibonacci minori di (o uguali a)
+ str2 <- Argomento della funzione non numerico
+ str3 <- Argomento della funzione minore di 1
+ if (!is.numeric(x)) stop(str2)
+ if (is.numeric(x) & x < 1) stop(str3)
+ if (is.numeric(x) & trunc(x) == 1)
+ {
+ print(c(str1,as.character(1)),quote=F)
+ print(as.character(1),quote=F)
+ }
+ if (is.numeric(x) & trunc(x) == 2)
+ {
+ print(c(str1,as.character(2)),quote=F)
+ print(as.character(c(1,1)),quote=F)
+ }
+ if (is.numeric(x) & trunc(x) > 2)
+ {
+ vett <- numeric(); vett[1] <- 1; vett[2] <- 1
+ for (i in 3:trunc(x)) vett[i] <- vett[i-1] + vett[i-2]
+ print(c(str1,as.character(trunc(x))),quote=F)
+ print(as.character(vett),quote=F)
+ }
+ }
> fibon(8)
[1] Numeri di Fibonacci minori di (o uguali a)
[2] 8
[1] 1 1 2 3 5 8 13 21
Il costrutto for (i in i1:i2) espressione esegue in sequenza i comandi
contenuti in espressione facendo variare i da i1 a i2. La funzione stop(messaggio)
provoca larresto dellesecuzione dellespressione corrente e visualizza il contenuto di messaggio.
> fibon(-6)
Error in fibon(-6) : Argomento della funzione minore di 1

3.7

Cambiare modalit`
a

` possibile, con alcune limitazioni, cambiare la modalit`


E
a di un oggetto mediante funzioni del tipo as.character(), as.logical(), as.numeric(). Come
regola generale, un oggetto pu`
o sempre essere convertito a modalit`
a carattere
racchiudendo fra virgolette () le sue determinazioni, mentre la conversione a
modalit`
a logica o numerica pu`
o provocare la sostituzione di dati col codice NA
(not available, dato mancante).

22

CAPITOLO 3. OGGETTI

Cos` as.logical(x) converte il numero 0 nella costante logica FALSE e tutti


gli altri numeri nella costante logica TRUE; inoltre essa converte le stringhe di
caratteri FALSE, F nella costante logica FALSE e le stringhe TRUE,
T nella costante logica TRUE. Tutte le altre stringhe di caratteri sono tradotte
come NA.
A sua volta, la funzione as.numeric(x) traduce le costanti logiche FALSE e
TRUE nelle costanti numeriche 0 e 1, rispettivamente; inoltre stringhe di caratteri
del tipo 1, 2.5 , interpretabili come dati numerici, sono tradotte nelle corrispondenti costanti numeriche 1, 2.5. Tutte le altre stringhe di caratteri sono
tradotte come NA.
Queste regole sono documentate dai seguenti esempi. La costante numerica
pi corrisponde al numero reale pi greco3 approssimativamente uguale a 3.1415....
> as.character(2.34)
[1] 2.34
> as.character(pi)
[1] 3.14159265358979
as.character(1 > 0)
[1] TRUE
as.logical(pi)
[1] TRUE
> as.logical(pi)
[1] NA

3 Pi

greco `e il rapporto delle lunghezze di una circonferenza e del suo diametro.

Capitolo 4

Lavorare con gli oggetti


Eseguire un calcolo, o elaborare dati, equivale a trasformare un insieme di oggetti
x1 , ..., xn in un insieme di oggetti y1 , ..., ym mediante opportune funzioni. Come
abbiamo visto, insieme agli oggetti-tipo del Capitolo 3, R mette a disposizione moltissime funzioni, comprese tutte le funzioni matematiche di base (vedi
Tabella 3.1).

4.1

Vettori numerici

Se x, y sono vettori numerici con n componenti e a, b sono numeri reali, la


combinazione lineare di x e y `e il vettore z = ax+by in cui la componente j-esima
di z `e zj = axj + byj . Vale la pena osservare che il risultato `e ottenuto in due
passi: prima si moltiplicano le componenti di x e di y per a e b, rispettivamente,
poi si sommano le componenti corrispondenti. La combinazione lineare di un
numero finito qualsiasi di vettori si ottiene in modo analogo.
> x <- 1:5; y <- rep(1,5); a <- 2; b <- -1
> a*x+b*y
[1] 1 3 5 7 9
In R `e ammessa la somma algebrica di vettori di dimensione diversa. In
particolare, se x `e un vettore con n componenti e a `e un numero reale, la
trasformazione x + a produce il vettore z con componenti zj = xj + a.
> x <- seq(1,5,0.5); a <- -0.5
> x+a
[1] 0.5 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5
Le usuali funzioni matematiche, se hanno per argomento un vettore, sono
applicate componente per componente.
> x <- 1:3
> x^2
23

24

CAPITOLO 4. LAVORARE CON GLI OGGETTI


Funzione
ceiling(x)
floor(x)
round(x,m)
signif(x,m)
trunc(x)

Risultato
minimo intero maggiore o uguale a x
massimo intero minore o uguale a x
arrotonda x ad m cifre decimali
arrotonda x ad m cifre complessive
tronca le cifre decimali

Tabella 4.1: Arrotondamento.


[1] 1 4 9
> sqrt(x)
[1] 1.000000 1.414214 1.732051
La Tabella 4.1 elenca le funzioni per larrotondamento di valori numerici. La
pi`
u importante `e round(x, m), che arrotonda le componenti del vettore x ad
m cifre decimali (default m = 0).
> x <- sqrt(1:10)
> round(x); round(x,2)
[1] 1 1 2 2 2 2 3 3 3 3
[1] 1.00 1.41 1.73 2.00 2.24 2.45 2.65 2.83 3.00 3.16

4.2

Matrici

R mette a disposizione un buon apparato di funzioni per la trasformazione di


matrici (Tabella 4.2).
I seguenti esempi mostrano luso della funzione diag(x). In generale, se
x `e una matrice quadrata, diag(x) produce il vettore degli elementi diagonali
di x; se x `e un vettore, diag(x) produce una matrice diagonale con elementi
diagonali ordinatamente uguali alle componenti di x.
> diag(matrix(1:9,3,3))
[1] 1 5 9
> diag(rep(1,3))
[,1][,2][,3]
[1,] 1
0
0
[2,] 0
1
0
[3,] 0
0
1
Per vettorializzare una matrice basta applicare la funzione as.vector().
> as.vector(matrix(1:9,3,3))
[1] 1 2 3 4 5 6 7 8 9
La traccia, somma degli elementi della diagonale principale di una matrice
quadrata, si ottiene mediante la funzione sum().

4.3. ESTRAZIONE E MODIFICA DI ELEMENTI DI OGGETTI


Funzione R
chol(x)
colSums(x) (rowSums(x))
det(x)
eigen(x)
qr(x)
solve(x)
svd(x)
t(x)

25

Risultato
triangolarizzazione di Choleski
somme di colonna (riga)
determinante
autovalori, autovettori
scomposizione QR
inversa
scomposizione in valori singolari
trasposta

Tabella 4.2: Funzioni di matrici.


> m1 <- matrix(1:9,3,3))
> sum(diag(m1))
[1] 15
Loperatore del prodotto righe per colonne `e %*% . Se le matrici non hanno
dimensioni compatibili, si ottiene un messaggio derrore.
> m1 <- matrix(1:6,3,2); m2 <- matrix(c(-1,1,0,1),2,2)
< m3 <- rep(1,3)
> m1%*%m2
[,1][,2]
[1,]
3
4
[2,]
3
5
[3,]
3
6
> m1%*%m3
Error in m1 %*% m3 : non-conformable arguments
Per costruire matrici a blocchi, o aggiungere righe o colonne a matrici preesistenti, sono utili le funzioni rbind(), cbind(). La prima giustappone le righe, la
seconda le colonne.
> rbind(cbind(matrix(1,2,2),matrix(0,2,2)),
+ cbind(matrix(0,2,2),matrix(2,2,2)))
[,1][,2][,3][,4]
[1,]
1
1
0
0
[2,]
1
1
0
0
[3,]
0
0
2
2
[4,]
0
0
2
2

4.3

Estrazione e modifica di elementi di oggetti

Un problema frequente `e la costruzione di nuovi oggetti mediante elementi di


oggetti gi`
a esistenti, di solito vettori, matrici o liste. Gli operatori pi`
u importanti
per effettuare queste trasformazioni sono [ ], per vettori e matrici, [[ ]] per le
liste.

26

CAPITOLO 4. LAVORARE CON GLI OGGETTI

Se x `e un vettore, x[i] restituisce lelemento i-esimo xi , x[i] restituisce il


vettore x privato dellelemento i-esimo e x[c(i1 , i2 , ..., ik )] restituisce il vettore
con elementi xi1 , xi2 , ..., xik .
> v <- c(-10,4,-3,0,1,1.5,10,6)
> v[5] # Componente 5
[1] 1
> v[2:5] # Componenti 2, 3, 4 e 5
[1] 4 -3 0 1
> v[-length(v)] # Elimina lultima componente
[1] -10.0 4.0 -3.0 0.0 1.0 1.5 10.0
> v[1] <- 8 # Ridefinisce la prima componente
> v
[1] 8.0 4.0 -3.0 0.0 1.0 1.5 10.0 6.0
Se y `e una matrice, y[i, j] restituisce lelemento yij mentre y[i, ] e y[, j] restituiscono, rispettivamente, riga i-esima e colonna j-esima di y. Valori negativi
degli argomenti delloperatore [ ] cancellano da y gli elementi corrispondenti.
> y <- matrix(1:10,2,5)
[,1] [,2] [,3] [,4] [,5]
[1,] 1 3 5 7 9
[2,] 2 4 6 8 10
> y[2,5] # Elemento sulla seconda riga e quinta colonna
[1] 10
> y[1,] # Prima riga
[1] 1 3 5 7 9
> y[-1,] # Elimina la prima riga
[1] 2 4 6 8 10
> y[,5] # Quinta colonna
[1] 9 10
> y[,1:3] # Prime tre colonne
[,1] [,2] [,3]
[1,] 1 3 5
[2,] 2
4 6
> y[,5] <- rep(1,2) # Ridefinisce la quinta colonna
> y
[,1] [,2] [,3] [,4] [,5]
[1,] 1 3 5 7 1
[2,] 2 4 6 8 1

4.4

Subsetting

Gli esempi precedenti illustrano luso delloperatore [ ] per selezionare elementi


di vettori o matrici in base alla posizione. Lo stesso operatore consente di
selezionare elementi con propriet`
a specificate, non necessariamente dipendenti

4.5. STRINGHE DI CARATTERI

27

dalla posizione. Gli esempi sottostanti mostrano come estrarre da un vettore le


componenti positive e contare il numero di componenti uguali a zero.
> vett <- c(-10,1,0.5,-3,4,10,0)
> vett[vett>0] # Estrae le componenti positive
[1] 1.0 0.5 4.0 10.0
> length(vett[vett == 0]) # Conta le componenti nulle
[1] 1
Nel seguente esempio le componenti negative sono poste uguali a zero.
> vett[vett < 0] <- 0
> vett
[1] 0.0 1.0 0.5 0.0 4.0 10.0 0.0

4.5

Stringhe di caratteri

Operazioni frequenti sulle stringhe di caratteri alfanumerici sono conteggio dei


caratteri, conversione maiuscolo/minuscolo, ricerca, estrazione o sostituzione di
sottostringhe .
Dato un vettore alfanumerico x, nchar(x) fornisce il numero di caratteri
delle singole componenti, mentre tolower(x) e toupper(x) riscrivono tutti i
caratteri alfabetici in formato minuscolo e maiuscolo, rispettivamente
> vett <- c(cANe,GATTO,Topo)
> nchar(vett)
[1] 4 5 4
> tolower(vett)
[1] cane gatto topo
> toupper(vett)
[1] CANE GATTO TOPO
La funzione paste(str1,str2,...) fonde le componenti corrispondenti dei
vettori alfanumerici str1, str2, ..., inserendo eventuali separatori. Al contrario,
strsplit(x,str) divide le componenti del vettore alfanumerico x in corrispondenza alle sottostringhe specificate dalle componenti del vettore str. Il risultato
`e una lista degli spezzoni cos` originati. Negli esempi che seguono usiamo i vettori alfanumerici letters e LETTERS i cui elementi sono le lettere minuscole e
maiuscole dellalfabeto latino.
> paste(LETTERS[1],1:3,sep=)
[1] A1 A2 A3
> paste(LETTERS[1],1:3,sep=_)
[1] A_1 A_2 A_3
> unlist(strsplit(Nel mezzo del cammin di nostra vita, ))
[1] Nel mezzo del cammin di nostra vita
> unlist(strsplit(Dante,))
[1] D a n t e

28

CAPITOLO 4. LAVORARE CON GLI OGGETTI

La ricerca di una particolare combinazione di caratteri in una stringa alfanumerica `e eseguita dalle funzioni grep() e regexpr(). Se x `e un vettore
alfanumerico, grep(str,x) restituisce gli indici delle componenti di x contenenti la sottostringa str, mentre regexpr(str,x) fornisce le posizioni in cui
inizia la sottostringa str allinterno di ogni componente di x (se la sottostringa
cercata non `e presente, la posizione `e posta uguale a 1).
> vett <- c(Po,topo,gatto,ippopotamo)
> grep(po,vett)
[1] 2 4
> regexpr(po,vett)
[1] -1 3 -1 3
attr(,match.length)
[1] -1 2 -1 2
La funzione gsub(str1,str2,x) sostituisce la sottostringa str2 al posto di
str1 in tutte le componenti di x.
> gsub(po,PO,vett)
[1] Po toPO gatto ipPOPOtamo
Infine, la funzione substring(x,i1,i2) estrae dalle componenti del vettore
x le sottostringhe comprese tra le posizioni i1 e i2 . La versione substring(x,i1,i2)
<- str1 sostituisce la sottostringa con str1.
> testo <- Nel mazzo del cammin
> substr(testo,6,6) <- e
> testo
[1] Nel mezzo del cammin
Nel seguente esempio preleviamo da un vettore alfanumerico le componenti
che iniziano con la lettera a.
> vett <- c(Alberto,asino,burro,ape)
> vett[substr(vett,1,1) == a]
[1] asino ape

4.6

Dati mancanti

Nellambiente di R i dati mancanti sono individuati dal codice NA (not available,


non disponibile). Numerose funzioni consentono di riconoscerne la presenza
negli oggetti, rimuoverli oppure specificare le modalit`
a di trattamento. Le pi`
u
importanti sono is.na(), na.fail(), na.omit().
La funzione is.na(x) consente di localizzare eventuali dati mancanti in un
oggetto (vettore, matrice o data-frame). Infatti is.na(x) produce un oggetto dello stesso tipo di x, i cui elementi assumono la determinazione TRUE se
lelemento corrispondente di x `e NA, FALSE in caso contrario.

4.6. DATI MANCANTI

29

> x <- c(NA,1:5,NA)


> is.na(x)
[1] TRUE FALSE FALSE FALSE FALSE FALSE TRUE
> length(x[is.na(x)])
[1] 2
La funzione na.fail(x) restituisce loggetto x invariato se esso non contiene
NA, altrimenti produce un messaggio derrore.
> na.fail(x)
Error in na.fail.default(x) : missing values in object
La funzione na.omit(x) produce risultati diversi a seconda della natura di
x. Se `e un vettore, na.omit(x) esclude da x i dati mancanti. Se `e una matrice
o un data frame, na.omit(x) esclude le righe contenenti (almeno un) NA.
> na.omit(x)
[1] 1 2 3 4 5
> y <- matrix(c(NA,1:6,NA,),4,2)
> na.omit(y)
[,1] [,2]
[1,]
1
5
[2,]
2
6
Quando si eseguono elaborazioni di oggetti con dati mancanti, `e quasi sempre necessario indicarne esplicitamente le modalit`
a di trattamento onde evitare
risultati imprevisti o messaggi derrore.
Lesempio pi`
u comune `e la media aritmetica mean(x) . Se x contiene NA, il
risultato della funzione `e a sua volta NA perch`e il comportamento di default `e
di usare tutte le componenti del vettore. Volendo invece calcolare la media dei
soli dati completi si dovr`
a usare la specificazione mean(x, na.rm=TRUE).
> x
[1] NA 1 2 3 4 5 NA
> mean(x)
[1] NA
> mean(x,na.rm=TRUE)
[1] 3
> y <- x; y[is.na(y)] <- mean(x,na.rm=TRUE)
> y
[1] 3 1 2 3 4 5 3
Nel vettore y dellesempio precedente i dati mancanti di x sono stati sostituiti
dalla media dei dati osservati.
Un altro esempio `e lordinamento di un vettore numerico mediante sort(x).
In questo caso il trattamento dei dati mancanti `e specificato dallopzione na.last
che pu`
o assumere le determinazioni

30

CAPITOLO 4. LAVORARE CON GLI OGGETTI


na.last=NA: i dati mancanti sono rimossi dal vettore,
na.last=TRUE (FALSE): i dati mancanti sono spostati alla fine (allinizio)
del vettore.

> sort(x)
[1] 1 2 3 4 5
> sort(x,na.last=TRUE)
[1] 1 2 3 4 5 NA NA

Capitolo 5

Importazione ed
esportazione di dati
Le funzioni pi`
u importanti per leggere dati da un archivio esterno sono read.table()
e scan().
La funzione read.table() legge da un supporto esterno tabelle di dati in
` particolarmente utile per
formato testo e crea un oggetto di tipo data frame. E
leggere tabelle unit`
a variabili, con righe corrispondenti alle unit`
a e colonne
corrispondenti alle variabili. Le numerose opzioni, alcune delle quali descritte
nella Tabella 5.1, conferiscono alla funzione grande flessibilit`
a.
Il file studenti.txt riporta, per un campione di sette studenti universitari, le
variabili nome, genere, et`
a, facolt`
a, voto medio. I dati mancanti sono indicati
con :.
> stud <- read.table(file=c:/studenti.txt,header=T,
+ dec=,,row.names=1,as.is=c(1,4),na.strings=:)
> stud
Genere Eta Facolta Voto
Sara
F
22 Sci
24.5
Mara
F
20 Let
26.1
Bruno
M
21 Let
28.6
Luca
M
25 Eco
23.7
Marco
M
20 Eco
NA
Elisa
F
23 Lin
28.0
Giulia F
21 Let
24.1
Le opzioni utilizzate usano i nomi degli studenti come descrittori delle righe
e richiedono di trattare le variabili 1 e 4 (nome e facolt`
a ) come variabili alfanumeriche. Si noti anche la specificazione del punto decimale e dei dati
mancanti.
Una variante di read.table(), read.csv(), consente la lettura dei formati
.csv.
31

32

CAPITOLO 5. IMPORTAZIONE ED ESPORTAZIONE DI DATI

Opzione
file
header
dec
row.names
col.names
as.is
na.strings
skip

Contenuto
nome del file esterno (pu`
o essere un indirizzo web)
variabile logica (T/F): la prima riga del file contiene i nomi
delle variabili?
carattere usato nel file esterno per separare le cifre intere
da quelle decimali
vettore dei descrittori delle righe (default: 1, 2, ...)
vettore dei descrittori delle colonne (default: V1, V2, ...)
vettore logico o numerico per controllare la conversione di
variabili alfanumeriche in fattori
codifica dei dati mancanti nel file esterno (il codice R
`e NA, not available)
numero di righe da saltare prima di iniziare la lettura
Tabella 5.1: Opzioni di read.table.

La funzione scan() d`
a la possibilit`
a di associare ai dati esterni oggetti di
tipo diverso (vettori, matrici, data frame, liste) ed `e dunque pi`
u generale di
read.table(). Vediamo come si possa creare una lista con i dati degli studenti.
> scan(c:/studenti.txt,skip=1,
+ what=list(,,0,,0),dec=,,na.strings=:)
[[1]]
[1] Sara Mara Bruno Luca Marco Elisa Giulia
[[2]]
[1] F F M M M F F
[[3]]
[1] 22 20 21 25 20 23 21
[[4]]
[1] Sci Let Let Eco Eco Lin Let
[[5]]
[1] 24.5 26.1 28.6 23.7 NA 28.0 24.1
La funzione scan() condivide con read.table() le opzioni file, dec, skip,
na.strings. Lopzione what descrive le caratteristiche delloggetto da creare;
nellesempio precedente what=list(,,0,,0) indica che loggetto
da creare `e una lista di cinque vettori dei quali il primo, secondo e quarto
alfanumerici, il terzo e quinto numerici.
La scrittura di un data frame su un file esterno `e eseguita dalla funzione
write.table(). Le opzioni principali sono specificate nella Tabella 5.2.
Lesempio seguente illustra la scrittura del data frame stud su un file esterno.
> write.table(stud,file=c:/stud1.txt,row.names=T,
+ col.names=TRUE,quote=FALSE,na=:,dec=.)
Lopzione quote=FALSE richiede di non usare le virgolette per le variabili
alfanumeriche.

33
Opzione
x
file
quote
na
dec
row.names
col.names

Contenuto
nome delloggetto da scrivere
nome del file
variabile logica che specifica le variabili da scrivere tra virgolette
codifica dei dati mancanti
codifica del punto decimale
variabile logica (T/F): i descrittori delle righe vanno indicati?
variabile logica (T/F): i descrittori delle colonne vanno indicati?
Tabella 5.2: Opzioni di write.table.

La funzione write.table() pu`


o essere usata per scrivere su un file un
oggetto diverso da un data frame. Lesempio seguente illustra il caso delle
matrici.
> matr <- matrix(1:10,5,2)
> write.table(matr,file=c:/matr.txt,
+ row.names=FALSE,col.names=FALSE,quote=FALSE)

34

CAPITOLO 5. IMPORTAZIONE ED ESPORTAZIONE DI DATI

Capitolo 6

Distribuzioni di probabilit`
a
La Statistica modella i dati empirici come interazione di componenti sistematiche (segnale) e componenti erratiche (errore), questultime interpretate come
determinazioni di opportune distribuzioni di probabilit`
a. Largamente usate
nelle applicazioni sono le distribuzioni binomiale e di Poisson nel caso discreto
(dati di conteggio), la normale, luniforme e lesponenziale nel caso continuo
(dati derivanti da misurazioni). R comprende una ricca biblioteca di funzioni in
grado di gestire tutte le distribuzioni univariate di impiego corrente. Inoltre la
funzione sample() simula il campionamento casuale, con o senza reimmissione,
da una popolazione finita.

6.1

Distribuzioni di probabilit`
a

I nomi delle funzioni associati alle distribuzioni di probabilit`


a sono formati
da una parola-chiave che riecheggia la corrispondente distribuzione (norm per
la Normale, binom per la Binomiale) con un prefisso che descrive la specifica
propriet`
a della distribuzione. I prefissi sono
d: funzione di densit`
a (distribuzioni continue) o di probabilit`
a (distribuzioni
discrete),
p: funzione di ripartizione,
q: quantili,
r: generazione di campioni pseudo-casuali.
I parametri delle distribuzioni di probabilit`
a appaiono come opzioni della
funzione. Cos`, per ottenere i valori della densit`
a normale standard corrispondenti al numero reale 1.5, si user`
a la funzione dnorm(-1.5, mean=0, sd=1).
Analogamente, per calcolare il quantile dordine 0.9 della Binomiale di parametri
n = 80, p = 0.6, si user`
a la funzione qbinom(0.9, size=80, prob=0.6).
La Tabella 6.1 descrive le principali distribuzioni di probabilit`
a fornite da R.
Vediamo alcune semplici applicazioni della distribuzione Normale standard.
35

36

`
CAPITOLO 6. DISTRIBUZIONI DI PROBABILITA
Distribuzione
Beta
Binomiale
Cauchy
Chi quadrato
Esponenziale
F di Snedecor
Gamma
Geometrica
Iperg
Normale
Poisson
t di Student
Uniforme

Nome R
beta
binom
cauchy
chisq
exp
f
gamma
geom
hyper
norm
pois
t
unif

Parametri
shape1, shape2
size, prob
location, scale
df, ncp
rate
df1, df2, ncp
shape, scale
prob
m, n, k
mean, sd
lambda
df, ncp
min, max

Tabella 6.1: Distribuzioni di Probabilit`


a Univariate.
> round(dnorm(-3:3,mean=0,sd=1),4) # funzione di densita
[1] 0.0044 0.0540 0.2420 0.3989 0.2420 0.0540 0.0044
> round(pnorm(-3:3,mean=0,sd=1),4) # funzione di ripartizione
[1] 0.0013 0.0228 0.1587 0.5000 0.8413 0.9772 0.9987
> round(qnorm(seq(0,1,by=0.1),mean=0,sd=1),2) # decili
[1] -Inf -1.28 -0.84 -0.52 -0.25 0.00 0.25 0.52 0.84 1.28 Inf
> camp <- rnorm(100,mean=0,sd=1) # campione di 100 elementi
# quanti dati nellintervallo (-1, 1)?
> length(camp[(camp>-1) & (camp<1)])
[1] 71
# quanti dati sono esterni allintervallo (-3, 3)?
> length(camp[(camp<-3) |(camp>3)])
[1] 0
Passiamo ora a considerare alcuni tipici problemi riguardanti la distribuzione
Binomiale.
> round(dbinom(48:52,size=100,prob=0.5),3) # funzione di probabilita
[1] 0.074 0.078 0.080 0.078 0.074
> round(pbinom(48:52,size=100,prob=0.5),3) # funzione di ripartizione
[1] 0.382 0.460 0.540 0.618 0.691
> qbinom(seq(0,1,by=0.2),size=100,prob=0.5) # quintili
[1]
0 46 49 51 54 100
> camp <- rbinom(100,size=10000,prob=0.5) # campione di 100 elementi
> length(camp[(camp/10000>0.49) & (camp/10000<0.51)])
[1] 98
La funzione stem() fornisce la presentazione a ramo e foglie di un campione
numerico univariato, che aiuta a visualizzare le caratteristiche dei dati. Nelle-

6.2. CAMPIONAMENTO

37

sempio seguente confrontiamo due campioni estratti da una normale standard


e da una t di Student con cinque gradi di libert`
a.
> camp1 <- rnorm(100,mean=0,sd=1); camp2 <- rt(100,df=5)
> stem(camp1,scale=0.5)
The decimal point is at the |
-2 |0
-1 |9555554221111
-0 |9999987777665444444333221111111100
0 |000111112222223334444445556677888899999
1 |02345577799
2 |12
> stem(camp2)
The decimal point is at the |
-2 |61
-1 |98666533210000
-0 |998877766554444333222222110000
0 |001122333334444556666677778888999
1 |00011123456679
2 |0122
3 |69
4 |4
In accordo con i risultati teorici, i dati provenienti dalla distribuzione t hanno
lo stesso posizionamento ma appaiono pi`
u dispersi di quelli provenienti dalla
normale.

6.2

Campionamento

La funzione sample() interviene in tutti i problemi in cui si richiede lestrazione di un campione casuale da una popolazione finita. La forma generale
`e sample(x, opzioni) in cui x `e un vettore (numerico, logico o alfanumerico)
che descrive la popolazione da campionare e le opzioni specificano il disegno
campionario. Esse sono
size: numerosit`
a del campione,
replace: variabile logica con modalit`
a TRUE oppure FALSE a seconda che
le estrazioni siano con o senza reimmissione,
prob: vettore di probabilit`
a che descrivono le probabilit`
a di estrazione
delle unit`
a della popolazione (lopzione default `e che le probabilit`
a siano
costanti).
Supponiamo ad esempio di voler estrarre un campione di 20 unit`
a, senza reinserimento, dalla popolazione degli 8101 comuni italiani. Se il data frame comuni
contiene la lista dei comuni, ordinata alfabeticamente, e i dati corrispondenti,
la funzione appropriata `e

38

`
CAPITOLO 6. DISTRIBUZIONI DI PROBABILITA

camp <- sample(1:8101, size=20, replace=FALSE)


Se le probabilit`
a di inserimento nel campione, anzich`e uguali per tutti i
comuni, devono essere proporzionali al peso demografico, la specifica sar`
a
> camp <- sample(1:8101, size=20, replace=FALSE,
+ prob=comuni$Pop/sum(comuni$Pop))
> sort(camp)
[1]
171 1760 1859 1986 3303 3359 3378 3591 4100 4322
[11] 4406 4654 4989 5396 5557 6231 7085 7648 7668 8049
> comuni$Nome[sort(camp)]
[1] Orbassano Arese Milano
[4] Calusco dAdda Fara Vicentino San Vito di Leguzzano
[7] Vicenza Venezia Villanova dAlbenga
[10] Montecchio Emilia Castel Maggiore Sesto Fiorentino
[13] Ancona Roma Cagnano Amiterno
[16] Qualiano Castelsilano Catania
[19] Paterno Quartu SantElena
Per simulare un campione di 10 lanci di una moneta regolare, la funzione
appropriata `e
> camp <- sample(c(C, T), size=10, replace=TRUE)
Il numero di teste osservato nel campione si ottiene mediante
> length(camp[camp==T])
[1] 6
Se la moneta `e truccata e la probabilit`
a di osservare testa `e pari a 0.4, il
campione si otterr`
a con
> sample(c(C, T), size=10, replace=TRUE, prob=c(0.4, 0.6))
Una specificazione equivalente pu`
o essere
> sample(c(C,C,T,T,T), size=10, replace=TRUE)
In alcuni problemi statistici si richiede luso di permutazioni casuali di un
collettivo di oggetti. Ad esempio, una permutazione casuale dei numeri da 1 a
10 viene fornita da
> sample(1:10,size=10,replace=FALSE)
[1] 6 3 9 10 4 8 1 2 5 7
Analogamente, per scegliere a caso una matrice di permutazione1 nello spazio
di tutte le matrici di permutazione dordine 4 possiamo procedere come segue.
1 Una matrice di permutazione `
e una matrice quadrata dordine n, avente in ogni riga e in
ogni colonna un elemento pari a uno ed n 1 elementi uguali a zero.

6.2. CAMPIONAMENTO

39

> id4 <- matrix(0,4,4)+diag(rep(1,4)) # matrice identica dordine 4


> perm <- id4[,sample(1:dim(id4)[1],size=dim(id4)[1],
+ replace=FALSE)]
> perm
[,1] [,2] [,3] [,4]
[1,] 1 0 0 0
[2,] 0 0 0 1
[3,] 0 1 0 0
[4,] 0 0 1 0

40

`
CAPITOLO 6. DISTRIBUZIONI DI PROBABILITA

Capitolo 7

Un primo sguardo ai grafici


Rappresentazioni grafiche appropriate sono una risorsa preziosa non solo durante lanalisi ed interpretazione dei dati ma anche in sede di presentazione
dei risultati. Nellambiente di R sono disponibili sia funzioni in grado di gestire unampia gamma di presentazioni grafiche diverse che funzioni dedicate a
diagrammi particolari. Rientra nella prima classe la funzione plot(), mentre
hist() `e forse lesempio pi`
u importante della seconda. Altre funzioni controllano primitive grafiche come punto, linea, rettangolo, poligono, testo. In ogni
caso il sistema prevede molteplici opzioni che assicurano un controllo completo
del risultato finale.
I grafici sono visualizzati in una finestra ausiliaria e possono essere archiviati
in una variet`
a di formati (metafile, postscript, pdf, jpeg) usando il men`
u File
della console.

7.1

La funzione plot()

Lo strumento pi`
u generale per rappresentare graficamente gli oggetti `e la funzione plot(). La forma generale `e plot(x,opzioni) oppure plot(x,y,opzioni)
in cui x, y sono appropriati oggetti R e le opzioni definiscono laspetto finale del
grafico. Le opzioni principali sono
type: determina il tipo di grafico, a scelta tra
p (points), punti (default),
l (lines), linee,
b (both), punti e linee,
h (histogram), linee verticali,
s, S (steps), linee orizzontali e verticali,
n (none), sopprime la rappresentazione grafica;
xlim, ylim: campo di variazione degli assi;
41

42

CAPITOLO 7. UN PRIMO SGUARDO AI GRAFICI


xlab, ylab: titoli per gli assi;
main, sub: titolo (principale e secondario) del grafico;
add: variabile logica con modalit`
a TRUE, FALSE; se uguale a TRUE sovrappone il risultato al grafico eventualmente presente nella finestra.

Lapplicazione pi`
u semplice `e il diagramma di funzioni descrivibili mediante
semplici espressioni matematiche, come la cubica x3 o la funzione esponenziale.
Per sovrapporre i diagrammi basta usare lopzione add=TRUE.
>
+
+
>

plot(function(x) x^3, from=-3, to=5,


xlab=x, ylab=Valore della funzione,
main=Diagrammi di funzioni)
plot(exp, from=-3, to=5, add=TRUE)

50
0

Valore della funzione

100

Diagrammi di funzioni

Figura 7.1: Diagrammi di funzioni con plot().


Le applicazioni statistiche richiedono i diagrammi delle funzioni di densit`
ao
di ripartizione di particolari distribuzioni. Nellesempio seguente confrontiamo le

7.1. LA FUNZIONE PLOT()

43

funzioni di densit`
a delle distribuzioni Normali con medie rispettivamente uguali
a 0 e 1 e deviazioni standard uguali a 1 e 1.5.
>
+
+
>

plot(dnorm, from=-5, to=5,


xlab=x, ylab=Funzione di densita,
main=Confronto N(0,1),N(1,1.5))
plot(function(x) dnorm(x,mean=1,sd=1.5), from=-5,to=5, add=TRUE)

0.2
0.0

0.1

Funzione di densit

0.3

0.4

Confronto N(0,1),N(1,1.5)

Figura 7.2: Funzioni di densit`


a gaussiane.
Per le distribuzioni discrete, come la Binomiale, `e opportuno specificare
linsieme dei punti con probabilit`
a positiva.
>
>
+
+

bin1 <- function(x) dbinom(x,size=10,prob=0.5)


plot(0:10,bin1(0:10),type=h,xlab=Numero di Successi,
ylab=Probabilita,main = Binomiale(n = 10, p = 0.5),
lwd=2)

Nel comando plot(), 0:10 e bin1(0:10) sono i vettori delle ascisse e delle
ordinate dei punti da rappresentare. Nellesempio seguente sovrapponiamo le

44

CAPITOLO 7. UN PRIMO SGUARDO AI GRAFICI

0.15
0.10
0.00

0.05

Probabilit

0.20

0.25

Binomiale(n = 10, p = 0.5)

10

Numero di Successi

Figura 7.3: Funzione di probabilit`


a binomiale.
funzioni di ripartizione della Binomiale
di parametri n = 10, p = 0.5 e della

Normale di parametri = 5, = 2.5. Il parametro grafico lwd (line width)


controlla lo spessore delle linee mentre col controlla il colore degli elementi del
grafico.
>
>
>
+
+
>

bin2 <- function(x) pbinom(x,size=10,prob=0.5)


norm2 <- function(x) pnorm(x,mean=5,sd=sqrt(2.5))
plot(0:10,bin2(0:10),type=s,lwd=2,
xlab=Numero di Successi,ylab=F. di Ripartizione,
main = Confronto Binomiale(n = 10, p = 0.5), N(5, sqrt(2.5)))
plot(norm2,0,10,add=TRUE,col=red,lwd=2)

7.2

Le primitive grafiche

Nellambiente di R sono disponibili molte funzioni che permettono di inserire in


un grafico punti, segmenti, stringhe di testo ed altri elementi grafici. Le funzioni
pi`
u utili sono

7.2. LE PRIMITIVE GRAFICHE

45

0.6
0.4
0.0

0.2

F. di Ripartizione

0.8

1.0

Confronto Binomiale(n = 10, p = 0.5), N(5, sqrt(2.5))

10

Numero di Successi

Figura 7.4: Funzioni di ripartizione binomiale e normale.


points(x,y): punti con ascisse e ordinate specificate nei vettori x ed y,
rispettivamente;
lines(x,y): linea spezzata congiungente i punti con ascisse e ordinate
specificate nei vettori x ed y, rispettivamente;
rect(x1,y1,x2,y2): rettangolo di cui (x1 , y1 ) e (x2 , y2 ) sono i vertici
opposti in basso a sinistra e in alto a destra;
polygon(x,y): poligono con vertici definiti dai vettori x (ascisse) ed y
(ordinate);
text(x,y,labels): testo definito dallopzione labels nelle posizioni specificate dai vettori x (ascisse) ed y (ordinate).
Come illustrazione mostriamo la costruzione dellottagono regolare.
> x <- cos((0:7)*pi/4); > y <- sin((0:7)*pi/4)
> par1 <- par()

46
>
>
+
>
>
>
>
>
>

CAPITOLO 7. UN PRIMO SGUARDO AI GRAFICI


par(pty=s)
plot(x,y,type=p,xaxt=n,yaxt=n,pch=20,
xlab=,ylab=)
points(0,0,pch=20)
lines(x,y)
lines(x[c(1,length(x))],y[c(1,length(y))])
text(x,y,labels=LETTERS[1:8],pos=4)
text(0,0,labels=O,pos=4)
par(par1)

Figura 7.5: Ottagono regolare.


Nellesempio precedente vengono modificati alcuni parametri grafici correnti.
Il comando par1 <- par() salva nella variabile par1 i valori di default dei
parametri grafici contenuti in par, in modo da poterli ripristinare alla fine. La
Tabella 7.1 elenca i parametri grafici duso pi`
u comune.
Nellultimo esempio combiniamo primitive grafiche e numeri pseudo-casuali
in modo da ottenere cerchi di centro, raggio e colore casuali.
> plot(x<-rnorm(100),y<-rnorm(100), type=n, xaxt=n,yaxt=n,

7.2. LE PRIMITIVE GRAFICHE


Parametro
cex

col
lty

lwd
pch

pty
xaxt
yaxt

Risultato
fattore di riduzione o ingrandimento di caratteri e simboli
rispetto allo standard (variabile numerica, ad esempio
cex=0.8)
colore (variabile alfanumerica, ad esempio col=red)
stile delle linee (variabile alfanumerica, con modalit`
a
solid, dotted, dashed, dotdash,
blank)
spessore delle linee (variabile numerica con valori interi,
default uguale a 1, ad esempio lwd=2)
simbolo per la rappresentazione dei punti (variabile
numerica, pch=1:25, o alfanumerica definita da un singolo
carattere, ad esempio pch=*)
forma del grafico (quadrato, pty=s o di dimensione
massima, pty=m)
xaxt=n sopprime lasse x
yaxt=n sopprime lasse y
Tabella 7.1: Alcuni parametri grafici.

+ xlab=, ylab=)
> points(x,y, pch=19,cex=(abs(x)+abs(y))/2,
+ col=grey((abs(x)+abs(y))/(1+abs(x)+abs(y))))

47

48

CAPITOLO 7. UN PRIMO SGUARDO AI GRAFICI

Figura 7.6: Cerchi casuali.

Capitolo 8

Analisi iniziale dei dati


Il processo di apprendimento dai dati empirici (siano essi ottenuti mediante
indagini osservazionali o rilevazioni pianificate) richiede operazioni di sintesi
ed ordinamento mediante distribuzioni di frequenza, indici riassuntivi e presentazioni grafiche. R mette a disposizione numerosi strumenti in grado di agevolare
il lavoro dellanalista in questa fase preliminare.
Le distribuzioni di frequenza, univariate o multivariate, sono gestite dalla
funzione table(). Nel caso particolare di una singola variabile numerica `e
preferibile usare la funzione hist() che produce sia la distribuzione di frequenza
in classi che il corrispondente istogramma.
Per quanto riguarda le statistiche riassuntive, la funzione dimpiego pi`
u generale `e summary(), con risultati diversi a seconda delloggetto a cui `e applicata.
Nel caso di un data frame restituisce una tabella contenente la distribuzione di
frequenza delle variabili qualitative e, per le variabili numeriche, minimo, massimo, quartili e media aritmetica. La funzione ecdf() fornisce la funzione di
ripartizione empirica mentre quantile() esegue il calcolo dei quantili campionari. Le funzioni mean(), var() e sd() producono media, varianza e deviazione
standard, mentre cor() restituisce il coefficiente di correlazione lineare di dati
numerici bivariati.
Per quanto riguarda le presentazioni grafiche, oltre al gi`
a ricordato istogramma, sono facilmente ottenibili diagrammi a rettangoli distanziati con barplot(),
presentazioni a ramo e foglie con stem() e diagrammi scatola e baffi con boxplot().
Diagrammi di dispersione per dati numerici bivariati si ottengono mediante
plot(). Un elenco dei principali diagrammi statistici `e riportato nella Tabella
8.1.

8.1

Tabelle di frequenza

Dedichiamo questa sezione alle tabelle di frequenza univariate e bivariate utilizzando i dati rilevati dalla Banca dItalia nellindagine campionaria I bilanci delle
famiglie italiane nellanno 2002. A partire da questo archivio abbiamo formato il
49

50

CAPITOLO 8. ANALISI INIZIALE DEI DATI


Funzione
barplot()
boxplot()
coplot()
hist()
pairs()
plot()
qqnorm()
qqplot()

Diagramma
diagramma a rettangoli distanziati
diagramma scatola-baffi
diagramma di dispersione di una coppia di variabili,
subordinatamente ad una terza variabile
istogramma
matrice dei diagrammi di dispersione a coppie
di un insieme di variabili
diagramma di dispersione
diagramma quantile-quantile in ipotesi di normalit`
a
diagramma quantile-quantile
Tabella 8.1: Principali diagrammi statistici.

data frame fam02 contenente, per ognuna delle n = 8011 famiglie del campione,
larea territoriale (area, variabile categoriale con cinque modalit`
a corrispondenti
alle ripartizioni territoriali ISTAT), il numero di componenti (ncomp, variabile
numerica discreta) ed il reddito familiare (red, variabile numerica continua ).
Ricaviamo innanzitutto la distribuzione delle famiglie secondo larea territoriale.
> disarea <- table(fam02$area,dnn=Area Territoriale)
> disarea
Area Territoriale
N-O N-E Centro Sud Isole
2079 1602 1665
1713 952
> round(disarea/sum(disarea),3) # frequenze relative
Area Territoriale
N-O
N-E
Centro Sud
Isole
0.260 0.200 0.208 0.214 0.119
La presentazione grafica `e il classico diagramma a rettangoli distanziati, facilmente ottenibile con barplot().
>
+
+
+

barplot(as.vector(100*disarea/sum(disarea)),
xlab=Area Territoriale,ylab=Frequenza %,col=lightgrey,
names.arg=c(N-O,N-E,Centro,Sud,Isole),
main=Ripartizione delle Famiglie per Area Territoriale)

Per valutare leffetto dellarea territoriale sul numero di componenti delle


famiglie serve la distribuzione congiunta delle due variabili.
> tab1 <- table(fam02$area,fam02$ncomp,dnn=c(Area,
+ Numero di Componenti))
> tab1
Numero di Componenti
Area
1
2
3
4
5
6
7
8

8.1. TABELLE DI FREQUENZA

51

15
10
0

Frequenza %

20

25

Ripartizione delle Famiglie per Area Territoriale

NO

NE

Centro

Sud

Isole

Area Territoriale

Figura 8.1: Campione Banca dItalia: distribuzione territoriale delle famiglie.


N-O
N-E
Centro
Sud
Isole

498
370
373
339
192

671
514
448
421
238

513
368
371
303
196

318 64
267 61
357 93
430 175
227 77

14
14
19
40
16

0
6
3
4
4

1
2
1
1
2

Le funzioni rowSums(), colSums() calcolano le somme di riga e di colonna


della tabella di contingenza, cio`e le distribuzioni marginali delle due variabili. Le
distribuzioni subordinate del numero di componenti per ogni area territoriale si
ottengono facilmente dividendo la tabella di contingenza per le somme di riga, o
pi`
u semplicemente mediante la funzione prop.table(, margin=1) come viene
mostrato nellesempio.
> rowSums(tab1)
N-O
N-E Centro
2079
1602
1665
> colSums(tab1)
1
2
3
4

Sud
1713
5

Isole
952
6

52

CAPITOLO 8. ANALISI INIZIALE DEI DATI

1772 2292 1751 1599 470 103


17
7
> round(prop.table(tab1,margin=1),3)
Numero di Componenti
Area
1
2
3
4
N-O
0.240 0.323 0.247 0.153
N-E
0.231 0.321 0.230 0.167
Centro 0.224 0.269 0.223 0.214
Sud
0.198 0.246 0.177 0.251
Isole 0.202 0.250 0.206 0.238

5
0.031
0.038
0.056
0.102
0.081

6
0.007
0.009
0.011
0.023
0.017

7
0.000
0.004
0.002
0.002
0.004

8
0.000
0.001
0.001
0.001
0.002

Le distribuzioni subordinate dellarea territoriale, per ogni fissato valore del


numero di componenti, si otterrebbero in modo analogo, dividendo la tabella per
le somme di colonna oppure mediante la funzione prop.table(, margin=2).
La tabella delle distribuzioni subordinate mette in luce differenze non trascurabili tra le aree territoriali, per quanto riguarda la dimensione delle famiglie.
Il risultato `e meglio evidenziato dalla presentazione grafica con barplot().
>
+
+
+

barplot(100*t(prop.table(tab1,margin=1)),beside=FALSE,
legend.text=TRUE, col=grey(0:8/8),xlim=c(0,8),
xlab=Area Territoriale,ylab=Frequenza %,
main=Area Territoriale e Dimensione delle Famiglie)

Lopzione beside determina laspetto finale del grafico; beside=TRUE associa ad ogni colonna della tabella un gruppo di rettangoli affiancati, mentre beside=FALSE li sovrappone. Nel nostro esempio ogni rettangolo descrive
una particolare distribuzione subordinata, con divisioni interne corrispondenti
alle diverse modalit`
a (numero di componenti delle famiglie). Data la normalizzazione delle distribuzioni, i cinque rettangoli hanno esattamente la stessa
altezza.
La funzione summary(), applicata ad una tabella di contingenza, fornisce la
statistica chi-quadrato ed il p-value del test dindipendenza delle variabili.
> summary(tab1)
Number of cases in table: 8011
Number of factors: 2
Test for independence of all factors:
Chisq = 265.94, df = 28, p-value = 1.289e-40
Chi-squared approximation may be incorrect
Quando una o pi`
u variabili sono di tipo continuo, `e necessario operare preliminarmente una suddivisione in classi. Un criterio conveniente `e di usare come
estremi delle classi quantili scelti opportunamente. Illustriamo il procedimento con i dati del reddito familiare. Per determinare i quantili campionari ci
serviamo della funzione quantile() avente i seguenti argomenti
x: vettore numerico dei dati,
probs: ordine del quantile (o dei quantili); probs=0(1) fornisce il dato
minimo (massimo),

8.1. TABELLE DI FREQUENZA

53

100

Area Territoriale e Dimensione delle Famiglie

60
40
0

20

Frequenza %

80

8
7
6
5
4
3
2
1

NO

NE

Centro

Sud

Isole

Area Territoriale

Figura 8.2: Campione Banca dItalia: numero di componenti delle famiglie per
area territoriale.
na.rm: trattamento dei dati NaN e NA (na.rm=TRUE li esclude),
names: names=TRUE/FALSE include (non include) i descrittori dei risultati.
Lesempio mostra il calcolo dei quantili del reddito (migliaia di euro).
> round(quantile(fam02$red/1000,probs=seq(0,1,by=0.2),na.rm=TRUE),1)
0% 20% 40% 60% 80% 100%
0.0 13.0 19.6 27.5 39.4 461.2
Passiamo ora a considerare la distribuzione congiunta dellarea territoriale e del
reddito.
>
+
+
>

tab2<-table(fam02$area,cut(fam02$red/1000,
quantile(fam02$red/1000,seq(0,1,by=0.2)),include.lowest=TRUE),
dnn=c(Area,Reddito Familiare (x 1000)))
tab2
Reddito Familiare (x 1000)

54

CAPITOLO 8. ANALISI INIZIALE DEI DATI

Area
N-O
N-E
Centro
Sud
Isole

[0,13] (13,19.6] (19.6,27.5] (27.5,39.4] (39.4,461]


270
362
433
494
520
195
260
333
370
444
231
338
352
381
363
595
413
304
226
175
312
229
180
131
100

La funzione cut() opera la divisione in classi dei dati reddituali usando come
estremi delle classi i quintili del reddito; lopzione include.lowest richiede
linclusione nella prima classe del dato minimo, in questo caso zero.
La dipendenza del reddito dallarea territoriale emerge chiaramente dalla
tabella delle distribuzioni subordinate e dal grafico corrispondente.
> round(prop.table(tab2,margin=1),3)
Reddito Familiare (x 1000)
Area
[0,13] (13,19.6] (19.6,27.5] (27.5,39.4] (39.4,461]
N-O
0.130
0.174
0.208
0.238
0.250
N-E
0.122
0.162
0.208
0.231
0.277
Centro
0.139
0.203
0.211
0.229
0.218
Sud
0.347
0.241
0.177
0.132
0.102
Isole
0.328
0.241
0.189
0.138
0.105
> barplot(100*t(prop.table(tab2,margin=1),3)),beside=FALSE,col=grey(1:5/5),
+ legend.text=TRUE,xlim=c(0,9),
+ xlab=Area Territoriale,ylab=Frequenza %,
+ main=Area Territoriale e Reddito delle Famiglie)

8.2

Istogrammi

Stabilire la tipologia distributiva di una variabile numerica `e un problema frequente che viene trattato con strumenti diversi, a seconda della natura dei
dati disponibili. Nella fase iniziale di unindagine `e opportuno utilizzare diagrammi distribuzionali, in grado di far emergere caratteristiche globali della
distribuzione come posizionamento e dispersione, simmetria o asimmetria, unimodalit`
a o multimodalit`
a, dati anomali e specifiche tipologie quali la legge normale, esponenziale o uniforme. Istogrammi, presentazioni a ramo e foglie e
diagrammi scatola-baffi sono gli strumenti pi`
u usati.
La funzione R per listogramma `e hist(). Gli argomenti principali sono
x: vettore numerico dei dati,
breaks: descrizione delle classi; la specifica pu`
o essere il loro numero
oppure il vettore numerico degli estremi,
freq: variabile logica; TRUE produce la rappresentazione delle frequenze
assolute, FALSE la rappresentazione della densit`
a di frequenza,

8.2. ISTOGRAMMI

55

100

Area Territoriale e Reddito delle Famiglie

60
40
0

20

Frequenza %

80

(39.4,461]
(27.5,39.4]
(19.6,27.5]
(13,19.6]
[0,13]

NO

NE

Sud

Isole

Area Territoriale

Figura 8.3: Campione Banca dItalia: reddito familiare per area territoriale.
plot: variabile logica; TRUE produce listogramma, FALSE una lista contenente estremi e punti medi delle classi e i corrispondenti valori della
frequenza assoluta e della densit`
a di frequenza.
Illustriamo luso di hist() con i dati reddituali delle famiglie.
>
+
+
+

hist(fam02$red/1000,breaks=c(seq(0,80,by=5),465),freq=False,
include.lowest=TRUE,xlim=c(0,100),col=grey,
xlab=Reddito Familiare (x 1000),ylab=Densit\{a} di Frequenza,
main=Reddito delle Famiglie Italiane 2002)

Il diagramma copre solo i redditi fino a 100000 euro, i redditi oltre questa
soglia hanno comunque una densit`
a trascurabile.
Per ottenere il risultato analitico basta specificare plot=FALSE.
> redclas <- hist(fam02$red/1000,breaks=c(seq(0,200,by=5),465),
+ include.lowest=TRUE,freq=FALSE,plot=FALSE)
> redclas$counts
[1] 174 720 1224 1173 1053 ...

56

CAPITOLO 8. ANALISI INIZIALE DEI DATI

> round(redclas$density,3)
[1] 0.004 0.018 0.031 0.029 0.026 ...
La lista redclas contiene i descrittori delle classi di reddito; in particolare
le frequenze assolute (counts) e le densit`
a (density).
Listogramma dei redditi suggerisce una tipologia distributiva di tipo lognormale. Lipotesi pu`
o essere controllata in modo informale sovrapponendo
allistogramma empirico la densit`
a lognormale con parametri stimati sulla base
dei dati.
>
>
>
+

m <- mean(log(fam02$red[fam02$red>0]/1000))
s <- sd(log(fam02$red[fam02$red>0]/1000))
plot(redteor <- function(x) dlnorm(x,m,s),0,500,add=TRUE,
col=red,lwd=2)

0.020
0.015
0.000

0.005

0.010

Densit di Frequenza

0.025

0.030

0.035

Reddito delle Famiglie Italiane 2002

20

40

60

80

100

Reddito Familiare (x 1000)

Figura 8.4: Campione Banca dItalia: distribuzione del reddito familiare con
interpolante lognormale.
Il grafico quantile-quantile mostra un buon adattamento del modello fino a
40-50000 euro, mentre per i redditi pi`
u elevati la discrepanza diventa via via pi`
u
pronunciata.

8.2. ISTOGRAMMI
>
+
+
+
>

57

plot(quantile(fam02$red/1000,seq(0,1,by=0.005)),
qlnorm(seq(0,1,by=0.005),m,s),type=p,
xlab=Quantili dei Redditi,ylab=Quantili Distr. Lognormale,
main=Approssimazione Lognormale,xlim=c(0,80),ylim=c(0,80))
lines(c(-10,120),c(-10,120),col=red,lwd=2)

40
0

20

Quantili Distr. Lognormale

60

80

Approssimazione Lognormale

20

40

60

80

Quantili dei Redditi

Figura 8.5: Campione Banca dItalia: quantili del reddito empirici e basati sul
modello lognormale.
Un controllo pi`
u preciso dellapprossimazione lognormale viene effettuato da
test statistici funzionali come il test di Kolmogorov-Smirnov a cui corrisponde
la funzione, ks.test().
> ks.test(fam02$red,y=plnorm,alternative=two.sided)
Warning message:
cannot compute correct p-values with ties in:
+ ks.test(fam02$red2.Y, y = plnorm, alternative = two.sided)
One-sample Kolmogorov-Smirnov test
data: fam02$red
D = 0.997, p-value = < 2.2e-16

58

CAPITOLO 8. ANALISI INIZIALE DEI DATI

alternative hypothesis: two.sided


Il p-value prossimo a zero (si noti che il risultato `e approssimato a causa
di valori ripetuti nei dati) conferma che lo scostamento tra i dati osservati dei
redditi familiari ed il modello lognormale `e rilevante e non pu`
o essere attribuito
solo allerrore di campionamento.
Con lo stesso strumento possiamo controllare le differenze tra le aree territoriali. I dati suggeriscono ad esempio che le famiglie del nord-est siano pi`
u
ricche di quelle del nord-ovest. Tecnicamente, questo equivale ad ipotizzare che
la distribuzione del reddito nel nord-ovest sia stocasticamente minore1 di quella
del nord-est.
> ks.test(fam02$red[fam02$area == 1]/1000,
+ y=fam02$red[fam02$area == 2]/1000,
+ alternative=greater)
Two-sample Kolmogorov-Smirnov test
data: fam02$red[fam02$area == 1]/1000 and
fam02$red[fam02$area == 2]/1000
D^+ = 0.0354, p-value = 0.1036
alternative hypothesis: greater
In questo caso il p-value attorno al 10% lascia aperta la possibilit`
a che le
differenze osservate tra le due aree siano dovute allerrore di campionamento.

8.3

Diagrammi scatola-baffi

Il diagramma scatola-baffi offre una descrizione della distribuzione statistica


assai pi`
u compatta dellistogramma, essendo basata essenzialmente sui quartili.
La funzione boxplot() ha i seguenti parametri
x: vettore numerico dei dati; la specificazione pu`
o anche essere una collezione
di vettori x, y, z, una lista di pi`
u vettori o una formula del tipo x~f, nel
qual caso viene prodotto un grafico per ogni singolo vettore o per ogni
modalit`
a del fattore f,
range: variabile numerica che controlla lestensione dei baffi (default:
range=1.5),
notch: variabile logica; la specificazione notch=TRUE visualizza un intervallo di confidenza per la mediana della distribuzione,
plot: variabile logica; plot=FALSE visualizza al posto del diagramma le
corrispondenti statistiche di sintesi.
1 Date due variabili X, Y con funzioni di ripartizione F (t), F (t), X `
e stocasticamente
X
Y
minore di Y se, per ogni numero reale t, FX (t) FY (t).

8.3. DIAGRAMMI SCATOLA-BAFFI

59

Come hist(), la funzione consente luso dei parametri grafici di plot().


Gli esempi utilizzano il data frame laurea contenente caratteristiche di un
campione di 462 laureati in Economia a Ca Foscari. Vediamo la distribuzione
del voto di laurea.
> boxplot(laurea$votolaurea,horizontal=TRUE,xlab=Voto di Laurea,
+ main=Laureati in Economia,col=grey,boxwex=0.6)

Laureati in Economia

80

85

90

95

100

105

110

Voto di Laurea

Figura 8.6: Voto di laurea in Economia.


Mettiamo ora a confronto il voto di diploma dei maschi e delle femmine,
utilizzando il fattore genere.
> table(laurea$genere)
F M
279 183
> boxplot(laurea$votodip~laurea$genere,horizontal=TRUE,notch=TRUE,
+ xlab=Voto di Diploma,col=grey,boxwex=0.6,
+ main=Laureati in Economia)

60

CAPITOLO 8. ANALISI INIZIALE DEI DATI

Laureati in Economia

60

70

80

90

100

Voto di Diploma

Figura 8.7: Voto di diploma dei laureati in Economia.


Lopzione plot=FALSE produce una lista con componenti stats (quartili
delle distribuzioni), n (numerosit`
a dei gruppi), conf (estremi degli intervalli di
confidenza), out (eventuali dati anomali).
> boxplot(laurea$votodip~laurea$genere,notch=TRUE,plot=FALSE)
$stats
[,1] [,2]
[1,] 60.00000 60
[2,] 76.66667 70
[3,] 86.00000 80
[4,] 94.50000 91
[5,] 100.00000 100
$n
[1] 279 183
$conf
[,1] [,2]
[1,] 84.3131 77.54726

8.4. INDICI DI SINTESI

61

[2,] 87.6869 82.45274


$out
numeric(0)

8.4

Indici di sintesi

La sintesi dei dati mediante indici analitici pu`


o avvalersi di funzioni di sistema,
come quantile() o summary(), oppure utilizzare funzioni definite dallutente.
Consideriamo ancora i dati reddituali delle famiglie ed applichiamo la funzione summary() che offre un riepilogo della distribuzione comprendente, oltre
ai dati minimo e massimo, i quartili e la media aritmetica.
> summary(fam02$red/1000)
Min. 1st Qu. Median
Mean 3rd Qu.
0.00
14.50
23.22
28.23
35.73

Max.
461.20

Gli indici di dispersione usualmente associati alla media e alla mediana sono
la deviazione standard e la deviazione assoluta mediana2 (o mad, da median absolute deviation), ottenibili rispettivamente mediante le funzioni sd() e mad().
` bene ricordare che la versione R della deviazione standard `e basata sulla vaE
P
rianza campionaria corretta s2n,c = i (xi xn )2 /(n 1). Per evitare problemi
dovuti a dati mancanti, `e opportuno usare lopzione na.rm=TRUE.
> round(sd(fam02$red/1000,na.rm=TRUE),2)
[1] 22.22
> round(mad(fam02$red/1000,na.rm=TRUE,constant=1),2)
[1] 9.94
Nel caso dei dati reddituali, data la forte asimmetria della distribuzione, la
sintesi pi`
u significativa `e un opportuno insieme di quantili, ad esempio i decili.
> round(quantile(fam02$red/1000,c(seq(0,0.9,by=0.1),0.95,0.99,1),
+ na.rm=TRUE),2)
0%
10%
20%
30%
40%
50%
60%
70%
80%
0.00
9.60 13.02 16.07 19.60 23.22 27.45 32.74 39.39
90%
95%
99%
100%
51.00 64.23 103.88 461.25
Lo stesso risultato `e facilmente ottenibile per ogni modalit`
a di specificati
fattori di stratificazione, mediante la funzione tapply(). Nel caso del reddito, come abbiamo gi`
a visto, un fattore di stratificazione importante `e larea
territoriale.
> quantili <- tapply(fam02$red2/1000,fam02$area,
+ function(x) round(quantile(x,c(seq(0,0.9,by=0.1),0.95,0.99,1),
2 Definita

come la mediana delle deviazioni assolute dalla mediana.

62

CAPITOLO 8. ANALISI INIZIALE DEI DATI

120

Curva Quantilica del Reddito Familiare

NordOvest

100

NordEst
Centro

80
60

Isole

20

40

Quantile (x 1000)

Sud

20

40

60

80

100

Ordine quantilico

Figura 8.8: Campione Banca dItalia: quantili del reddito nelle aree territoriali.
+ na.rm=TRUE),2))
$Nord-Ovest
0%
10%
20%
30%
0.00 12.10 15.65 19.34
90%
95%
99%
100%
55.58 69.54 107.34 386.61
.....
$Isole
0%
10%
20%
30%
0.00
7.20
9.76 12.54
90%
95%
99%
100%
39.78 51.25 81.13 177.02

40%
23.13

50%
26.85

60%
31.31

70%
36.19

80%
43.48

40%
14.78

50%
17.24

60%
21.36

70%
25.04

80%
30.32

Il confronto delle aree territoriali risulta pi`


u agevole per mezzo di un grafico.
> plot(c(seq(0,90,by=10),95,99),quantili[[1]][-13],type=b,lwd=2,
+ xlim=c(0,100),ylim=c(0,130),
+ xlab=Ordine quantilico,ylab=Quantile (x 1000),

8.5. ANALISI DELLA CONCENTRAZIONE

63

+ main=Curva Quantilica del Reddito Familiare)


> points(c(seq(0,90,by=10),95,99),quantili[[2]][-13],type=b,
+ lty=dotted,lwd=2)
...
Dal grafico emerge con chiarezza la differenza tra famiglie del centro-nord e
del mezzogiorno.

8.5

Analisi della concentrazione

Un tema classico della letteratura economica `e la concentrazione del reddito.


Gli strumenti analitici tradizionali sono la curva di Lorenz ed il rapporto di
concentrazione R di Gini. La curva di Lorenz mostra landamento della quota
cumulata di reddito q detenuta dalla frazione p dei redditieri pi`
u poveri, al
variare di p nellintervallo [0, 1].
>
>
>
+
+
>

q <- cumsum(sort(fam02$red))/sum(fam02$red)
p <- (1:length(fam02$red))/length(fam02$red)
plot(p,q,type=l,lwd=2,
xlab=Frequenza Cumulata Famiglie,ylab=Quota Cumulata Reddito,
main=Curva di Lorenz Reddito Familiare 2002)
lines(c(0,1),c(0,1),type=l,lwd=2)

Il rapporto di concentrazione misura lo scostamento relativo della curva di


Lorenz dalla retta di equidistribuzione ed `e facilmente ottenibile dai vettori p,
q.
> erre <- sum(p-q)/(sum(p)-1)
> erre
[1] 0.3596116

64

CAPITOLO 8. ANALISI INIZIALE DEI DATI

0.6
0.4
0.2
0.0

Quota Cumulata Reddito

0.8

1.0

Curva di Lorenz Reddito Familiare 2002

0.0

0.2

0.4

0.6

0.8

1.0

Frequenza Cumulata Famiglie

Figura 8.9: Campione Banca dItalia: curva di concentrazione di Lorenz.

Capitolo 9

Visualizzare dati
multivariati
Lanalisi di data frame unit`
a variabili contenenti sia variabili numeriche che
variabili non numeriche presenta problemi aggiuntivi rispetto al caso univariato,
dovuti in particolare alla interdipendenza delle variabili ed alla possibile non
omogeneit`
a delle unit`
a rilevate. Illustriamo largomento con dati del censimento
2001 relativi ad et`
a e stato civile dei residenti ed alla dimensione delle famiglie.
Le unit`
a di rilevazione sono i 1112 comuni italiani con pi`
u di 10000 abitanti. Le
variabili numeriche sono
Pop: numero di residenti,
Inv : indice di invecchiamento (%),
Mas: rapporto di mascolinit`
a (%),
Vec: indice di vecchiaia (%),
Dig: indice di dipendenza dei giovani (%),
Dia: indice di dipendenza degli anziani (%),
Ric: indice di ricambio (%),
Fam1 : famiglie con un solo componente (%),
Fam5 : famiglie con cinque componenti o pi`
u (%),
Con: persone coniugate (%),
Sep: persone separate legalmente o divorziate (%).
Le variabili di stratificazione sono larea territoriale e la popolazione.
65

66

CAPITOLO 9. VISUALIZZARE DATI MULTIVARIATI

9.1

Correlazione lineare

Le matrici di covarianza e di correlazione sono gli strumenti pi`


u semplici per
individuare le relazioni di interdipendenza di variabili numeriche. Due sono le
limitazioni di cui si deve tener conto. Covarianze e correlazioni sono attendibili
quando le relazioni sono, almeno approssimativamente, lineari. Inoltre, campioni non omogenei e dati anomali possono alterare in modo sensibile i risultati
numerici.
Le funzioni cov() e cor() producono, rispettivamente, la matrice di covarianza e la matrice di correlazione. I dati possono essere forniti sotto forma
di un unico data frame x, oppure sotto forma di una coppia di vettori o data
frame numerici x, y. Il parametro use controlla il trattamento dei dati mancanti
offrendo le seguenti opzioni
use=all: se ci sono dati mancanti, viene visualizzato un messaggio
derrore e la matrice non `e calcolata,
use=complete: tutte le unit`
a con dati mancanti sono eliminate,
use=pairwise: nel calcolo degli elementi delle matrici si considerano
tutte le unit`
a con dati completi sulle due variabili di volta in volta in gioco;
la matrice che cos` si ottiene pu`
o non essere semidefinita positiva.
Ecco i risultati relativi al data frame cens01.
> round(cor(cens01[,5:15],use=all),2)
Pop
Inv
Mas
Vec
Dig
Dia
Ric Fam1 Fam5
Con
Sep
Pop
1.00 0.08 -0.20 0.09 -0.07 0.08 -0.06 0.14 -0.06 -0.17 0.16
Inv
0.08 1.00 -0.67 0.96 -0.72 1.00 -0.86 0.72 -0.65 0.23 0.47
Mas -0.20 -0.67 1.00 -0.65 0.44 -0.68 0.54 -0.61 0.40 0.18 -0.41
Vec
0.09 0.96 -0.65 1.00 -0.81 0.94 -0.82 0.71 -0.70 0.23 0.60
Dig -0.07 -0.72 0.44 -0.81 1.00 -0.65 0.85 -0.58 0.86 -0.36 -0.73
Dia
0.08 1.00 -0.68 0.94 -0.65 1.00 -0.82 0.71 -0.60 0.20 0.42
Ric -0.06 -0.86 0.54 -0.82 0.85 -0.82 1.00 -0.66 0.78 -0.34 -0.51
Fam1 0.14 0.72 -0.61 0.71 -0.58 0.71 -0.66 1.00 -0.70 -0.15 0.61
Fam5 -0.06 -0.65 0.40 -0.70 0.86 -0.60 0.78 -0.70 1.00 -0.41 -0.76
Con -0.17 0.23 0.18 0.23 -0.36 0.20 -0.34 -0.15 -0.41 1.00 0.11
Sep
0.16 0.47 -0.41 0.60 -0.73 0.42 -0.51 0.61 -0.76 0.11 1.00
Il risultato mette in luce una fitta rete di interrelazioni lineari, sia concordi che discordi, alcune molto prossime al caso di perfetta dipendenza lineare.
Questo suggerisce che le variabili osservate sono ridondanti. Si discostano da
questo schema il rapporto di mascolinit`
a, la percentuale di coniugati e soprattutto il numero dei residenti. Per rappresentare graficamente la struttura della
matrice di correlazione si pu`
o utilizzare il dendrogramma prodotto da un metodo di aggregazione gerarchica delle variabili. La funzione hclust() adempie
a questo compito dando ampie possibilit`
a di scelta del criterio di aggregazione
(legame singolo, medio o completo, metodo di Ward). Nellesempio seguente,

9.2. DIAGRAMMI DI DISPERSIONE

67

basato sul legame medio, la dissimilarit`


pa dij della generica coppia di variabili `e
calcolata mediante la relazione dij = 2(1 rij ), in cui rij `e il coefficiente di
correlazione lineare.
mcor <- cor(cens01[,5:15])
mdist <- sqrt(2*(1-mcor))
dendro <- hclust(as.dist(mdist), method=average)
plot(dendro, main=Censimento 2001: comuni oltre 10000 abitanti, sub=,
+ xlab=Dendrogramma della matrice di correlazione (legame medio),
+ ylab=Dissimilarit\{a} sqrt(2*(1 - r)))

Dia

Inv

Vec

Fam5

Dig

Ric

Fam1

Sep

Con

Pop
Mas

1.0
0.5
0.0

Dissimilarit sqrt(2*(1 r))

1.5

Censimento 2001: comuni oltre 10000 abitanti

Dendrogramma della matrice di correlazione (legame medio)

Figura 9.1: Dendrogramma delle variabili socio-demografiche.

9.2

Diagrammi di dispersione

Il metodo pi`
u usato per visualizzare dati multivariati si basa sui diagrammi di
dispersione delle variabili numeriche, ottenibili in modo molto semplice con la
funzione plot(). Se le variabili hanno unit`
a di misura e/o ordine di grandezza

68

CAPITOLO 9. VISUALIZZARE DATI MULTIVARIATI

diversi, `e opportuno eliminare questa potenziale distorsione mediante trasformazioni preliminari, come la standardizzazione1. La funzione scale() pu`
o essere utilizzata per eseguire la standardizzazione o trasformazioni analoghe. Leffetto delle eventuali variabili di stratificazione `e evidenziabile attraverso i colori
o i simboli usati per i punti. Vediamo ad esempio il diagramma di dispersione
delle variabili Fam1 e Sep.
cens01_st <- scale(cens01[,5:15], center=TRUE, scale=TRUE)
> plot((cens01_st[,c(8,11)],
+ xlab=Famiglie con un solo componente (U. St.),
+ ylab=Separati/e e divorziati/e (U. St.),
+ main=Censimento 2001 - Comuni Oltre 10000 Abitanti,
+ xlim=c(-3,4),ylim=c(-3,4),pch=as.character(demo10$Area5),
+ cex=0.6,col=gray((cens01$Area5-1)/8))
Il risultato mette in luce che nei comuni meridionali vi `e mediamente una
minore incidenza sia di famiglie con un solo componente che di separazioni e
divorzi. Le due variabili esibiscono un legame lineare diretto piuttosto stretto.
Meritano di essere ricordate due varianti del diagramma di dispersione. La
prima `e la funzione pairs() che produce la matrice dei diagrammi di dispersione di un insieme di variabili numeriche, un tentativo di scoprire le propriet`
a
della distribuzione multivariata attraverso losservazione di tutte le componenti
bivariate. Il risultato andrebbe letto in parallelo con le matrici di covarianza
e di correlazione. La seconda `e coplot() che fornisce i diagrammi di dispersione di una coppia di variabili di riferimento, X ed Y , subordinatamente alle
modalit`
a di (al massimo due) variabili concomitanti Z1 e Z2 . La versione base
`e coplot(y|z1*z2).

9.3

Componenti principali

Nellanalisi multivariata assumono grande rilevanza i metodi di compressione


dei dati, primo tra tutti quello basato sulle componenti principali. Si tratta
essenzialmente di una rotazione del sistema di riferimento cartesiano definito
dalle variabili osservate in cui le variabili associate agli assi ruotati sono combinazioni lineari delle variabili osservate. Le combinazioni lineari sono determinate
in modo da concentrare linformazione statistica in un sottospazio di dimensione
ridotta. La proiezione dei dati in questo sottospazio consente spesso di cogliere
propriet`
a salienti della distribuzione multivariata. In R questa trasformazione
`e gestita da varie funzioni. Illustriamo di seguito la funzione princomp(). I
parametri principali sono
x: matrice o data frame numerico dei dati da analizzare,
1 Data una variabile X con media e deviazione standard > 0, la corrispondente variabile
standardizzata si ottiene mediante la trasformazione lineare (X )/ ed ha media nulla e
deviazione standard unitaria.

9.3. COMPONENTI PRINCIPALI

69

Censimento 2001 Comuni Oltre 10000 Abitanti

1: NordOvest

3
3

2: NordEst
3

2
1

3
1
1
1
1
1 1 1
11 1
1
11 1
1
1 1 1 22 2 21
23 1
3
1
21
3 1
11
213 3
3 1
1
5: Isole
11
1 1
235 321 3 21 1
1 1
3
1
1312122
221 2 1
121 1 2 3
1
3 32
2
3
5 33 3 31
2
32 3 2 2 2 23 2 1 2 2
33
1 3 1133132 24 212 23 222 21
1
2
2
1
22 22
3
2
1
2
11 1
11
32 13
223222
1 15321 1 2 135
1
32 23131 11 5 2 21 25 1 2 5
11122 122 2 5
3 31
53232 2 1 2 1 12
2
3 11 1 5 14 12
1 3 12
3 332 15135212 1
21 1
11 3
13
51 2 14
1213 5
11
1
5
4
3231311 13422221153
2
2
1212
3
2
5 2 5 43223
1
2
2 24
2
1
13
3 12213211 132 1
31323122 3153
5
32 2 51
2 223 35212241242
12
2
2
324
21
32 21 1
3135 332321 31321 1522 1
1321 3522 21
312
132
11
232 2 112214 2 1 11
2 31
2
2 3 22
21
13
1
211
3 1111113122 3
22124
2 34134
2 311 35
1
222
3 2 53 22
15
551
314
3
5
2313 1
34 12312135
3 14
11 33131521 31
533
2
4
2
1
5
5
3
1
534 1
3 12423 114
4
4
53
523 2
13
45
12131 11
2
354423
3
12
43 35 3 2333 3135 122
1
1 24
4 423
4
23211251111431531 131 11323 135 3 2 4
33
4 354424 43 2
32
33
2 4 243
5444541
45125 35413 3 53 3
3
35 3
4
3 442 2
23334 24 15
2 3
41
4
24 343
2
3
2
4
4
3
4
4
4
4
44
4
42 4 454435 23 44 1344441
51254 4 5
4
5
3
1
4
3
4
4
3
4
4
445 5
5
4 44 2 5 44 4 45 54 43 4 3 4
4 4 3443
354
34444334 4242
5
4 44 4 4
45 4 4 444524 4414534454 4
4
4 452
4 5
4
34
5
4 42544243444
4
4 44 44 4 44 44 4 24425
5 43 4 4 5 4
4
4
5 54
24 44
44 4 425444 44 54
4
44 4
54 44 44 3
4
4
445 4 4 54
55
5
4
4
4 444 44 4444 4
4
4
4
5
5
55
44 444
4 444
44 5 554554 44 44 4
54
4
3
5
4
4
5
4
4
5
4
5
44 4 4 444
5
445
5 4
5 44
4
54
44 4 45 44 5445 4 4 55
4 444 4 4
4
4 5
4
4 44
4 4 4 4 44 4 5 554 44 455 5
4
444 4 5 4 5
54 4
5
555
4
4
5
4
5
4
5
5
4
54
5
5
4
4
4

2
1
0
1

1
1
1
2

4: Sud

3
31

1
1

1 21
1
1

11

Separati/e e divorziati/e (U. St.)

3
3

3: Centro

Famiglie con un solo componente (U. St.)

Figura 9.2: Frazione di famiglie con un solo componente e frazione di separati


e divorziati.
cor: variabile logica che controlla la trasformazione preliminare dei dati,
scostamento dalla media (cor=FALSE) oppure standardizzazione (cor=TRUE),
scores: variabile logica per calcolare le coordinate delle unit`
a nel sistema
di riferimento ruotato (default scores=TRUE).
Il risultato della funzione princomp() `e una lista contenente gli elementi di
base per interpretare le componenti principali, in particolare
sdev: deviazioni standard delle componenti principali, coincidenti con le
radici quadrate degli autovalori della matrice di covarianza (cor=FALSE)
o di correlazione (cor=TRUE),
loadings: coefficienti delle trasformazioni lineari che consentono di ricavare le componenti principali dalle variabili osservate, coincidenti con
gli autovettori della matrice di covarianza (cor=FALSE) o di correlazione
(cor=TRUE),

70

CAPITOLO 9. VISUALIZZARE DATI MULTIVARIATI


scores: coordinate delle unit`
a nel sistema di riferimento ruotato.

La funzione summary(), applicata alla lista prodotta da princomp(), visualizza la frazione della varianza totale assorbita dai sottospazi generati dalla
prima componente principale, dalle prime due componenti, dalle prime tre e
cos` via, un elemento essenziale per operare la scelta del modello descrittivo dei
dati.
Riportiamo di seguito i risultati relativi al data frame cens01, privato della
variabile Pop.
cp <- princomp(cens01[,6:15],cor=TRUE,scores=TRUE)
> summary(cp)
Importance of components:
Comp.1 Comp.2 Comp.3 Comp.4
Standard deviation 2.5646105 1.1905983 0.9722325 0.61304703
Proportion of Variance 0.6577227 0.1417524 0.0945236 0.03758267
Cumulative Proportion 0.6577227 0.7994752 0.8939988 0.93158143
...
Le prime tre componenti assorbono cumulativamente quasi il 90% della varianza totale, un segnale della possibilit`
a di rappresentare i dati in uno spazio
di dimensione ridotta rispetto alla situazione iniziale.
I coefficienti delle trasformazioni forniscono indicazioni sul significato delle
componenti principali. La prima componente, che assorbe da sola quasi il 66%
della varianza totale, `e interpretabile come un indicatore socio-demografico complesso che contrappone situazioni caratterizzate da valori elevati delle variabili
rapporto di mascolinit`
a, indice di dipendenza giovanile, indice di ricambio, incidenza di famiglie numerose a situazioni caratterizzate invece da valori elevati
delle variabili indice di invecchiamento, rapporto di mascolinit`
a, indice di vecchiaia, indice di dipendenza degli anziani, incidenza di famiglie con un solo
componente. La seconda componente dipende principalmente dalla frazione di
coniugati/e sulla popolazione complessiva, la terza componente dalla frazione di
separati/e e divorziati/e. Gli spazi bianchi nella tabella seguente corrispondono
a valori trascurabili.
> cp$loadings
Loadings:
Comp.1 Comp.2
Inv -0.364
Mas
0.266 -0.441
Vec -0.369
Dig
0.342 0.237
Dia -0.351 0.126
Ric
0.355 0.111
Fam1 -0.314 0.296
Fam5 0.332 0.259
Con
-0.743
Sep -0.274

Comp.3
0.329
-0.105
0.172
0.189
0.377
-0.145
-0.243
0.322
0.289
-0.637

Comp.4
-0.718

-0.105
0.177
-0.530
0.116
0.198
0.302

9.3. COMPONENTI PRINCIPALI

71

Il diagramma di dispersione dei 1112 comuni nello spazio delle prime tre
componenti opera una sintesi radicale dei dati osservati, con una perdita dinformazione sopportabile. Il grafico mostrato di seguito `e basato sulle componenti
standardizzate. Larea territoriale `e evidenziata mediante toni di grigio variabili
da molto scuro (comuni del nord-ovest) a molto chiaro (isole).
>
>
+
+
+
+

cp_st <- scale(cp$scores, center=TRUE, scale=TRUE)


pairs(cp_st[,1:3],
labels=c(Comp1 (66\%), Comp2 (14\%), Comp3 (9\%)),
main=Censimento 2001 - Comuni Oltre 10000 Abitanti,
xlim=c(-3.95,3.6),ylim=c(-3.95,3.6),
pch=20,col=gray((cens01$Area5-1)/8),row1attop=F)

Censimento 2001 Comuni Oltre 10000 Abitanti


2

Comp3 (9%)

Comp2 (14%)

Comp1 (66%)

Figura 9.3: Diagramma di dispersione delle componenti principali standardizzate.


Unulteriore applicazione delle componenti principali `e il biplot, la rappresentazione approssimata, sullo stesso grafico, delle unit`
a statistiche e delle variabili.
La qualit`
a dellapprossimazione `e tanto maggiore quanto pi`
u elevata risulta la
frazione della varianza totale assorbita dalle prime due componenti principali.

72

CAPITOLO 9. VISUALIZZARE DATI MULTIVARIATI

> biplot.princomp(cp,choices=1:2,pc.biplot=T,
+ xlabs=as.character(demo10$Area5),cex=c(0.5,0.7))

0.5

0.0

1
1

31
3

4
1
4

5 45

24
4
4

4
5

4
4
4
4
4
2 2
4
54
1
44
4
5
11 1
4
4
4
2
2
4 5
4
4
1 1 211 1 3 4
4
1
4
5
4
4
4
5
5
5
4
5 44 5 4
4 44
45 4 5 4 5 54 5 4
3 1
12 2 2
4
4
1 3
4
4
1 2 2 22
1
4
4
44
4 4 4 4
1 1
12
2
1
4 44 4
1
4
45
4
1
21
4
5 5 3 5 5 4 45 5 4 4 44 454
4
4 44 44 44 4 4
5 55 54
44
Fam11 21 1 1 1 32 12 1
5
4
4
4 44
5
4
4
5
444
5
5
4
5 55 5
44 4 4
44
3 1
111
5 554
4 Fam5
1
4
4
2
5
2
2
4
34 5
Dig 4
2
544
4 44
4
1
44 4 4
5
4
23 2
1
4
5
4
4
4
5
4
4
4
5
11 2
2 4 544 4 4 544
5
4
4
12 12
312
4
4 4 45
13 3122 1 5
52555 4 4
3 4 5
54
5 4 4 44
1 1
2 1 1 23 231
1 1 55 43 45 44 5 45 4 5
3
4
4
5
4
4
3
4
Dia
4
1 1 22 21 21
4
Ric
23 3 44 4 4 2 354 4 5 455 4 4 4 45455
33
4 54
4
11
24 4
5 44
Inv
2
22 123 2
5
1
4
3
2
2
3
5
2
4
4
5
4
4
55
3
4 4 4 4
1 3121
2 11232231231 2 1
1 4 4 3 4 5 4 44
Vec
4
22
3 32 1 1
5 4 54
55
15 41435442 5 4424 5 5 5 44 4
524
32 133 211
2
2
2
2
3
1
3
5
3
3
41 2 2 4 44
1
23 321 32 2 131
4554 44 4 5
5
1
4445 5
33 313 3 1212 44235 113535
3 5 44 4 34 44 54 54
2
33 2 2 1
22
4
551 1 3 5
3 44 4
5
5
5
2111 2 114 1
Sep 2
3 322 233 1311
2
1 5 3 2 432434324 3 4 5454 4544 55 4 5
213
3 5 21
1
2 1
4
3
3 3
3
3 1 21 33233 1 21 35
24 34
3 232 12 1
54
4 4 4
2 342 25 3 44 2 52
13
1
332 123
3
1
2
1
333 3
2
2 4 43
2311 2
2 3 31 1 13 11
3
3 3412 444152 3 3 3
42 44 4 4
2 3
3
4
3
3
1
3
43
3
12 2
23
3 2 33
4
4
3
3231135 1132 122 3211 11 2432 1 15 111 44
4
1
2 1411 4
2332 332 1
3
121 1 1 3
23 5
331 33
12
22
1
42
14
132 3 31
1
11
2 1 343 4
231 2 3 224 1 1 1
4
2
44
23
24 4 4
112221 2111552123332
12 1
5
1
1
1
2
2
3
2
3
3
1
3
1
3
1
2 3 133
111 2 2 23 1
3
23
2
2 32 1123 12 1
1 32 2
3 21
3
2 424
122
3 1
31333 3343 3 31
132 2
2 2 3 12
132 24
3 1 12 21 1121 322212
2 23
12
11 2 2
Mas
3 3 3 231 131 3
1
1
3 1 33
1 31 1
2 1 2
1 21
1 2
2
1 1
2
31
3
1
1
1 13
11
1
1
3
4
2
2
1
3
1

5 4
5 5
4

0.5

2
1
0
2

Comp.2

2
21

44
4

0.0

1
12
12

1.0

1.0

0.5

0.5

1.0

1.0

Con

Comp.1

Figura 9.4: Biplot dei comuni e delle variabili socio-demografiche.


In accordo con le caratteristiche della matrice di correlazione, le variabili Mas
e Con appaiono isolate, mentre Inv, Vec, Dia, Fam1 e Dig, Ric, Fam5 formano
due gruppi ben separati associati, rispettivamente, ai comuni del centro-nord e
del sud-isole.
Qual `e la qualit`
a della rappresentazione dei dati nello spazio ridotto delle
prime due-tre componenti? Abbiamo gi`
a visto che le prime tre componenti
assorbono complessivamente quasi il 90% della varianza totale. Insieme a questo
indice globale `e utile esaminare la qualit`
a della rappresentazione delle singole
unit`
a. Le componenti del vettore qual, che otteniamo di seguito, forniscono
lerrore quadratico di ogni comune rispetto alla rappresentazione nello spazio
delle prime tre componenti.
> qual<-diag(cp$scores[,4:10]%*%t(cp$scores[,4:10]))
> boxplot(uniqual~cens01$Area5,col=gray,horizontal=T,
+ xlab=Errore Quadratico,ylab=Area Territoriale,

9.3. COMPONENTI PRINCIPALI

73

+ names=c(N-O,N-E,C,S,I),
+ main=Censimento 2001 - Comuni Oltre 10000 Abitanti)

C
NO

NE

Area Territoriale

Censimento 2001 Comuni Oltre 10000 Abitanti

10

15

20

Errore Quadratico

Figura 9.5: Errore di approssimazione dei dati socio-demografici dei comuni.


Il grafico suggerisce che alcuni comuni hanno rappresentazioni particolarmente scadenti. Ecco lelenco dei comuni con un errore quadratico superiore a
5.
> as.character(cens01$Nome[uniqual>5])
[1] Maniago Portomaggiore Russi
[4] Celano Casalnuovo di Napoli Casandrino
[7] Crispano Forio Giugliano in Campania
[10] Ischia Melito di Napoli Qualiano
[13] Quarto Volla Rosarno
[16] SantAgata li Battiati Siniscola

74

CAPITOLO 9. VISUALIZZARE DATI MULTIVARIATI

Capitolo 10

Modelli lineari
Un problema molto frequente `e la modellazione della relazione di dipendenza di
una variabile Y da un insieme di variabili esplicative X1 , . . . , Xp . In alcuni casi
la forma funzionale della relazione `e nota (ad esempio, lineare) ed `e richiesta
la stima dei parametri che la caratterizzano sulla base di dati campionari. In
altri casi, anche la forma della relazione deve essere stimata. Tra i molteplici
strumenti offerti da R, consideriamo la funzione coplot(), che consente di visualizzare le caratteristiche delle distribuzioni subordinate Y |Xj , e la funzione
lm(), dedicata alla stima di modelli lineari. Per quanto riguarda i dati, riprendiamo larchivio dei bilanci familiari nel 2002 e studiamo la relazione tra
la spesa per consumi ed il reddito, senza dimenticare fattori di stratificazione
come il numero di componenti della famiglia, il numero di percettori di reddito,
let`
a media dei componenti e larea territoriale.
Dopo una preliminare trasformazione logaritmica, il diagramma di dispersione del reddito e dei consumi familiari pro capite suggerisce una relazione
lineare. Il coefficiente di correlazione `e prossimo a 0.75.
> plot(log(fam02$red/fam02$ncomp),log(fam02$cons/fam02$ncomp),
+ xlab=LogReddito familiare pro capite,
+ ylab=LogConsumo familiare pro capite,
+ main=Reddito e consumo delle famiglie italiane 2002,
+ col=grey((as.numeric(fam02$area)-1)/5),pch=20)
> cor(log(fam02$red/fam02$ncomp),log(fam02$cons/fam02$ncomp))
[1] 0.756895
Per valutare la relazione con le variabili di stratificazione risulta assai utile
la funzione coplot() che visualizza i diagrammi di dispersione di redditi e
consumi, subordinatamente alle combinazioni dei livelli di (al massimo) due
variabili concomitanti. Nel grafico sottostante mostriamo i risultati relativi
allarea territoriale ed allet`
a media del nucleo familiare.
> intarea=1:5
> intperc<-matrix(c(0.5,1.5,1.5,2.5,2.5,6.5),ncol=2,byrow=TRUE)
75

76

CAPITOLO 10. MODELLI LINEARI

10
9
8
7
5

LogConsumo familiare pro capite

11

Reddito e consumo delle famiglie italiane 2002

10

12

LogReddito familiare pro capite

Figura 10.1: Redditi e consumi familiari pro capite (scala logaritmica).

>
+
+
+
+
+
+

coplot(log(fam02$cons/fam02$ncomp)~
log(fam02$red/fam02$ncomp)|fam02$area*fam02$nperc,
given.values=list(intarea,intperc),
xlab=c(LogReddito familiare pro capite,Area territoriale),
ylab=c(LogConsumo familiare pro capite,
Numero di percettori di reddito),
pch=20)

Mentre limportanza dellarea territoriale emerge con chiarezza, il ruolo del


numero dei percettori di reddito appare incerto. In maniera analoga si pu`
o
esplorare linfluenza del numero dei componenti e dellet`
a media del nucleo
familiare.
Occupiamoci ora della stima di un modello lineare avente i logconsumi familiari pro capite come variabile dipendente, i logredditi familiari pro capite come
variabile esplicativa principale ed infine il numero di componenti, il numero di
percettori, let`
a media e larea territoriale come variabili esplicative secondarie.
Larea territoriale `e introdotta nel modello sotto la forma di variabile indicatore

77
Area territoriale
5
4
3
2
1
6

12

12

12

5
4

11
9
8

7
6
5

Numero di percettori di reddito

8
7
6
5
11
9
8
5

LogConsumo familiare pro capite

11

12

12

LogReddito familiare pro capite

Figura 10.2: Influenza delle variabili di stratificazione sulla relazione reddito


consumo.
che assume il valore 0 o 1 a seconda che la famiglia sia residente nel centro-nord
o nel mezzogiorno.
> model <- lm(log(cons$ncomp)~log(red/ncomp)+ncomp+nperc+etam+iarea,
+ data=fam02)
> summary(model)
Call:
lm(formula = log(fam02$cons/fam02$ncomp) ~log(fam02$red/fam02$ncomp) +
fam02$ncomp + fam02$nperc + fam02$etam + fam02$iarea)
Residuals:
Min 1Q Median 3Q Max
-3.144305 -0.191671 -0.000763 0.189830 2.206919
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 4.2158902 0.0755899 55.773 <2e-16 ***

78

CAPITOLO 10. MODELLI LINEARI

log(fam02$red/fam02$ncomp) 0.5759524 0.0074395 77.418 <2e-16 ***


fam02$ncomp -0.1193122 0.0053709 -22.215 <2e-16 ***
fam02$nperc -0.0572438 0.0066220 -8.645 <2e-16 ***
fam02$etam -0.0026015 0.0002816 -9.240 <2e-16 ***
fam02$iarea -0.1330600 0.0091447 -14.550 <2e-16 ***
-----Signif. codes: 0 *** 0.001 ** 0.01 * 0.05 . 0.1 1
Residual standard error: 0.3491 on 7978 degrees of freedom
Multiple R-Squared: 0.6451, Adjusted R-squared: 0.6448
F-statistic: 2900 on 5 and 7978 DF, p-value: < 2.2e-16
In base al coefficiente di determinazione multipla, il modello stimato sembra piuttosto buono. Tuttavia il segno negativo dei coefficienti di numero di
componenti, numero di percettori ed et`
a media suscita qualche perplessit`
a. Il
segno negativo del coefficiente della variabile associata allarea territoriale riflette invece le caratteristiche dei dati: passando da iarea = 0 (centro-nord) a
iarea = 1 (mezzogiorno), a parit`
a delle altre variabili, si ottiene una diminuzione
dei logconsumi procapite.

Bibliografia
[1] S. M. Iacus and G. Masarotto. Laboratorio di Statistica con R. McGraw-Hill,
Milano, 2nd edition, 2007.
[2] R. Ihaka and R. Gentleman. R: a language for data analysis and graphics.
Journal of Computational and Graphical Statistics, 5:299314, 1996.
[3] R Development Core Team. R: A language and environment for statistical
computing, 2006. ISBN 3-900051-07-0.

79

Indice analitico
arrotondamento
round(), 26
tabella di funzioni, 26
assistenza
in linea, ?funzione, 12
interattiva, help.start(), 12

scrittura su supporto esterno, write.table(),


34
data, date(), 12
dato mancante
codifica, NA, 30
eliminazione, na.omit(), 31
matrice di correlazione, 68
banca dati
media aritmetica, 31
censimento della popolazione 2001,
ordinamento, 31
67
presenza, is.na(), 30
indagine Banca dItalia sui bilanci deviazione standard
familiari, 51
sd(), 63
distribuzione di frequenza
campionamento
confronto grafico, boxplot(), 61
con probabilit`
a di estrazione vadiagramma a rettangoli distanziati,
riabili, sample(), 40
barplot(), 52
sample(), 39
diagramma scatola-baffi, boxplot(),
ciclo
60
for(), 23
distribuzione marginale, rowSums(),
commento, 12
colSums(), 53
concentrazione
distribuzione
subordinata, barplot(),
curva di Lorenz, 65
54
rapporto di concentrazione di Gidistribuzione subordinata, prop.table(),
ni, 65
53, 54
costante
indici
di sintesi, summary(), 51
alfabetica maiuscola, LETTERS,
istogramma, hist(), 56
29
quantile, quantile(), 54
alfabetica minuscola, letters, 29
tabella bivariata, table(), 52
logica, TRUE, FALSE, 13
tabella univariata, hist(), 57
numerica indefinita, NaN, 15, 22
tabella univariata, table(), 52
numerica, INF, 15
tabella,
table(), 51
numerica, pi, 24
test chi-quadrato dindipendenza,
summary(), 54
data frame
unit`
a standard, scale(), 70
costruzione, data.frame(), 20
distribuzione di probabilit`
a
costruzione, read.table(), 33
definizione, 19
Binomiale, 38
80

INDICE ANALITICO

81

grafico densit`
a gaussiana, plot(),
per il calcolo della media geomet45
rica, 22
grafico funzione di ripartizione, plot(), tabella di funzioni, 21
46
grafico probabilit`
a binomiali, plot(), grafico
coplot(), 70
45
di funzione, plot(), 44
Normale, 37
diagramma a rettangoli distanziati,
presentazione di dati campionari,
barplot(), 51
stem(), 38
diagramma di dispersione, plot(),
t di Student, 39
69
tabella di distribuzioni, 37
istogramma, hist(), 51
univariata, 37
matrice dei diagrammi di disperdistribuzione multivariata
sione, pairs(), 70
aggregazione gerarchica delle vaopzione, plot(), 43
riabili, hclust(), 68
plot(), 43
biplot(), 73
primitiva grafica, 46
componente principale, princomp(),
70
diagramma di dispersione, plot(), lettura
di archivio esterno, read.table(),
70
33
matrice dei diagrammi di disperdi
archivio
esterno, scan(), 34
sione, pairs(), 73
lista
matrice di correlazione, 68
costruzione, list(), 21
matrice di covarianza, 68
costruzione, scan(), 34
definizione, 21
elenco
estrazione di elementi, [[ ]], 27
di oggetti attivi, ls(), 17
esecuzione
matrice
condizionale, if (cond), 22
costruzione, matrix(), 19
condizionale, if(cond) else, 22
costruzione, rbind(), cbind(), 27
definizione, 19
factor
di correlazione, 68
medie parziali nelle classi definite
di covarianza, 68
dai livelli, tapply(), 21
diagonale, diag(), 26
fattore
dimensioni, dim(), 19
costruzione, factor(), 20
estrazione di elementi, [ ], 27
definizione, 20
prodotto righe per colonne, 27
funzione applicata alle classi defiscrittura su supporto esterno, write.table(),
nite dai livelli, tapply(), 20
35
funzione
tabella di funzioni, 26
calcolo di numeri di Fibonacci, 22
traccia, sum(), 26
definizione, 21
media aritmetica
delle componenti di un vettore, 25
assistenza in linea, 12
di matrice, 26
con dati mancanti, 31
grafico, plot(), 44
medie parziali, tapply(), 21

82
modalit`
a
di oggetti, conversione, 23
di oggetti, mode(), 17

INDICE ANALITICO
opzioni di read.table(), 33
test statistico
Kolmogorov-Smirnov, ks.test(), 59
test chi-quadrato dindipendenza,
summary(), 54

numero
di elementi di un oggetto, length(),
17
vettore
combinazione lineare, 25
operatore
costruzione, c(), 18
aritmetico, 13
costruzione, operatore :, 18
assegnazione, 14
costruzione, rep(), 18
di confronto binario, 13
costruzione, seq(), 18
logico, 13
definizione, 17
ordinamento
estrazione di elementi, [ ], 27, 29
sort(), 31
funzione applicata componente per
componente, 25
rimozione
trasformazione affine, 25
di oggetti, rm(), 17
scrittura
su supporto esterno, write.table(),
34
stringhe di caratteri, 29
composizione, paste(), 29
divisione, strsplit(), 29
estrazione di sottostringhe, substring(),
30
lettere maiuscole dellalfabeto, LETTERS, 29
lettere minuscole dellalfabeto, letters, 29
lunghezza, nchar(), 29
maiuscolo, toupper(), 29
minuscolo, tolower(), 29
modifica, gsub(), 30
ricerca di sottostringhe, grep(), 30
ricerca di sottostringhe, regexpr(),
30
struttura
di oggetti, str(), 17
tabella
di funzioni, 21
di funzioni per larrotondamento,
26
diagrammi statistici, 51
operatori, 14

Potrebbero piacerti anche