Materiale didattico per i laboratori di
MODELLI STATISTICI I
Università degli Studi di Padova
a cura di:
Francesco Pauli, Laura Ventura, Gianfranco Adimari,
Alessandra R. Brazzale
Nota
Questo materiale, a parte le lievi rielaborazioni dovute ad A. R. Brazzale, è stato
gentilmente fornito da Monica Chiogna, Alessandra Salvan e Nicola Sartori. Si rin-
graziano Adelchi Azzalini e Carlo Gaetan per avere fornito alcuni dataset e Federica
Giummolè per aver contribuito alla stesura di alcune parti e per la attenta lettura
del materiale originale. i
ii
Sommario
0 Richiami di 1
R
0.1 Funzioni e comandi elementari . . . . . . . . . . . . . . . . . . . . . . 1
0.1.1 Spazio di lavoro e documentazione . . . . . . . . . . . . . . . 1
0.1.2 Operazioni elementari . . . . . . . . . . . . . . . . . . . . . . 4
0.2 Vettori . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
0.2.1 Creazione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
0.2.2 Estrazione di elementi . . . . . . . . . . . . . . . . . . . . . . 8
0.3 Matrici e array . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
0.4 Tipologie di dati e liste . . . . . . . . . . . . . . . . . . . . . . . . . . 12
0.5 Distribuzioni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
0.5.1 La distribuzione normale . . . . . . . . . . . . . . . . . . . . . 15
0.5.2 Adattamento ad una distribuzione normale . . . . . . . . . . . 16
0.6 Data frame . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
1 La regressione con R 31
1.1 Analisi dei dati TVADV2.DAT . . . . . . . . . . . . . . . . . . . . . . 31
1.1.1 La regressione fatta “a mano” . . . . . . . . . . . . . . . . . . 31
1.1.2 La funzione . . . . . . . . . . . . . . . . . . . . . . . . . 40
lm()
1.2 Analisi dei dati CIPOLLE.DAT . . . . . . . . . . . . . . . . . . . . . 47
1.3 Applicazione: I dati CONSUMI.DAT . . . . . . . . . . . . . . . . . . 50
2 Costruzione del modello e analisi dei residui 53
2.1 Analisi dei dati CEMENT.DAT . . . . . . . . . . . . . . . . . . . . . 53
2.2 Analisi dei dati WINDMILL.DAT . . . . . . . . . . . . . . . . . . . . 58
2.3 Applicazione: I dati TVADV2.DAT . . . . . . . . . . . . . . . . . . . 63
2.4 Applicazione: I dati AUTO2.DAT . . . . . . . . . . . . . . . . . . . . 64
3 Test t di Student 67
3.1 Analisi dei dati CIPOLLE.DAT . . . . . . . . . . . . . . . . . . . . . 67
3.2 Applicazione: I dati CONFEZIONI.DAT . . . . . . . . . . . . . . . . 72
3.3 Analisi dei dati CAPTO.DAT . . . . . . . . . . . . . . . . . . . . . . 72
3.4 Applicazione: I dati CASE2.DAT . . . . . . . . . . . . . . . . . . . . 75
4 Il modello di regressione lineare multipla 77
4.1 La regressione polinomiale . . . . . . . . . . . . . . . . . . . . . . . . 77
4.1.1 Analisi dei dati WINDMILL.DAT . . . . . . . . . . . . . . . . 77
4.1.2 Applicazione: I dati TVADV2.DAT . . . . . . . . . . . . . . . 84
iii
4.2 Valori anomali . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
4.2.1 Analisi dei dati HILLS.DAT . . . . . . . . . . . . . . . . . . . 87
5 Selezione del modello 95
5.1 Analisi dei dati GASOLINE.DAT . . . . . . . . . . . . . . . . . . . . 95
5.2 Analisi dei dati USCRIME.DAT . . . . . . . . . . . . . . . . . . . . . 106
6 Analisi della varianza ad un fattore 127
6.1 Analisi dei dati STURDY.DAT . . . . . . . . . . . . . . . . . . . . . 127
6.2 Analisi dei dati RATS.DAT . . . . . . . . . . . . . . . . . . . . . . . 133
6.3 Applicazione: I dati VENDITE.DAT . . . . . . . . . . . . . . . . . . 137
6.4 Analisi dei dati MORLEY.DAT . . . . . . . . . . . . . . . . . . . . . 137
7 Analisi della varianza a due fattori 143
7.1 Analisi dei dati PENICILLIN.DAT . . . . . . . . . . . . . . . . . . . 143
7.2 Analisi dei dati RATS.DAT . . . . . . . . . . . . . . . . . . . . . . . 145
7.3 Applicazione: I dati NAILS.DAT . . . . . . . . . . . . . . . . . . . . 152
8 Analisi della covarianza 155
8.1 Analisi dei dati CATS.DAT . . . . . . . . . . . . . . . . . . . . . . . 155
8.2 Analisi dei dati INSULATE.DAT . . . . . . . . . . . . . . . . . . . . 162
8.3 Applicazione: I dati CIPOLLE.DAT . . . . . . . . . . . . . . . . . . 171
9 Il modello di regressione di Poisson 175
9.1 Analisi dei dati STRESS.TXT . . . . . . . . . . . . . . . . . . . . . . 175
9.2 Applicazioni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180
9.2.1 I dati MUSCOLO.TXT . . . . . . . . . . . . . . . . . . . . . 180
9.2.2 I dati STOFFA.TXT . . . . . . . . . . . . . . . . . . . . . . . 180
10 Il modello di regressione logistica 183
10.1 Analisi dei dati CHALLENGER.DAT . . . . . . . . . . . . . . . . . . 183
10.2 Analisi dei dati ICUDATA.DAT . . . . . . . . . . . . . . . . . . . . . 187
10.3 Applicazione: I dati BIRTHWT[MASS] . . . . . . . . . . . . . . . . . 191
Appendice 197
A Adesso tocca a voi! 197
A.1 I dati AUTO.DAT . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197
A.2 I dati AUTO2.DAT . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198
A.3 I dati CARPRICE . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198
A.4 I dati CASE2.DAT . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199
A.5 I dati CONFEZIONI.DAT . . . . . . . . . . . . . . . . . . . . . . . . 199
A.6 I dati CONSUMI.DAT . . . . . . . . . . . . . . . . . . . . . . . . . . 200
A.7 I dati MUSCOLO.TXT . . . . . . . . . . . . . . . . . . . . . . . . . . 200
A.8 I dati NAILS.DAT . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201
A.9 I dati STOFFA.TXT . . . . . . . . . . . . . . . . . . . . . . . . . . . 201
A.10 I dati VENDITE.DAT . . . . . . . . . . . . . . . . . . . . . . . . . . 201
Laboratorio 0
Richiami di R
0.1 Funzioni e comandi elementari
è un ambiente di software integrato per la manipolazione di dati, il calcolo e la
R
rappresentazione grafica. Per iniziare una sessione, è necessario effettuare un doppio
click di mouse sulla icona di Si aprirà in questo modo la finestra di comando e
R.
verrà proposto il prompt di comando:
>
0.1.1 Spazio di lavoro e documentazione
Le entità che crea durante una sessione di lavoro sono chiamate oggetti. Questi
R
possono essere numeri, stringhe, vettori, matrici, funzioni, o strutture più generali
costruite da questi elementi. Tali oggetti sono salvati per nome e immagazzinati in
un’area dedicata detta workspace o spazio di lavoro. In ogni momento, è possibile
controllare gli oggetti disponibili nello spazio di lavoro mediante il comando
> ls()
Per eliminare un oggetto dallo spazio di lavoro, si usa la funzione La funzione
rm().
prevede come argomento il nome dell’oggetto che si vuole eliminare. Supponendo
che sia presente un oggetto di nome è possibile eliminarlo con il comando
thing,
> rm(thing)
A questo punto, l’oggetto di nome non sarà più presente nel workspace.
thing
> thing
Error: Object thing not found
Se si vogliono eliminare più oggetti, bisogna elencarli separati da virgole.
> rm(thing1, thing2) 1
2 Laboratorio 0. Richiami di R
Quando si inizia una nuova sessione di lavoro, è opportuno rimuovere gli oggetti
esistenti nell’area di lavoro. Un comando utile a tale scopo è
> rm(list = ls())
o, in alternativa, rm(list=objects()).
È possibile memorizzare lo spazio di lavoro con la funzione
> save.image() 1
Questa salva tutti gli oggetti contenuti nel workspace in un file binario La
".Rdata".
scelta di default può essere modificata specificando nella chiamata a save.image()
il nome, ad esempio che si desidera dare al file.
"ilmiofile.Rdata",
> save.image(file = "ilmiofile.Rdata")
Lo spazio di lavoro originale può essere ripristinato con l’ausilio della funzione
> load(".Rdata")
o, nel caso si abbia optato per un nome diverso dal default,
> load("ilmiofile.Rdata")
Le funzioni
> savehistory()
> loadhistory()
consentono di salvare in formato ASCII e ricaricare in la cronologia dei comandi
R
inviati. L’argomento consente di specificare un nome diverso dalla scelta di
file
1
default che è .
".Rhistory"
Infine, la funzione consente di cambiare cartella di lavoro. È buona norma
setwd()
dedicare una cartella distinta ad ogni progetto sui cui si sta lavorando onde evitare
sovraposizioni dei dati. La cartella di lavoro attuale può essere visualizzata con il
comando getwd().
Il menù delle distribuzioni di per Mac OS X (e per MS Windows) prevede degli
R
appositi comandi per il salvataggio e il caricamento dello spazio di lavoro e/o della
cronologia dei comandi e per il cambiamento della cartella di lavoro.
Per ottenere informazioni su una funzione di si può utilizzare la funzione
R help(),
specificando come argomento il nome della funzione di interesse, ad esempio,
> help(save.image)
oppure, più velocemente,
`?`(save.image)
> 1 Vale anche per il sistema operativo MS Windows, con diverso nome del file di salvataggio.
0.1. Funzioni e comandi elementari 3
Oltre a e mette a disposizione diverse altre funzioni d’aiuto. Le funzioni
help() ?, R
e tornano utili qualora non ci si ricordasse più il nome
apropos() help.search()
dell’oggetto che ci interessa.
> apropos("image")
[1] "image" "image.default"
[3] "save.image" "saveNamespaceImage"
[5] "sys.load.image" "sys.save.image"
> help.search("image")
Con
> help.start()
l’help in linea viene attivato in un browser La chiamata alla funzione
www. example()
ci illustra l’utilizzo di una particolare funzione.
> example(save.image)
sav.mg> x <- stats::runif(20)
sav.mg> y <- list(a = 1, b = TRUE, c = "oops")
sav.mg> save(x, y, file = "xy.Rdata")
sav.mg> save.image()
sav.mg> unlink("xy.Rdata")
sav.mg> unlink(".RData")
sav.mg> # set save defaults using option:
sav.mg> options(save.defaults=list(ascii=TRUE, safe=FALSE))
sav.mg> save.image()
sav.mg> unlink(".RData")
Infine, la funzione ci fornisce delle dimostrazioni per una serie di argomenti.
demo()
> demo()
> demo(graphics)
Per terminare una sessione aperta, si usa la funzione Alla chiusura della ses-
q().
sione, è possibile salvare gli oggetti disponibili nello spazio di lavoro, se si inten-
R
de riutilizzali nelle sessioni di lavoro future. Per salvare tali oggetti, è necessario
rispondere affermativamente alla domanda proposta in chiusura da R.
4 Laboratorio 0. Richiami di R
0.1.2 Operazioni elementari
I comandi elementari consistono in espressioni o assegnazioni. Se il comando è una
espressione, fornisce il risultato della valutazione, come è illustrato negli esempi
R
che seguono.
> 12 > 10
[1] TRUE
> 1 + 2 + 3
[1] 6
> 2 + 3 * 4
[1] 14
> 3/2 + 1
[1] 2.5
> 2 + (3 * 4)
[1] 14
> (2 + 3) * 4
[1] 20
> 4 * 3^3
[1] 108
Tutte le funzioni matematiche generalmente presenti su una calcolatrice tascabile
sono disponibili in sotto forma di funzioni di base, richiamate nella tabella che
R
segue.
Funzione Funzione matematica
R radice quadrata
sqrt valore assoluto
abs funzioni trigonometriche
sin,cos,tan funzioni trigonometriche inverse
asin,acos,atan exponenziale e logaritmo naturale
exp,log
L’uso di tali funzioni, che può essere anche annidato, è elementare.
> sqrt(2)
[1] 1.414214
0.1. Funzioni e comandi elementari 5
> sin(3.14159)
[1] 2.65359e-06
> sin(pi)
[1] 1.224647e-16
> sqrt(sin(45 * pi/180))
[1] 0.8408964
Una assegnazione valuta una espressione salvandone l’esito in un oggetto dotato di
nome. L’assegnazione viene effettuata mediante il simbolo , oppure il simbolo
<-
Si può anche assegnare da sinistra verso destra con il simbolo Il risultato
=. ->.
di una assegnazione non è automaticamente mostrato. L’utente può visualizzarlo
richiamando il nome dell’oggetto. Gli oggetti creati mediante un’assegnazione pos-
sono essere riutilizzati in espressioni e assegnazioni successive, come mostrato negli
esempi che seguono.
> x <- sqrt(2)
> x
[1] 1.414214
> x^3
[1] 2.828427
> y <- x^3
> x <- 10
> x > 10
[1] FALSE
> x <= 10
[1] TRUE
> tf <- x > 10
> tf
[1] FALSE
6 Laboratorio 0. Richiami di R
0.2 Vettori
0.2.1 Creazione
Per creare un vettore, si usa la funzione c():
> x <- c(2, 3, 5, 7, 11)
> x
[1] 2 3 5 7 11
Se il vettore contiene tanti elementi, può essere più conveniente usare la funzione
che consente di introdurli uno ad uno.
scan(),
> x <- scan()
1: 1
2: 6
3: 3
4: 4
5:
> x
[1] 1 6 3 4
>
> x <- scan()
1: 23 34 32
4: 33 88 44
7:
Per creare una successione di numeri da a si può usare il comando
a b, a:b.
> xx <- 1:10
> xx
[1] 1 2 3 4 5 6 7 8 9 10
> xx <- 100:1
> xx
[1] 100 99 98 97 96 95 94 93 92 91 90 89 88
[14] 87 86 85 84 83 82 81 80 79 78 77 76 75
[27] 74 73 72 71 70 69 68 67 66 65 64 63 62
[40] 61 60 59 58 57 56 55 54 53 52 51 50 49
[53] 48 47 46 45 44 43 42 41 40 39 38 37 36
[66] 35 34 33 32 31 30 29 28 27 26 25 24 23
[79] 22 21 20 19 18 17 16 15 14 13 12 11 10
[92] 9 8 7 6 5 4 3 2 1
0.2. Vettori 7
Lo stesso risultato può essere ottenuto tramite la funzione seq().
> xx <- seq(from = 100, to = 1)
> xx
[1] 100 99 98 97 96 95 94 93 92 91 90 89 88
[14] 87 86 85 84 83 82 81 80 79 78 77 76 75
[27] 74 73 72 71 70 69 68 67 66 65 64 63 62
[40] 61 60 59 58 57 56 55 54 53 52 51 50 49
[53] 48 47 46 45 44 43 42 41 40 39 38 37 36
[66] 35 34 33 32 31 30 29 28 27 26 25 24 23
[79] 22 21 20 19 18 17 16 15 14 13 12 11 10
[92] 9 8 7 6 5 4 3 2 1
Possono anche essere creati vettori che contengono elementi ripetuti.
> rep(2, times = 3)
[1] 2 2 2
> rep(2, 3)
[1] 2 2 2
> a = c(rep(2, 3), 4, 5, rep(1, 5))
> a
[1] 2 2 2 4 5 1 1 1 1 1
Ai vettori può essere applicata l’aritmetica di base e le operazioni logiche che si
applicano agli scalari.
> x <- 1:10
> x * 2
[1] 2 4 6 8 10 12 14 16 18 20
> x * x
[1] 1 4 9 16 25 36 49 64 81 100
> x > 5
[1] FALSE FALSE FALSE FALSE FALSE TRUE TRUE TRUE TRUE
[10] TRUE
Da notare che lavora seguendo una logica di tipo vettoriale. Ovvero, se l’oggetto
R
di un’operazione è un vettore, l’operazione verrà eseguita elemento per elemento.
Alcune funzioni utili per la manipolazione di vettori sono elencate di seguito.
8 Laboratorio 0. Richiami di R
> x <- 3:26
> length(x)
[1] 24
> max(x)
[1] 26
> min(x)
[1] 3
> sum(x)
[1] 348
> prod(x)
[1] 2.016457e+26
0.2.2 Estrazione di elementi
Gli elementi di un vettore possono essere estratti usando le parentesi quadre [ ] ed
indicando tra parentesi la posizione dell’elemento che si vuole estrarre.
> xx[7]
[1] 94
Si possono estrarre anche più elementi contemporaneamente.
> xx[c(2, 3, 5, 7, 11)]
[1] 99 98 96 94 90
> xx[85:91]
[1] 16 15 14 13 12 11 10
> xx[91:85]
[1] 10 11 12 13 14 15 16
> xx[c(1:5, 8:10)]
[1] 100 99 98 97 96 93 92 91
> xx[c(1, 1, 1, 1, 2, 2, 2, 2)]
[1] 100 100 100 100 99 99 99 99
0.3. Matrici e array 9
Ovviamente, i sottoinsiemi di elementi estratti possono essere salvati in nuovi vettori.
> yy <- xx[c(1, 2, 4, 8, 16, 32, 64)]
> yy
[1] 100 99 97 93 85 69 37
Se gli indicatori entro le parentesi quadre sono preceduti dal segno negativo, gli
elementi corrispondenti vengono eliminati dal vettore.
> x <- c(1, 2, 4, 8, 16, 32)
> x
[1] 1 2 4 8 16 32
> x[-4]
[1] 1 2 4 16 32
0.3 Matrici e array
Le matrici vengono create mediante la funzione Nella sua forma più
matrix().
semplice, l’uso della funzione prevede di specificare un vettore contenente gli elementi
della matrice e il numero di righe o di colonne della matrice.
> x <- matrix(c(2, 3, 5, 7, 11, 13), nrow = 3)
> x [,1] [,2]
[1,] 2 7
[2,] 3 11
[3,] 5 13
> x <- matrix(c(2, 3, 5, 7, 11, 13), ncol = 2)
> x [,1] [,2]
[1,] 2 7
[2,] 3 11
[3,] 5 13
Da notare che, per default, le matrici sono formate inserendo i vari elementi per
colonna.
Ovviamente, la matrice può essere acquisita da un file esterno. Si supponga, per
esempio, che il file abbia il seguente contenuto.
matdata
10 Laboratorio 0. Richiami di R
1,24,32,36,33
2,16,44,34,33
3,20,31,43,32
4,23,35,37,35
5,27,40,40,31
6,19,43,32,37
Il contenuto del file può essere acquisito ed assegnato ad una matrice 6×5 con i
comandi:
> x2 <- scan("matdata", sep = ",")
> mx <- matrix(x2, ncol = 5, byrow = TRUE)
> mx [,1] [,2] [,3] [,4] [,5]
[1,] 1 24 32 36 33
[2,] 2 16 44 34 33
[3,] 3 20 31 43 32
[4,] 4 23 35 37 35
[5,] 5 27 40 40 31
[6,] 6 19 43 32 37
L’argomento specifica che il contenuto deve essere acquisito per riga e
byrow=TRUE
non per colonna.
La funzione restituisce la dimensione (numero di righe e numero di colonne)
dim()
della matrice indicata come argomento.
> dim(mx)
[1] 6 5
Come per i vettori, gli elementi di una matrice possono essere estratti mediante l’uso
delle parentesi Per estrarre da una matrice un elemento, bisogna specificarne la
[].
posizione di riga e di colonna.
> x[2, 1]
[1] 3
> x[2, 2]
[1] 11
Per estrarre una intera riga o colonna, è sufficiente specificarne la posizione.
> x[, 1]
[1] 2 3 5
0.3. Matrici e array 11
> x[3, ]
[1] 5 13
Possono essere estratti sottoinsiemi di righe e/o colonne.
> x <- matrix(1:1
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.