Professional Documents
Culture Documents
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
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
23
23
24
25
26
27
28
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
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
75
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
47
8.1
50
Console di R. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Dizionario alfabetico dellaiuto in linea. . . . . . . . . . . . . . .
11
12
7.1
7.2
7.3
7.4
7.5
7.6
42
43
44
45
46
48
8.1
8.2
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.
. . . . . .
. . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
51
53
55
56
57
59
60
62
64
67
69
71
72
73
76
77
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
> 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
# 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
&, |, !
13
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)
2.2
14
[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),
3.1
Vettore
16
CAPITOLO 3. OGGETTI
# forma breve
# forma breve
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
18
CAPITOLO 3. OGGETTI
3.4
Fattore
3.5. LISTA
19
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.
>
>
>
>
>
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
`
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
22
CAPITOLO 3. OGGETTI
3 Pi
Capitolo 4
4.1
Vettori numerici
24
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
4.2
Matrici
25
Risultato
triangolarizzazione di Choleski
somme di colonna (riga)
determinante
autovalori, autovettori
scomposizione QR
inversa
scomposizione in valori singolari
trasposta
4.3
26
4.4
Subsetting
27
4.5
Stringhe di caratteri
28
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
29
30
> 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
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.
34
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
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
6.2. CAMPIONAMENTO
37
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
6.2. CAMPIONAMENTO
39
40
`
CAPITOLO 6. DISTRIBUZIONI DI PROBABILITA
Capitolo 7
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
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.
>
+
+
>
50
0
100
Diagrammi di funzioni
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.
>
+
+
>
0.2
0.0
0.1
Funzione di densit
0.3
0.4
Confronto N(0,1),N(1,1.5)
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
0.15
0.10
0.00
0.05
Probabilit
0.20
0.25
10
Numero di Successi
7.2
Le primitive grafiche
45
0.6
0.4
0.0
0.2
F. di Ripartizione
0.8
1.0
10
Numero di Successi
46
>
>
+
>
>
>
>
>
>
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 8
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
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)
51
15
10
0
Frequenza %
20
25
NO
NE
Centro
Sud
Isole
Area Territoriale
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
Sud
1713
5
Isole
952
6
52
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
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),
53
100
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
Area
N-O
N-E
Centro
Sud
Isole
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
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
> 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
20
40
60
80
100
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
60
80
Approssimazione Lognormale
20
40
60
80
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
8.3
Diagrammi scatola-baffi
59
Laureati in Economia
80
85
90
95
100
105
110
Voto di Laurea
60
Laureati in Economia
60
70
80
90
100
Voto di Diploma
61
8.4
Indici di sintesi
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
62
120
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
63
8.5
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)
64
0.6
0.4
0.2
0.0
0.8
1.0
0.0
0.2
0.4
0.6
0.8
1.0
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
9.1
Correlazione lineare
67
Dia
Inv
Vec
Fam5
Dig
Ric
Fam1
Sep
Con
Pop
Mas
1.0
0.5
0.0
1.5
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
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
69
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
3
3
3: Centro
70
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
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).
>
>
+
+
+
+
Comp3 (9%)
Comp2 (14%)
Comp1 (66%)
72
> 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
73
+ names=c(N-O,N-E,C,S,I),
+ main=Censimento 2001 - Comuni Oltre 10000 Abitanti)
C
NO
NE
Area Territoriale
10
15
20
Errore Quadratico
74
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
10
9
8
7
5
11
10
12
>
+
+
+
+
+
+
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)
77
Area territoriale
5
4
3
2
1
6
12
12
12
5
4
11
9
8
7
6
5
8
7
6
5
11
9
8
5
11
12
12
78
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
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