Sei sulla pagina 1di 187

A.A.

2016/17
Corso di laurea in Psicologia di comunità (M4B)

Analisi dei dati in ambito di comunità


Esercizi (per R)
Massimiliano Pastore
(01 aprile 2017)

1
2

Nelle pagine che seguono ci sono alcuni esercizi da svolgere utilizzando R inerenti ai temi
del corso. A pag. 185 è riportato l’elenco delle funzioni che possono essere utili per le
soluzioni. Si tenga presente che, oltre a svolgere gli esercizi utilizzando R, è molto impor-
tante imparare ad interpretare i grafici ed i risultati ottenuti. Anche se non esplicitamente
richiesto, si formulino sempre le ipotesi relative ai test statistici eseguiti.
I file dati cui si fa riferimento sono elencati nell’indice analitico e possono essere scaricati
alla pagina Moodle del corso:
https://elearning.unipd.it/scuolapsicologia/
Per ottimizzare il tempo di scaricamento, tutti i file dati utilizzati per il corso e per
gli esercizi sono compressi in formato zip. Pertanto, una volta scaricato il file è necessario
decomprimere i vari file con un apposito programma (Es. winzip).
1 INTRODUZIONE A R 3

1 INTRODUZIONE A R

Esercizio 1.1

Si calcolino i risultati delle seguenti espressioni:


1. 4 × 52 + 9 × 33
> 4*5^2 + 9*3^3

[1] 343

10+7
2. log(2)

> (10+7)/log(2)

[1] 24.53

q
3. ( 20×π
9 )
5

> sqrt((20*pi/9)^5)

[1] 128.8

2 1 3
  
4. 1 − 3 − 6 − 2− 4

> 1-((2/3-1/6)-(2-3/4))

[1] 1.75

4 8 −3
( 65 ) (− 103 ) ( 15 )
2
5. −2
e5 ( 38 )

> ((6/5)^4*(-10/3)^8*(2/15)^(-3))/(exp(5)*(3/8)^(-2))

[1] 12634

Esercizio 1.2

1. Si produca la sequenza dei numeri da 1 a 90.


> 1:90

[1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
[31] 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
[61] 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90

2. Si divida la sequenza di numeri generata per 90.


1 INTRODUZIONE A R 4

> 1:90/90

[1] 0.01111 0.02222 0.03333 0.04444 0.05556 0.06667 0.07778 0.08889 0.10000 0.11111 0.12222
[12] 0.13333 0.14444 0.15556 0.16667 0.17778 0.18889 0.20000 0.21111 0.22222 0.23333 0.24444
[23] 0.25556 0.26667 0.27778 0.28889 0.30000 0.31111 0.32222 0.33333 0.34444 0.35556 0.36667
[34] 0.37778 0.38889 0.40000 0.41111 0.42222 0.43333 0.44444 0.45556 0.46667 0.47778 0.48889
[45] 0.50000 0.51111 0.52222 0.53333 0.54444 0.55556 0.56667 0.57778 0.58889 0.60000 0.61111
[56] 0.62222 0.63333 0.64444 0.65556 0.66667 0.67778 0.68889 0.70000 0.71111 0.72222 0.73333
[67] 0.74444 0.75556 0.76667 0.77778 0.78889 0.80000 0.81111 0.82222 0.83333 0.84444 0.85556
[78] 0.86667 0.87778 0.88889 0.90000 0.91111 0.92222 0.93333 0.94444 0.95556 0.96667 0.97778
[89] 0.98889 1.00000

3. Si produca un oggetto S che contenga la sequenza dei multipli di 3 da 1 a 90.


> (S <- seq(3,90,by=3))

[1] 3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90

4. Si individui il 13 elemento della sequenza prodotta al punto precedente.


> S[13]

[1] 39

5. Si calcolino la somma, la media aritmetica e la varianza degli elementi di S.


> sum(S)

[1] 1395

> mean(S)

[1] 46.5

> var(S)

[1] 697.5

6. Si crei una matrice A di dimensione 6 × 5 contenente gli elementi di S disposti per


riga.
> (A <- matrix(S,6,5,byrow=TRUE))

[,1] [,2] [,3] [,4] [,5]


[1,] 3 6 9 12 15
[2,] 18 21 24 27 30
[3,] 33 36 39 42 45
[4,] 48 51 54 57 60
[5,] 63 66 69 72 75
[6,] 78 81 84 87 90

7. Si calcolino le medie delle colonne della matrice A creata al punto precedente e si


aggiungano come riga sotto la stessa A.
> medie <- apply(A,2,mean)
> (A <- rbind(A,medie))
1 INTRODUZIONE A R 5

[,1] [,2] [,3] [,4] [,5]


3.0 6.0 9.0 12.0 15.0
18.0 21.0 24.0 27.0 30.0
33.0 36.0 39.0 42.0 45.0
48.0 51.0 54.0 57.0 60.0
63.0 66.0 69.0 72.0 75.0
78.0 81.0 84.0 87.0 90.0
medie 40.5 43.5 46.5 49.5 52.5

8. Si calcolino le somme delle righe di A e si aggiungano come colonna a destra.


> somme <- apply(A,1,sum)
> (A <- cbind(A,somme))

somme
3.0 6.0 9.0 12.0 15.0 45.0
18.0 21.0 24.0 27.0 30.0 120.0
33.0 36.0 39.0 42.0 45.0 195.0
48.0 51.0 54.0 57.0 60.0 270.0
63.0 66.0 69.0 72.0 75.0 345.0
78.0 81.0 84.0 87.0 90.0 420.0
medie 40.5 43.5 46.5 49.5 52.5 232.5

9. Si producano l’istogramma (con la funzione hist()), il boxplot (funzione boxplot())


ed il QQplot (funzione qqnorm()) degli elementi di S.
> par(mfrow=c(1,3))
> hist(S)
> boxplot(S)
> qqnorm(S)

Histogram of S Normal Q-Q Plot


7

80

80
6

Sample Quantiles
5

60

60
Frequency

40

40
3
2

20

20
1
0

0 40 80 -2 0 1 2

S Theoretical Quantiles

Esercizio 1.3

1. Si crei una matrice A di valori compresi tra 1 e 5 (a scelta) composta da 10 righe e


4 colonne.
> (A <- matrix(sample(1:5,40,replace=TRUE),10,4))

[,1] [,2] [,3] [,4]


[1,] 3 4 5 2
[2,] 3 3 1 5
1 INTRODUZIONE A R 6

[3,] 1 5 3 5
[4,] 5 1 2 5
[5,] 1 5 3 1
[6,] 3 3 5 2
[7,] 3 5 2 2
[8,] 5 2 2 3
[9,] 3 3 5 1
[10,] 1 5 2 5

2. Si calcolino le medie delle righe e delle colonne di A.


> apply(A,1,mean)

[1] 3.50 3.00 3.50 3.25 2.50 3.25 3.00 3.00 3.00 3.25

> apply(A,2,mean)

[1] 2.8 3.6 3.0 3.1

3. Si costruisca una matrice B composta da 5 righe estratte a caso della matrice A.


> (B <- A[sample(1:10,5),])

[,1] [,2] [,3] [,4]


[1,] 3 3 5 1
[2,] 5 2 2 3
[3,] 3 3 5 2
[4,] 1 5 3 5
[5,] 3 4 5 2

4. Si rappresenti graficamente la tabella di frequenze ottenuta dalla matrice A (funzione


barplot().
> barplot(table(A))
12
10
8
6
4
2
0

1 2 3 4 5

Esercizio 1.4

Sara è una ricercatrice che ha rilevato dei dati relativi agli studenti di un corso di Statistica
della laurea magistrale. I dati sono organizzati in una apposita tabella e salvati su tre file
uguali (Sara dataset ma con diversi formati: testo (txt), excel (xls) e SPSS (sav)1 .
1
Dati da Welkowitz, Cohen & Ewen; http://www.psych.nyu.edu/cohen/introwelk.html
1 INTRODUZIONE A R 7

Le informazioni raccolte da Sara sono le seguenti:

• genere dei soggetti (gender: 1 = femmine, 2= maschi)

• tipo di laurea triennale conseguita (major: 1 = psicologia, 2 = medicina, 3 = biologia,


4 = sociologia, 5 = economia)

• condizione sperimentale (cond: 1 = facile, ..., 4 = impossibile)

• autovalutazione del timore verso la matematica (phobia) su scala 0-10

• numero corsi di matematica frequentati (prevmath)

• punteggio ad un pre-test di matematica (mathquiz)

• punteggio ad un test di statistica (statquiz)

• auto-misurazione del battito cardiaco in condizioni normali (hr base), prima del test
(hr pre) e dopo il test (hr post)

• punteggi ad un test sull’ansia in condizioni normali (anx base), prima del test
(anx pre) e dopo il test (anx post)

Si prendano in considerazione i tre file, nei tre diversi formati:


1. Si importino i file in R.
> ## NOTA BENE:
> # 'datadir' contiene l'indirizzo della cartella ove sono collocati i dati;
> # in alternativa al comando 'paste(datadir,"nome.file",sep="")'
> # si utilizzi il comnando 'file.choose()'
> txt <- read.table(paste(datadir,"Sara_dataset.txt",sep=""),header=TRUE)
>
> library(gdata)
> xls <- read.xls(paste(datadir,"Sara_dataset.xls",sep=""))
>
> library(foreign)
> sav <- read.spss(paste(datadir,"Sara_dataset.sav",sep=""),to.data.frame=TRUE)

2. Si confrontino le strutture dei tre dataset importati e si valuti se sono uguali.


> str(txt)

'data.frame': 100 obs. of 13 variables:


$ gender : int 1 1 1 1 1 1 1 1 1 1 ...
$ major : int 1 1 1 1 1 1 1 1 1 1 ...
$ cond : int 1 1 1 1 1 2 2 2 2 2 ...
$ phobia : int 1 1 4 4 10 4 4 4 4 5 ...
$ prevmath: int 3 4 1 0 1 1 2 1 1 0 ...
$ mathquiz: int 43 49 26 29 31 20 13 23 38 NA ...
$ statquiz: int 6 9 8 7 6 7 3 7 8 7 ...
$ hr_base : num 71 73 69 72 71 70 71 77 73 78 ...
$ hr_pre : num 68 75 76 73 83 71 70 87 72 76 ...
$ hr_post : num 65 68 72 78 74 76 66 84 67 74 ...
$ anx_base: num 17 17 19 19 26 12 12 17 20 20 ...
$ anx_pre : num 22 19 14 13 30 15 16 19 14 24 ...
$ anx_post: num 20 16 15 16 25 19 17 22 17 19 ...

> str(xls)
1 INTRODUZIONE A R 8

'data.frame': 100 obs. of 13 variables:


$ gender : int 1 1 1 1 1 1 1 1 1 1 ...
$ major : int 1 1 1 1 1 1 1 1 1 1 ...
$ cond : int 1 1 1 1 1 2 2 2 2 2 ...
$ phobia : int 1 1 4 4 10 4 4 4 4 5 ...
$ prevmath: int 3 4 1 0 1 1 2 1 1 0 ...
$ mathquiz: int 43 49 26 29 31 20 13 23 38 NA ...
$ statquiz: int 6 9 8 7 6 7 3 7 8 7 ...
$ hr_base : num 71 73 69 72 71 70 71 77 73 78 ...
$ hr_pre : num 68 75 76 73 83 71 70 87 72 76 ...
$ hr_post : num 65 68 72 78 74 76 66 84 67 74 ...
$ anx_base: num 17 17 19 19 26 12 12 17 20 20 ...
$ anx_pre : num 22 19 14 13 30 15 16 19 14 24 ...
$ anx_post: num 20 16 15 16 25 19 17 22 17 19 ...

> str(sav)

'data.frame': 100 obs. of 13 variables:


$ gender : Factor w/ 2 levels "Female","Male": 1 1 1 1 1 1 1 1 1 1 ...
$ major : Factor w/ 5 levels "Psych","Pre-Med",..: 1 1 1 1 1 1 1 1 1 1 ...
$ cond : Factor w/ 4 levels "Easy","Moderate",..: 1 1 1 1 1 2 2 2 2 2 ...
$ phobia : num 1 1 4 4 10 4 4 4 4 5 ...
$ prevmath: num 3 4 1 0 1 1 2 1 1 0 ...
$ mathquiz: num 43 49 26 29 31 20 13 23 38 NA ...
$ statquiz: num 6 9 8 7 6 7 3 7 8 7 ...
$ hr_base : num 71 73 69 72 71 70 71 77 73 78 ...
$ hr_pre : num 68 75 76 73 83 71 70 87 72 76 ...
$ hr_post : num 65 68 72 78 74 76 66 84 67 74 ...
$ anx_base: num 17 17 19 19 26 12 12 17 20 20 ...
$ anx_pre : num 22 19 14 13 30 15 16 19 14 24 ...
$ anx_post: num 20 16 15 16 25 19 17 22 17 19 ...
- attr(*, "variable.labels")= Named chr
..- attr(*, "names")= chr
- attr(*, "codepage")= int 1252

3. Si identifichino le proprietà e il livello di scala delle variabili del dataset.


4. Si identifichino i valori ottenuti dal 57o soggetto.
> sav[57,]

gender major cond phobia prevmath mathquiz statquiz hr_base hr_pre hr_post anx_base
57 Female Econ Impossible 2 2 31 8 74 78 82 27
anx_pre anx_post
57 21 24

5. Si individuino i punteggi del test hr base.


> txt$hr_base

[1] 71 73 69 72 71 70 71 77 73 78 72 74 73 72 76 68 73 74 77 78 70 74 74 75 76 73 71 71 74 73
[31] 74 76 76 75 69 71 77 78 67 78 77 69 71 71 75 76 74 74 78 72 71 68 72 72 76 73 74 72 74 73
[61] 70 73 80 67 65 71 72 70 69 69 68 69 71 68 68 76 70 68 69 76 71 72 76 76 72 68 74 64 70 71
[91] 72 71 73 72 70 74 70 65 69 72

Esercizio 1.5

In un reparto psichiatrico di un ospedale del nord Italia sono ricoverati 30 pazienti. Per
ciascuno di essi sono state rilevate le seguenti informazioni: regione di residenza, classe
1 INTRODUZIONE A R 9

sociale (definita come bassa, media e alta), punteggio su una scala di ansia (0 = poco
ansioso, 7 = molto ansioso), età, tipo di disturbo presentato. I dati sono raccolti nel file
pazienti.xls2 .
1. Si importi il file in R.
> pazienti <- read.xls(paste(datadir,"pazienti.xls",sep=""))

2. Si specifichi il livello di misura di ciascuna variabile del data-set.


3. Si produca la tabella di frequenze di ciascuna variabile del data-set nel modo più
opportuno.
> summary(pazienti[,c("regione","cl.sociale","disturbo")])

regione cl.sociale disturbo


Liguria : 8 Alta : 6 fobia : 9
Lombardia: 6 Bassa:14 nevrosi :12
Piemonte :10 Media:10 paranoia : 5
Trentino : 2 schizofrenia: 4
Veneto : 4

> table(cut(pazienti$ansia,quantile(pazienti$ansia)))

(0.7,3.42] (3.42,4.35] (4.35,5.4] (5.4,6.7]


7 7 8 7

> table(cut(pazienti$eta,c(0,40,50,60,100)))

(0,40] (40,50] (50,60] (60,100]


8 10 8 4

4. Si produca la tabella di frequenze cumulate (relative) per le variabili per cui abbia
senso.
> classi <- levels(pazienti$cl.sociale)
> pazienti$cl.sociale <- ordered(pazienti$cl.sociale,levels=c("Bassa","Media","Alta"))
> cumsum(table(pazienti$cl.sociale)/length(pazienti$cl.sociale))

Bassa Media Alta


0.4667 0.8000 1.0000

> cumsum(table(pazienti$ansia))/length(pazienti$ansia)

0.7 0.8 1.5 1.7 1.8 3.1 3.3 3.4 3.5 3.8 4.2
0.03333 0.06667 0.10000 0.13333 0.16667 0.20000 0.23333 0.26667 0.33333 0.43333 0.50000
4.5 4.6 4.7 5.1 5.4 5.5 5.8 6 6.1 6.2 6.5
0.56667 0.60000 0.66667 0.70000 0.76667 0.80000 0.83333 0.86667 0.90000 0.93333 0.96667
6.7
1.00000

> cumsum(table(pazienti$eta))/length(pazienti$eta)

21 29 32 35 36 37 39 41 42 43 44
0.03333 0.06667 0.10000 0.13333 0.20000 0.23333 0.26667 0.30000 0.33333 0.36667 0.40000
45 47 48 50 52 53 54 55 56 57 58
0.46667 0.50000 0.56667 0.60000 0.63333 0.66667 0.70000 0.73333 0.76667 0.83333 0.86667
63 65 67 70
0.90000 0.93333 0.96667 1.00000
2
Dati da Areni, Scalisi & Bosco, 2004
1 INTRODUZIONE A R 10

5. Si producano i grafici a barre o istogrammi delle variabili del data-set.


> par(mfrow=c(2,3),mar=c(3,3,2,1),cex=.5)
> barplot(table(pazienti$regione),main="regione")
> barplot(table(pazienti$cl.sociale),main="cl. sociale")
> boxplot(pazienti$ansia,main="ansia")
> boxplot(pazienti$eta,main="et\\`a")
> barplot(table(pazienti$disturbo),main="disturbo")

regione cl. sociale ansia


10

12

6
8

5
6

0 2 4 6 8

4
4

3
2
2

1
0

Liguria Piemonte Veneto Bassa Media Alta

età disturbo
20 30 40 50 60 70

8 10
6
4
2
0

fobia nevrosi schizofrenia

6. Si producano i grafici delle cumulate empiriche per le variabili per cui abbia senso.
> par(mfrow=c(1,2),mar=c(3,3,2,1),cex=CEX)
> plot(cumsum(table(pazienti$ansia)),type="s",main="ansia")
> plot(cumsum(table(pazienti$eta)),type="s",main="et\\`a")

ansia età
30

30
cumsum(table(pazienti$ansia))

cumsum(table(pazienti$eta))
25

25
20

20
15

15
10

10
5

5
0

5 10 15 20 0 5 10 15 20 25

Esercizio 1.6

Utilizzando i dati dell’esercizio 1.5:


1. Si determinino i quartili delle variabili cl.sociale, ansia e eta.
> pazienti$cl.sociale <- ordered(pazienti$cl.sociale,levels=c("Bassa","Media","Alta"))
> Q <-quantile(as.numeric(pazienti$cl.sociale),c(.25,.5,.75))
> Q1 <- levels(pazienti$cl.sociale)[Q]
> names(Q1) <- names(Q)
> Q1
1 INTRODUZIONE A R 11

25% 50% 75%


"Bassa" "Media" "Media"

> quantile(pazienti$ansia,c(.25,.5,.75))

25% 50% 75%


3.425 4.350 5.400

> quantile(pazienti$eta,c(.25,.5,.75))

25% 50% 75%


39.50 47.50 55.75

2. Si calcoli il rango percentile di 39 anni.


> Fx <- ecdf(pazienti$eta)
> Fx(39)

[1] 0.2667

3. Si determini la moda delle variabili del data-set.


> library(ADati)
> apply(pazienti[,-1],2,moda)

$regione
[1] "Piemonte"

$cl.sociale
[1] "Bassa"

$ansia
[1] "3.8"

$eta
[1] "36" "45" "48" "57"

$disturbo
[1] "nevrosi"

4. Si determini la mediana delle variabili del data-set per cui ha senso.


> levels(pazienti$cl.sociale)[median(as.numeric(pazienti$cl.sociale))]

[1] "Media"

> apply(pazienti[,c("ansia","eta")],2,median)

ansia eta
4.35 47.50

5. Si determini la media delle variabili del data-set per cui ha senso.


> apply(pazienti[,c("ansia","eta")],2,mean)

ansia eta
4.16 47.50
1 INTRODUZIONE A R 12

6. Si determinino deviazione standard, varianza e devianza delle variabili del data-set


per cui ha senso.
> apply(pazienti[,c("ansia","eta")],2,sd)

ansia eta
1.644 11.682

Esercizio 1.7

Utilizzando i dati dell’esercizio 1.5:


1. Si produca il boxplot per le variabili del data-set per cui abbia senso.

ansia età

70
6

60
5

50
4

40
3
2

30
1

20

2. Si determini, con l’opportuno metodo grafico, se la distribuzione delle variabili ansia


ed eta possa considerarsi normale.
ansia età
70
6

60
Sample Quantiles

Sample Quantiles
5

50
4

40
3
2

30
1

20

-2 -1 0 1 2 -2 -1 0 1 2

3. Si produca l’opportuno grafico per rappresentare le medie delle età dei soggetti (con
un indicatore di variabilità associato) in funzione del disturbo diagnosticato.
> library(Hmisc)
> mx <- tapply(pazienti$eta,list(pazienti$disturbo),mean)
> sx <- tapply(pazienti$eta,list(pazienti$disturbo),sd)
> par(mfrow=c(1,1),mar=c(3,3,1,1),cex=CEX)
1 INTRODUZIONE A R 13

> errbar(1:4,mx,(mx+sx),(mx-sx),axes=FALSE,xlab="disturbo",xlim=c(.5,4.5))
> axis(1,1:4,names(mx))
> axis(2); box()

60
50
mx

40
30

fobia nevrosi paranoia schizofrenia

Esercizio 1.8

Il file healdrug.dat contiene i dati di una ricerca sulla cura della propria salute e la
propensione all’uso di farmaci (Hoffman & Fidell, 1979). Il campione è composto da
465 donne di età compresa tra 20 e 59 anni, residenti nella San Fernando Valley, Los
Angeles, nel Febbraio 1975. Le variabili considerate sono: timedrs (numero di visite
mediche), attdrug (propensione all’uso di farmaci), atthouse (propensione ai lavori do-
mestici), income (livello di reddito), emplmnt (status lavorativo), mstatus (stato civile),
race (gruppo etnico).

1. Si importi il file healdrug.dat in R assegnandogli nome HD.


> HD <- read.table(paste(datadir,"healdrug.dat",sep=""),header=TRUE)

2. Si identifichino unità statistiche e variabili del data-frame. Per ciascuna variabile si


definiscano le proprietà metriche.
3. Si calcolino medie e deviazioni standard delle variabili su cui ciò è consentito.
> medie <- round(apply(HD[,2:4],2,mean),3)
> ds <- round(apply(HD[,2:4],2,sd),3)
> cbind(medie,ds)

medie ds
timedrs 7.901 10.948
attdrug 7.686 1.156
atthouse 23.492 4.599

4. Si producano le opportune statistiche riassuntive per le altre variabili.


> summary(HD[,5:8])
1 INTRODUZIONE A R 14

income emplmnt mstatus race


Min. : 1.00 cas:246 coniug:362 bianca :424
1st Qu.: 3.00 lav:219 single:103 nonbianca: 41
Median : 4.00
Mean : 9.51
3rd Qu.: 6.00
Max. :99.00

5. Si producano gli istogrammi delle variabili timedrs e attdrug e si salvino in un file


di formato jpeg.

150
350
250

100
150

50
50
0

0 20 40 60 80 5 6 7 8 9 10

timedrs attdrug

6. Si producano i boxplot delle due variabili e si salvino in un file di formato jpeg.

timedrs attdrug
10
80

9
60

8
40

7
20

6
0

7. Si esegua un test di normalità sulle due variabili utilizzando il test Kolmogorov-


Smirnov (funzione ks.test()) oppure il test Shapiro-Wilk (funzione shapiro.test()).

> ks.test(HD$timedrs,"pnorm",mean(HD$timedrs),sd(HD$timedrs))

One-sample Kolmogorov-Smirnov test

data: HD$timedrs
D = 0.24, p-value <2e-16
alternative hypothesis: two-sided

> ks.test(HD$attdrug,"pnorm",mean(HD$attdrug),sd(HD$attdrug))
1 INTRODUZIONE A R 15

One-sample Kolmogorov-Smirnov test

data: HD$attdrug
D = 0.18, p-value = 2e-13
alternative hypothesis: two-sided

8. Si producano i qq-plot per le due variabili e si salvino in un file di formato jpeg.


timedrs attdrug
3

3
Theoretical Quantiles

Theoretical Quantiles
2

2
1

1
0

0
-1

-1
-2

-2
-3

0 20 40 60 80 -3 5 6 7 8 9 10

Sample Quantiles Sample Quantiles

Esercizio 1.9

Il file redditi.dat contiene i redditi medi giornalieri (variabile reddito) di un campione


rappresentativo di 1000 soggetti abitanti in Brasile e Venezuela (dati fittizi).
1. Si importi il file redditi.dat in R assegnandogli nome BV.
> BV <- read.table(paste(datadir,"redditi.dat",sep=""),header=TRUE)

2. Si identifichino unità statistiche e variabili del data-frame. Per ciascuna variabile si


definiscano le proprietà metriche.
3. Si produca un grafico in due parti (utilizzando il comando layout() oppure par())
con gli istogrammi delle distribuzioni dei redditi in Brasile e Venezuela e si salvi in
un file di formato jpeg.
Brasile Venezuela
0.06

0.06
0.04

0.04
Density

Density
0.02

0.02
0.00

0.00

0 50 150 250 350 0 50 150 250 350

reddito reddito
1 INTRODUZIONE A R 16

4. Si calcolino media e deviazione standard dei redditi separatamente per i due paesi.
> medie <- round(tapply(BV$reddito,list(BV$nazion),mean),3)
> ds <- round(tapply(BV$reddito,list(BV$nazion),sd),3)
> cbind(medie,ds)

medie ds
bra 20.18 48.50
ven 15.53 18.72

5. Si esegua un test di normalità sulla variabile reddito per ciascuno dei due gruppi
definendo l’ipotesi relativa al test.
> ks.test(BV$reddito[BV$nazion=="bra"],"pnorm",medie[1],ds[1])

One-sample Kolmogorov-Smirnov test

data: BV$reddito[BV$nazion == "bra"]


D = 0.42, p-value <2e-16
alternative hypothesis: two-sided

> ks.test(BV$reddito[BV$nazion=="ven"],"pnorm",medie[2],ds[2])

One-sample Kolmogorov-Smirnov test

data: BV$reddito[BV$nazion == "ven"]


D = 0.2, p-value <2e-16
alternative hypothesis: two-sided

6. Si producano i qq-plot per la variabile reddito nei due gruppi3 in un unico grafico
diviso in due parti (utilizzando il comando layout() oppure par()) e si salvi in un
file di formato jpeg.

Brasile Venezuela
80 100
Sample Quantiles

Sample Quantiles
250

60
150

40
20
0 50

-3 -2 -1 0 1 2 3 -3 -2 -1 0 1 2 3

Theoretical Quantiles Theoretical Quantiles

7. Si produca un grafico (unico) che illustri le cumulate empiriche della variabile reddito
nei due paesi.
3
Per uno dei due gruppi, il comando qqline() restituisce un messaggio di errore; si cerchi di capire il
perchè.
1 INTRODUZIONE A R 17

0.8
Fn(x)

0.4
bra
ven
0.0

0 100 200 300

8. Si calcolino i quartili della variabile reddito nei due gruppi e si confrontino.


> quantile(BV$reddito[BV$nazion=="bra"],c(.25,.5,.75))

25% 50% 75%


0 0 0

> quantile(BV$reddito[BV$nazion=="ven"],c(.25,.5,.75))

25% 50% 75%


0 8 27

Esercizio 1.10

In una ricerca sulla qualità percepita, vengono selezionate 5 stazioni sciistiche. In ciascuna
stazione viene selezionato un campione di soggetti sciatori, cui viene chiesto di dare una
valutazione ai costi degli impianti, le tipologie di servizi offerti, lo spessore e la qualità
generale della neve. I dati sono raccolti nel file sciatori.sav.
1. Si importi il file sciatori.sav in R.
> library(foreign)
> X <- read.spss(paste(datadir,"sciatori.sav",sep=""),to.data.frame=TRUE)

2. Si producano medie e deviazioni standard delle variabili del questionario in funzione


della stazione di rilevazione (si può usare la funzione aggregate()).
> aggregate(X[,2:5],list(stazione=X$stazione),mean) # medie

stazione costo tipo spessore qualita


1 1 57.85 44.27 44.42 43.42
2 2 45.84 53.68 42.76 42.28
3 3 53.16 45.21 57.37 58.58
4 4 32.75 62.38 59.88 61.50
5 5 37.36 59.00 55.32 57.23

> aggregate(X[,2:5],list(stazione=X$stazione),sd) # dev. st


1 INTRODUZIONE A R 18

stazione costo tipo spessore qualita


1 1 14.048 12.932 13.28 14.99
2 2 14.904 13.325 14.56 16.57
3 3 8.764 7.300 11.89 12.84
4 4 13.792 10.901 10.37 13.03
5 5 8.655 6.633 10.04 11.88

3. Si producano la matrice di covarianza e di correlazione tra le variabili del questio-


nario.
> cov(X[,2:5])

costo tipo spessore qualita


costo 222.35 -178.450 -45.398 -64.04
tipo -178.45 157.283 8.122 16.38
spessore -45.40 8.122 196.576 223.43
qualita -64.04 16.379 223.434 257.79

> cor(X[,2:5])

costo tipo spessore qualita


costo 1.0000 -0.95424 -0.21715 -0.26749
tipo -0.9542 1.00000 0.04619 0.08134
spessore -0.2171 0.04619 1.00000 0.99255
qualita -0.2675 0.08134 0.99255 1.00000

4. Si controlli graficamente se le distribuzioni dei punteggi nelle variabili del questio-


nario possano considerarsi normalmente distribuite, individuando la presenza di
eventuali outliers.
Theoretical Quantiles

Theoretical Quantiles

costo tipo
1

1
-2

-2

20 40 60 80 20 30 40 50 60 70 80

Sample Quantiles Sample Quantiles


Theoretical Quantiles

Theoretical Quantiles

qualita spessore
1

1
-2

-2

0 20 40 60 80 0 20 40 60 80

Sample Quantiles Sample Quantiles

Esercizio 1.11

1. Si utilizzi la funzione rnorm per generare 1000 dati con media 100 e deviazione
standard 15.
1 INTRODUZIONE A R 19

> set.seed(20140301) # da usare solo per ottenere gli stessi risultati


> Y <- rnorm(1000,100,15)

2. Si determini il campo di variazione dell’insieme di dati generato.


> diff(range(Y))

[1] 87.58

3. Si calcolino mediana, media e deviazione standard dell’insieme di dati generato.


> median(Y)

[1] 100.3

> mean(Y)

[1] 99.61

> sd(Y)

[1] 14.99

4. Si produca il grafico di densità ad istogrammi dei dati (con la funzione hist());


successivamente si aggiunga al grafico la curva normale teorica utilizzando le funzioni
curve() e dnorm().
0.020
Density

0.010
0.000

60 80 100 120 140

5. Si esegua un test di normalità sui valori generati definendo l’ipotesi relativa al test.
> ks.test(Y,"pnorm",100,15)

One-sample Kolmogorov-Smirnov test

data: Y
D = 0.023, p-value = 0.7
alternative hypothesis: two-sided
1 INTRODUZIONE A R 20

6. Si producano in un unico grafico diviso in due parti (utilizzando il comando layout()


oppure par()), il boxplot ed il qq-plot, e si salvi il grafico in un file di formato png.
Normal Q-Q Plot

140

140
120

120
Sample Quantiles
100

100
80

80
60

60
-3 -2 -1 0 1 2 3

7. Si produca il grafico della distribuzione cumulata empirica dei dati generati; succes-
sivamente di aggiunga al grafico la cumulata teorica utilizzando le funzioni curve()
e pnorm(). Quali considerazioni è possibile trarre dalla lettura di questo grafico?
0.8
p(Y < y)

0.4
0.0

60 80 100 120 140

Esercizio 1.12

Si ripetano tutti i punti dell’esercizio 1.11 generando solo 10 dati anzichè 1000.

Esercizio 1.13

Si ripetano tutti i punti dell’esercizio 1.11 utilizzando la funzione rchisq con due gradi di
libertà al posto della funzione rnorm.

Esercizio 1.14
1 INTRODUZIONE A R 21

Si ripetano tutti i punti dell’esercizio 1.11 utilizzando la funzione rt con due gradi di
libertà al posto della funzione rnorm.

Esercizio 1.15

Si ripeta l’esercizio 1.14 generando solo 10 dati al posto di 1000. Si confrontino i risultati
ottenuti con quelli degli esercizi 1.11, 1.12, 1.13 e 1.14.
2 TEORIA DEI CAMPIONI 22

2 TEORIA DEI CAMPIONI

Esercizio 2.1

Data la popolazione Ω = {0, 1, 2, 2, 5}

1. Si determini la distribuzione campionaria della media dei campioni di numerosità


n = 2 con reinserimento.
> library(gtools)
> omega <- c(0,1,2,2,5)
> S <- permutations(5, 2, omega, FALSE, TRUE)
> (mcamp <- apply(S,1,mean))

[1] 0.0 0.5 1.0 1.0 2.5 0.5 1.0 1.5 1.5 3.0 1.0 1.5 2.0 2.0 3.5 1.0 1.5 2.0 2.0 3.5 2.5 3.0
[23] 3.5 3.5 5.0

2. Si rappresenti graficamente la distribuzione campionaria ottenuta.

5
4
Count

3
2
1
0

0 1 2 3 4 5

media campionaria

3. Si calcoli la media della distribuzione campionaria delle medie (µx ) e si confronti con
la media della popolazione µ.
> (mlinex <- mean(mcamp)) # media distr. campionaria

[1] 2

> (mi <- mean(omega)) # media popolazione

[1] 2

4. Si calcoli l’errore standard della media (σx ).


> num.medie <- length(mcamp)
> (slinex <- sd(mcamp)*sqrt((num.medie-1)/num.medie))

[1] 1.183

5. Si produca la distribuzione campionaria delle varianze con e senza la correzione e si


rappresentino graficamente.
2 TEORIA DEI CAMPIONI 23

> library(labstatR)
> Vcamp.nc <- apply(S,1,sigma2)
> Vcamp <- apply(S,1,var)

0 5 10

Var. corr. Var. non corr.


15
Count

10

0 5 10

varianza campionaria

6. Si calcolino la media della distribuzione campionaria delle varianze non corrette (µs2 )
e corrette (µσ̂2 ) e si confrontino con la varianza della popolazione σ 2 .
> mean(Vcamp.nc) # var. non corrette

[1] 1.4

> mean(Vcamp) # var corrette

[1] 2.8

> sigma2(omega) # var popolazione

[1] 2.8

Esercizio 2.2

Data la popolazione Ω = {0, 1, 2, 2, 5}


1. Si determini la distribuzione campionaria della media dei campioni di numerosità
n = 3 senza reinserimento.
> omega <- c(0,1,2,2,5)
> S <- permutations(5,3,omega,FALSE)
> (mcamp <- apply(S,1,mean))

[1] 1.000 1.000 2.000 1.000 1.333 2.333 1.000 1.333 2.333 2.000 2.333 2.333 1.000 1.000 2.000
[16] 1.000 1.667 2.667 1.000 1.667 2.667 2.000 2.667 2.667 1.000 1.333 2.333 1.000 1.667 2.667
[31] 1.333 1.667 3.000 2.333 2.667 3.000 1.000 1.333 2.333 1.000 1.667 2.667 1.333 1.667 3.000
[46] 2.333 2.667 3.000 2.000 2.333 2.333 2.000 2.667 2.667 2.333 2.667 3.000 2.333 2.667 3.000

2. Si rappresenti graficamente la distribuzione campionaria ottenuta.


2 TEORIA DEI CAMPIONI 24

15

Count 10

1.0 1.5 2.0 2.5 3.0

media campionaria

3. Si calcoli la media della distribuzione campionaria delle medie (µx ) e si confronti con
la media della popolazione µ.
> (mlinex <- mean(mcamp)) # media distr. campionaria

[1] 2

> (mi <- mean(omega)) # media popolazione

[1] 2

4. Si calcoli l’errore standard della media (σx ).


> num.medie <- length(mcamp)
> (slinex <- sd(mcamp)*sqrt((num.medie-1)/num.medie))

[1] 0.6831

5. Si produca la distribuzione campionaria delle varianze con e senza la correzione e si


rappresentino graficamente.
> Vcamp.nc <- apply(S,1,sigma2)
> Vcamp <- apply(S,1,var)

0 2 4 6

Var. corr. Var. non corr.


15
Count

10
5
0

0 2 4 6

varianza campionaria
2 TEORIA DEI CAMPIONI 25

6. Si calcolino la media della distribuzione campionaria delle varianze non corrette (µs2 )
e corrette (µσ̂2 ) e si confrontino con la varianza della popolazione σ 2 .
> mean(Vcamp.nc) # var. non corrette

[1] 2.333

> mean(Vcamp) # var corrette

[1] 3.5

> sigma2(omega)*(5/4) # var popolazione

[1] 3.5

Esercizio 2.3
Sia Ω una popolazione composta da 150 elementi numerici con valore compreso tra 1 e 20;
in figura 1 sono rappresentate con grafico a barre le frequenze degli elementi di Ω.

10
8
6
4
2
0
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

Fig. 1: Rappresentazione grafica degli elementi appartenenti alla popolazione Ω


dell’esercizio 2.3.

1. Si ricostruisca la popolazione Ω sulla base del grafico.


> table(Omega)

Omega
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
10 5 8 9 6 11 6 3 10 10 6 7 6 6 11 6 7 9 9 5

2. Si calcolino i valori dei parametri della popolazione µ e σ.


> (mi <- mean(Omega))

[1] 10.38
2 TEORIA DEI CAMPIONI 26

> N <- length(Omega)


> (sigma <- sd(Omega)*sqrt(N/(N-1)))

[1] 5.841

3. Si estraggano da Ω 5 campioni casuali senza reinserimento di dimensione n =


5, 50, 100 e su ciascuno di essi si calcoli la media aritmetica (rispettivamente x5 ,
x50 e x100 ).
> set.seed(20150309)
> n5 <- sample(Omega,5)
> mean(n5)

[1] 12.8

> n50 <- sample(Omega,50)


> mean(n50)

[1] 10.04

> n100 <- sample(Omega,100)


> mean(n100)

[1] 10.38

4. Si rappresentino graficamente (con la funzione barplot()) le frequenze osservate dei


valori nei tre campioni estratti.
n=5 n=50 n=100
10

10

10
8

8
6

6
4

4
2

2
0

2 7 18 1 5 9 14 20 1 5 9 14 20

5. Si producano (con la funzione campionaria.media()) le distribuzioni campionarie


per campioni (senza reinserimento) di dimensione n = 5, 50, 100 e si confrontino
graficamente. Suggerimento: per avere distribuzioni affidabili si producano almeno
3000 campioni.
> M5 <- campionaria.media(Omega,n=5,B=3000)
> M50 <- campionaria.media(Omega,n=50,B=3000)
> M100 <- campionaria.media(Omega,n=100,B=3000)
2 TEORIA DEI CAMPIONI 27

n=5 n=50 n=100

1.2

1.2

1.2
1.0

1.0

1.0
0.8

0.8

0.8
0.6

0.6

0.6
0.4

0.4

0.4
0.2

0.2

0.2
0.0

0.0

0.0
5 10 15 5 10 15 5 10 15

6. Sulla base delle distribuzioni campionarie ottenute al punto precedente si stabilisca


per quale numerosità campionaria sia più alta la probabilità di ottenere un campione
la cui media x risulti più estrema (maggiore o minore) rispetto alla media vera della
popolazione ±σ.
> low <- mi-sigma
> up <- mi+sigma
> (sum(M5$Smx<=low)+sum(M5$Smx>=up))/length(M5$Smx)

[1] 0.01733

> (sum(M50$Smx<=low)+sum(M50$Smx>=up))/length(M50$Smx)

[1] 0

> (sum(M100$Smx<=low)+sum(M100$Smx>=up))/length(M100$Smx)

[1] 0

Esercizio 2.4

Date le due popolazioni di numerosità N = 4: Ω1 = {3, 7, 8, 9} (con µ = 6.75 e σ 2 =


5.1875) e Ω2 = {2, 4, 5, 8} (con µ = 4.75 e σ 2 = 4.6875) si considerino le distribuzioni di
tutti i possibili campioni di dimensione n = 2 con e senza reinserimento. Si dimostrino le
seguenti uguaglianze:

• µx1 −x2 = µ1 − µ2
σ12 σ22
• σx21 −x2 = n + n nel caso con reinserimento
σ12 σ2
  
N −n
• σx21 −x2 = n + n2 N −1 nel caso senza reinserimento.

Si può seguire il seguente procedimento, prima per il caso con reinserimento e poi senza
reinserimento:
1. Si determinino le distribuzioni campionarie della media dei campioni di numerosità
n = 2 per Ω1 e Ω2 .
2 TEORIA DEI CAMPIONI 28

> Omega1 <- c(3,7,8,9)


> Omega2 <- c(2,4,8,5)
>
> ## con reinserimento
> S1r <- permutations(4,2,Omega1,FALSE,TRUE)
> Sm1r <- apply(S1r,1,mean) # distr. camp. di omega1
> S2r <- permutations(4,2,Omega2,FALSE,TRUE)
> Sm2r <- apply(S2r,1,mean) # distr. camp. di omega2
>
> ## senza reinserimento
> S1 <- permutations(4,2,c(3,7,8,9))
> Sm1 <- apply(S1,1,mean)
> S2 <- permutations(4,2,c(2,4,8,5))
> Sm2 <- apply(S2,1,mean)

2. Si determinino tutte le possibili coppie di medie date dalle due distribuzioni cam-
pionarie ottenute (si può utilizzare la funzione expand.grid()).
> Scoppier <- expand.grid(Sm1r=Sm1r,Sm2r=Sm2r)
> Scoppie <- expand.grid(Sm1=Sm1,Sm2=Sm2)

3. Si determini la distribuzione campionaria delle differenze tra le medie.


> Sdiffr <- apply(Scoppier,1,diff)
> Sdiff <- apply(Scoppie,1,diff)

4. Si calcolino la media (µx1 −x2 ) e la varianza (σx21 −x2 ) della distribuzione campionaria
delle differenze tra medie e si confrontino con i valori ottenuti dalle formule riportate
sopra.
> ## media delle differenze tra le medie
> (mean(Omega2)-mean(Omega1)) # popolazioni

[1] -2

> mean(Sdiffr) # medie con reinserimento

[1] -2

> mean(Sdiff) # medie senza reinserimento

[1] -2

> ## varianza delle differenze tra le medie


> (sigma2(Omega1)/2+sigma2(Omega2)/2) # popolazioni

[1] 4.938

> sigma2(Sdiffr) # medie con reinserimento

[1] 4.938

> sigma2(Sdiff)*((4-1)/(4-2)) # medie senza reinserimento

[1] 4.938
2 TEORIA DEI CAMPIONI 29

Esercizio 2.5

Il file esame.txt contiene i voti di un appello di Psicometria sostenuto da 239 studenti;


siano la nostra popolazione Ω.
1. Si importino i dati in R utilizzando la funzione scan().
> X <- scan(paste(datadir,'esame.txt',sep=''))

2. Si calcolino media (µ) e varianza (σ 2 ) della popolazione.


> (mu <- mean(X))

[1] 14.24

> (sigma2 <- var(X))

[1] 39.79

3. Si determini il numero di possibili campioni senza reinserimento ottenibili da Ω di


dimensione n = 3, 20, 50.
> choose(239,3)

[1] 2246839

> choose(239,20)

[1] 6.711e+28

> choose(239,50)

[1] 1.094e+52

4. Si produca la distribuzione campionaria della media per le tre numerosità e si con-


frontino. Suggerimento: si può creare la distribuzione campionaria con la funzione
campionaria.media().

0 5 10 15 20 25

3 20 50
0.4
Density

0.3
0.2
0.1
0.0

0 5 10 15 20 25 0 5 10 15 20 25

media campionaria
2 TEORIA DEI CAMPIONI 30

5. Si stimi la probabilità che la media di un campione di dimensione n = 10 estratto


senza reinserimento da tale popolazione abbia una media maggiore o uguale a 18.
> library(ADati)
> out <- campionaria.media(X,n=10,grafico=FALSE)

Dati popolazione
------------------------------------
N = 239 - mi = 14.2427 - sigma2 = 39.6231 - sigma = 6.2947 - st.err(mx) = 1.9526
------------------------------------

Dati distribuzione campionaria approssimata senza reinserimento


------------------------------------
n = 10 - E(mx) = 14.0998 - V(mx) = 3.9544 - ds(mx) = 1.9886
------------------------------------

> sum(out$Smx>=18)/length(out$Smx)

[1] 0.026

Esercizio 2.6

Si consideri una variabile X distribuita normalmente in due distinte popolazioni caratte-


rizzate dai seguenti parametri: µ1 = 10 e σ1 = 3, µ2 = 8 e σ2 = 2.
1. Utilizzando la funzione curve(), si rappresentino sullo stesso grafico le distribuzioni
attese della variabile X nelle due popolazioni.
> mi <- c(10,8)
> sigma <- c(3,2)
> curve(dnorm(x,mi[2],sigma[2]),2,18)
> curve(dnorm(x,mi[1],sigma[1]),add=TRUE,col="red")

0.20

0.15

0.10

0.05

0.00

5 10 15

2. Si supponga di estrarre campioni di numerosità n = 10 da ciascuna distribuzione; si


rappresentino graficamente le distribuzioni campionarie attese delle medie di questi
campioni (sempre con la funzione curve()).
> n <- 10
> # calcolo gli standard errors
> se <- sigma/sqrt(n)
> curve(dnorm(x,mi[2],se[2]),2,18)
> curve(dnorm(x,mi[1],se[1]),add=TRUE,col="red")
2 TEORIA DEI CAMPIONI 31

0.6

0.4

0.2

0.0

5 10 15

3. Si producano le distribuzioni campionarie delle medie per campioni estratti delle due
popolazioni, sempre per n = 10. (Si può utilizzare la funzione campionaria.media()).

> omega1 <- rnorm(10000,mi[1],sigma[1]) # popolazione 1


> omega2 <- rnorm(10000,mi[2],sigma[2]) # popolazione 2
> s1 <- campionaria.media(omega1,n,grafico=FALSE)$Smx
> s2 <- campionaria.media(omega2,n,grafico=FALSE)$Smx

0.6

0.4

0.2

5 10 15

4. Si utilizzino le distribuzioni ottenute per produrre la distribuzione campionaria della


differenza tra le medie e si stimi il valore atteso di questa statistica.
> deltamx <- s1-s2
> hist(deltamx)
2 TEORIA DEI CAMPIONI 32

0.3

0.2

0.1

0.0

-2 0 2 4 6

x1 − x2

> mean(deltamx) # stima del valore atteso

[1] 2.023

5. Si utilizzino le distribuzioni ottenute per produrre la distribuzione campionaria della


somma tra le medie e stimare il valore atteso di questa statistica.
> summx <- s1+s2
> hist(summx)

0.3

0.2

0.1

0.0

16 18 20

x1 + x2

> mean(summx) # stima del valore atteso

[1] 18.06

6. Si consideri la domanda al punto 2; se la numerosità campionaria considerata fosse


n = 100 ci aspettiamo che la sovrapposizione delle distribuzioni campionarie aumenti
o diminuisca?
> n <- 100
> # calcolo gli standard errors
> se <- sigma/sqrt(n)
> curve(dnorm(x,mi[2],se[2]),2,18)
> curve(dnorm(x,mi[1],se[1]),add=TRUE,col="red")
2 TEORIA DEI CAMPIONI 33

2.0

1.5

1.0

0.5

0.0

5 10 15

Esercizio 2.7
Supponiamo di avere una moneta bilanciata e volere studiare la distribuzione campionaria
della statistica T = numero di teste in L lanci con L = 3, 10, 50, 200. Possiamo ipotizzare
che la popolazione di lanci sia virtualmente infinita; con la funzione sample() possiamo
simulare L lanci di una moneta bilanciata, ad esempio:
> L <- 3 # tre lanci
> sample(0:1,size=L,replace=TRUE) # 1 = testa

e quindi contare il numero di teste che escono. Per ripetere più volte il processo di
campionamento possiamo utilizzare la funzione replicate() come segue:
> B <- 1000 # numero di repliche di campioni
> replicate(B,sample(0:1,size=L,replace=TRUE))

da cui si ottiene una matrice in cui ciascuna colonna rappresenta un campione. Su


ogni campione prodotto (colonna) possiamo calcolare la statistica test T .

1. Si producano 1000 campioni di L lanci della moneta.


> L3 <- replicate(B,sample(0:1,size=3,replace=TRUE))
> L10 <- replicate(B,sample(0:1,size=10,replace=TRUE))
> L50 <- replicate(B,sample(0:1,size=50,replace=TRUE))
> L200 <- replicate(B,sample(0:1,size=200,replace=TRUE))

2. Si calcoli il numero di teste per ogni campione ottenuto, ovvero la distribuzione


campionaria del numero di teste per ogni valore di L.
> T3 <- apply(L3,2,sum)
> T10 <- apply(L10,2,sum)
> T50 <- apply(L50,2,sum)
> T200 <- apply(L200,2,sum)

3. Si rappresentino graficamente le tre distribuzioni campionarie ottenute.


> par(mfrow=c(1,4))
> barplot(table(T3))
> barplot(table(T10))
> barplot(table(T50))
> barplot(table(T200))
2 TEORIA DEI CAMPIONI 34

60
100
200
300

50
80
150

40
200

60

30
100

40

20
50 100

50

20

10
0

0
0 1 2 3 0 3 6 9 15 23 31 77 93 109

4. Quali considerazioni si possono fare confrontando i grafici?

Esercizio 2.8

Si ripeta l’esercizio 2.7 simulando una moneta non bilanciata in cui la probabilità di
ottenere testa è 0.75. Si confrontino le distribuzioni ottenute con quelle dell’esercizio 2.7.
> L3 <- replicate(B,sample(0:1,size=3,replace=TRUE,prob=c(.25,.75)))
> L10 <- replicate(B,sample(0:1,size=10,replace=TRUE,prob=c(.25,.75)))
> L50 <- replicate(B,sample(0:1,size=50,replace=TRUE,prob=c(.25,.75)))
> L200 <- replicate(B,sample(0:1,size=200,replace=TRUE,prob=c(.25,.75)))
>
> T3 <- apply(L3,2,sum)
> T10 <- apply(L10,2,sum)
> T50 <- apply(L50,2,sum)
> T200 <- apply(L200,2,sum)
>
> par(mfrow=c(1,4))
> barplot(table(T3))
> barplot(table(T10))
> barplot(table(T50))
> barplot(table(T200))
400

250

100 120

60
200

50
300

80

40
150
200

60

30
100

40

20
100

50

20

10
0

0 1 2 3 2 5 8 27 34 41 127 146 162

Esercizio 2.9
2 TEORIA DEI CAMPIONI 35

Si ripeta l’esercizio 2.7 simulando una moneta non bilanciata in cui la probabilità di
ottenere testa è 0.05. Si confrontino le distribuzioni ottenute con quelle dell’esercizio 2.7.
> CEXL3 <- replicate(B,sample(0:1,size=3,replace=TRUE,prob=c(.95,.05)))
> L10 <- replicate(B,sample(0:1,size=10,replace=TRUE,prob=c(.95,.05)))
> L50 <- replicate(B,sample(0:1,size=50,replace=TRUE,prob=c(.95,.05)))
> L200 <- replicate(B,sample(0:1,size=200,replace=TRUE,prob=c(.95,.05)))
>
> T3 <- apply(L3,2,sum)
> T10 <- apply(L10,2,sum)
> T50 <- apply(L50,2,sum)
> T200 <- apply(L200,2,sum)
>
> par(mfrow=c(1,4))
> barplot(table(T3))
> barplot(table(T10))
> barplot(table(T50))
> barplot(table(T200))

120
250
400

500

100
200
300

400

80
150
300
200

60
100
200

40
100

50
100

20
0

0 1 2 3 0 2 4 0 3 6 3 8 14 21

Esercizio 2.10

In una città ci sono due ospedali4 ; in quello più grande nascono circa 45 bambini la settima-
na, in quello più piccolo, circa 15 la settimana; il numero di maschi è approssimativamente
il 50% dei nati, ovviamente tale percentuale può variare di settimana in settimana. In cia-
scun ospedale si conta il numero di volte in cui è stato superato il 60% dei maschi tra i
nati nel corso di in un anno. In quale dei due si registrerà più volte tale evento: A) Nel
più grande; B) Nel più piccolo; C) Lo stesso numero di volte?

Per rispondere alla domanda si proceda come segue:


1. Si simuli con la funzione sample() un campione di neonati nell’ospedale piccolo e si
stimi la percentuale di maschi.
> ysmall <- sample(0:1,15,TRUE)
> sum(ysmall)/15*100

[1] 60

4
tratto da: Tversky, A., & Kahneman, D. (1974). Judgment under uncertainty: Heuristics and Biases.
Science, 185(4157), 1124-1131.
2 TEORIA DEI CAMPIONI 36

2. Si simuli un campione di neonati nell’ospedale grande e si stimi la percentuale di


maschi.
> ylarge <- sample(0:1,45,TRUE)
> sum(ysmall)/45*100

[1] 20

3. Si utilizzi la funzione replicate() per generare 1000 campioni estratti da ciascun


ospedale.
> ysmall <- replicate(1000,sample(0:1,15,TRUE))
> ylarge <- replicate(1000,sample(0:1,45,TRUE))

4. Si calcolino le percentuali di maschi osservati nei 1000 campioni generati al punto


precedente.
> nsmall <- apply(ysmall,2,sum)/15*100
> nlarge <- apply(ylarge,2,sum)/45*100

5. Si rappresentino graficamente le distribuzioni dei valori ottenuti.

20 40 60 80

large H small H
20
15
10
5
0

20 40 60 80

Percentuale di maschi

6. Si calcoli la proporzione di casi nei due ospedali in cui la percentuale di maschi


supera il 60%.
> sum(nsmall>60)/1000

[1] 0.143

> sum(nlarge>60)/1000

[1] 0.08

Esercizio 2.11
La funzione mvrnorm() (nel pacchetto MASS) permette di generare dati (a coppie) prove-
nienti da una distribuzione normale bivariata con correlazione ρ; ad esempio, supponiamo
di voler estrarre 50 coppie di valori da una popolazione con correlazione ρ = .3 possiamo
fare come segue:
2 TEORIA DEI CAMPIONI 37

> library(MASS)
> RHO <- matrix(c(1,.3,.3,1),nrow=2) # matrice di correlazione
> X <- mvrnorm(50,c(0,0),RHO)

Utilizzando la funzione replicate() insieme a mvrnorm() si producano le distribu-


zioni campionarie del coefficiente di correlazione r sulla base della numerosità (n) e della
correlazione vera nella popolazione (ρ) indicate e si rappresentino graficamente.

1. ρ = 0, n = 10, 50, 200.


> n <- c(10,50,200); rho <- 0
> RHO <- matrix(c(1,rho,rho,1),nrow=2)
> X1 <- replicate(10000,cor(mvrnorm(n[1],c(0,0),RHO))[1,2])
> X2 <- replicate(10000,cor(mvrnorm(n[2],c(0,0),RHO))[1,2])
> X3 <- replicate(10000,cor(mvrnorm(n[3],c(0,0),RHO))[1,2])
>
> par(mfrow=c(1,3),mar=c(2,2,1,1))
> hist(X1,xlim=c(-1,1),freq=FALSE,main="")
> hist(X2,xlim=c(-1,1),freq=FALSE,main="")
> hist(X3,xlim=c(-1,1),freq=FALSE,main="")
2.5

5
1.0

2.0

4
0.8

1.5
0.6

Density

Density

3
1.0
0.4

2
0.5
0.2

1
0.0

0.0

-1.0 -0.5 0.0 0.5 1.0 -1.0 -0.5 0.0 0.5 1.0 -1.0 -0.5 0.0 0.5 1.0

2. ρ = 0.4, n = 75, 100, 400.


> n <- c(75,100,400); rho <- .4
> RHO <- matrix(c(1,rho,rho,1),nrow=2)
> X1 <- replicate(10000,cor(mvrnorm(n[1],c(0,0),RHO))[1,2])
> X2 <- replicate(10000,cor(mvrnorm(n[2],c(0,0),RHO))[1,2])
> X3 <- replicate(10000,cor(mvrnorm(n[3],c(0,0),RHO))[1,2])
>
> par(mfrow=c(1,3),mar=c(2,2,1,1))
> hist(X1,xlim=c(-1,1),freq=FALSE,main="")
> hist(X2,xlim=c(-1,1),freq=FALSE,main="")
> hist(X3,xlim=c(-1,1),freq=FALSE,main="")
2 TEORIA DEI CAMPIONI 38

8
4
3

6
3
Density

Density
2

4
2
1

2
1
0

0
-1.0 -0.5 0.0 0.5 1.0 -1.0 -0.5 0.0 0.5 1.0 -1.0 -0.5 0.0 0.5 1.0

3. ρ = 0.1, 0.45, 0.8, n = 25.


> n <- 25; rho <- c(.1,.45,.8)
> RHO1 <- matrix(c(1,rho[1],rho[1],1),nrow=2)
> RHO2 <- matrix(c(1,rho[2],rho[2],1),nrow=2)
> RHO3 <- matrix(c(1,rho[3],rho[3],1),nrow=2)
> X1 <- replicate(10000,cor(mvrnorm(n,c(0,0),RHO1))[1,2])
> X2 <- replicate(10000,cor(mvrnorm(n,c(0,0),RHO2))[1,2])
> X3 <- replicate(10000,cor(mvrnorm(n,c(0,0),RHO3))[1,2])
>
> par(mfrow=c(1,3),mar=c(2,2,1,1))
> hist(X1,xlim=c(-1,1),freq=FALSE,main="")
> hist(X2,xlim=c(-1,1),freq=FALSE,main="")
> hist(X3,xlim=c(-1,1),freq=FALSE,main="")
2.5

5
2.0
1.5

4
1.5
Density

Density
1.0

3
1.0

2
0.5

0.5

1
0.0

0.0

-1.0 -0.5 0.0 0.5 1.0 -1.0 -0.5 0.0 0.5 1.0 -1.0 -0.5 0.0 0.5 1.0

4. ρ = 0.1, 0.45, 0.8, n = 500.


> n <- 500; rho <- c(.1,.45,.8)
> RHO1 <- matrix(c(1,rho[1],rho[1],1),nrow=2)
> RHO2 <- matrix(c(1,rho[2],rho[2],1),nrow=2)
> RHO3 <- matrix(c(1,rho[3],rho[3],1),nrow=2)
> X1 <- replicate(10000,cor(mvrnorm(n,c(0,0),RHO1))[1,2])
> X2 <- replicate(10000,cor(mvrnorm(n,c(0,0),RHO2))[1,2])
> X3 <- replicate(10000,cor(mvrnorm(n,c(0,0),RHO3))[1,2])
>
> par(mfrow=c(1,3),mar=c(2,2,1,1))
> hist(X1,xlim=c(-1,1),freq=FALSE,main="")
> hist(X2,xlim=c(-1,1),freq=FALSE,main="")
> hist(X3,xlim=c(-1,1),freq=FALSE,main="")
2 TEORIA DEI CAMPIONI 39

10
8

20
8
6

15
Density

Density
6
4

10
4
2

5
2
0

0
-1.0 -0.5 0.0 0.5 1.0 -1.0 -0.5 0.0 0.5 1.0 -1.0 -0.5 0.0 0.5 1.0
3 INFERENZA 40

3 INFERENZA

Esercizio 3.1

(Non richiede R) Date le seguenti ipotesi:

1. Si individuino le unità statistiche e le variabili.

2. Si determinino le proprietà delle variabili e la scala di misura relativa.

3. Si individui il tipo di relazione ipotizzabile tra le variabili ed i ruoli delle stesse.

• In un esperimento sulla memoria 30 studenti vengono sottoposti ad una prova di


ricordo. Per ciascuno di essi viene misurato il numero di errori commessi nella
rievocazione di 60 stimoli visivi. Si ipotizza che le femmine abbiano una capacità di
memoria migliore rispetto a quella dei maschi.

• Uno psicologo ed uno psichiatra valutano 25 pazienti per individuare il disturbo cui
sono affetti tra i seguenti: schizofrenia, nevrosi ossessiva, paranoia, fobia. Si ipotizza
che non vi siano differenze tra i due nella modalità di classificare i pazienti.

• Uno psicologo scolastico sospetta che vi siano differenze nelle prestazioni in mate-
matica tra le scuole di alcuni distretti. A tal fine confronta tra loro i voti medi delle
classi di cinque scuole per ciascun distretto.

• Uno psicologo ed uno psichiatra valutano 25 pazienti per individuare la gravità di


un certo disurbo. Si ipotizza che lo psicologo tenda ad attribuire un maggiore grado
di gravità al disturbo considerato.

• Per valutare l’efficacia di un corso di statistica il docente effettua un test sulle compe-
tenze degli studenti prima del corso. Al termine del corso ripete il test attendendosi
che i punteggi degli studenti siano aumentati.

• In una ricerca sulle preferenze musicali vengono intervistati 200 adolescenti (114
maschi e 86 femmine) cui viene chiesto quanto ascoltano musica dark. Si ipotizza
che i soggetti che preferiscono la musica dark siano più propensi alla depressione e
che questo effetto sia più accentuato nelle femmine.

Esercizio 3.2

(Non richiede R) Si immagini di voler indagare la qualità della vita in una città, tenendo
conto delle caratteristiche dei quartieri e del livello economico dei residenti. Si definisca
un disegno di indagine specificando le unità statistiche e le variabili coinvolte; per queste
ultime si identifichino le caratteristiche (metriche, di ruolo ecc.).

Esercizio 3.3

Si supponga di voler testare se una moneta risulti essere bilanciata lanciandola per 12
volte. Sia T0 il numero di teste osservato nel campione di lanci.

1. Si definiscano le ipotesi H0 e H1 del test.


3 INFERENZA 41

2. Si rappresenti graficamente la distribuzione campionaria della statistica test sotto


l’ipotesi H0 (utilizzando la funzione dbinom()).
> nteste <- 0:12 # numero di teste ottenibili in 12 lanci
> (pnteste <- dbinom(nteste,12,.5)) # probabilità sotto H0

[1] 0.0002441 0.0029297 0.0161133 0.0537109 0.1208496 0.1933594 0.2255859 0.1933594 0.1208496
[10] 0.0537109 0.0161133 0.0029297 0.0002441

> plot(nteste,pnteste,type="h")

3. Si determini la regione critica del test con α = .05 (si può utilizzare la funzione
qbinom()).
> ## La regione critica è data dai valori di nteste con probabilità minore a .05
> ## coda sinistra
> (xs <- qbinom(.05/2,12,.5)) # valore critico sinistro

[1] 3

> ## coda destra


> (xd <- qbinom(.05/2,12,.5,lower.tail=FALSE)) # valore critico destro

[1] 9
0.20
0.15
probabilità

0.10
0.05
0.00

0 1 2 3 4 5 6 7 8 9 10 11 12

numero di teste

Fig. 2: Distribuzione campionaria del numero di teste in 12 lanci di una moneta. In rosso
la regione critica per ipotesi H1 : π 6= .5.

4. Supponendo di avere osservato T0 = 3 teste su 12 lanci, si prenda una decisione in


merito alle ipotesi formulate al punto 1.
> # Dato che 3 non cade nella regione critica non possiamo rigettare H0:
> # non abbiamo elementi per sostenere che la moneta non sia bilanciata.

5. Si ripeta il test con la funzione binom.test().


> binom.test(3,12)
3 INFERENZA 42

Exact binomial test

data: 3 and 12
number of successes = 3, number of trials = 12, p-value = 0.1
alternative hypothesis: true probability of success is not equal to 0.5
95 percent confidence interval:
0.05486 0.57186
sample estimates:
probability of success
0.25

Esercizio 3.4

Il file esame.txt contiene i voti di un appello di Psicometria sostenuto da 239 studenti.


1. Si importino i dati in R utilizzando la funzione scan().
> X <- scan(paste(datadir,'esame.txt',sep=''))

2. Si valuti con una o più opportune rappresentazioni grafiche se la distribuzione dei


voti possa considerarsi normale.

Histogram of X Normal Q-Q Plot


80

Sample Quantiles
25

25
60
Frequency

15

15
40
20

0 5

0 5
0

-5 10 25 -3 0 2

X Theoretical Quantiles

3. Si vuole valutare l’ipotesi che il voto medio nella vera popolazione di cui il campione
fa parte sia 18: si definiscano le ipotesi H0 e H1 , considerando, data la difficoltà
della materia, che i voti risultino al di sotto della media.
4. Si calcoli la media dei voti nel campione x e l’errore standard associato alla stima
σx .
> (mx <- mean(X))

[1] 14.24

> (se <- sd(X)/sqrt(length(X)))

[1] 0.408

5. Assumendo che il campione estratto provenga effettivamente da una popolazione


con media 18 si individui graficamente e di determini (con la funzione pnorm()) la
probabilità di estrarre dalla popolazione un campione con media ≤ x.
3 INFERENZA 43

> # La distribuzione campionaria della media avrà media 18


> # e dev. standard
> se

[1] 0.408

> ## la probabilità sarà


> pnorm(mx,18,se)

[1] 1.652e-20

1.0
0.8
0.6
p(X)

0.4
0.2
0.0

12 14 16 18 20

6. Si esegua il test definito nell’ipotesi al punto 3 con la funzione t.test() confrontando


il risultato con quello ottenuto al punto precedente.
> t.test(X,mu=18,alternative="less")

One Sample t-test

data: X
t = -9.2, df = 240, p-value <2e-16
alternative hypothesis: true mean is less than 18
95 percent confidence interval:
-Inf 14.92
sample estimates:
mean of x
14.24

Esercizio 3.5

Nel file MFTP.dat sono raccolti i punteggi ottenuti da un campione di 97 neolaureati in


Psicologia nel Major Field Test in Psychology II (MFTP), un test per la valutazione delle
competenze psicologiche. Da studi effettuati in anni precedenti è emerso che il punteggio
medio ottenuto al test risulta essere 156.5. Si vuole sapere se il campione possa considerarsi
compatibile con quelli a cui il test è stato somministrato precedentemente.

1. Si importino i dati in R con la funzione scan().


3 INFERENZA 44

> X <- scan(paste(datadir,"MFTP.dat",sep=""))

2. Si calcolino media e deviazione standard dei punteggi.


> mean(X); sd(X)

[1] 154.8
[1] 12.07

3. Si producano in un unico layout il grafico ad istogrammi, il boxplot ed il qqplot


relativi ai punteggi.

punteggi MFTP Normal Q-Q Plot

Theoretical Quantiles
15

2
170
Frequency

1
10

150

0
-2 -1
5

130
0

130 170 130 160

Sample Quantiles

4. Si valuti con un test opportuno se la distribuzione dei punteggi possa considerarsi


normale formulando le ipotesi H0 e H1 relative al test.
> ks.test(X,"pnorm",mean(X),sd(X))

One-sample Kolmogorov-Smirnov test

data: X
D = 0.061, p-value = 0.9
alternative hypothesis: two-sided

5. Si valuti con il test opportuno se la media campionaria si differenzia significativa-


mente da quella generale del test formulando le ipotesi H0 e H1 relative al test.

> summary(lm((X-156.5)~1))

Call:
lm(formula = (X - 156.5) ~ 1)

Residuals:
Min 1Q Median 3Q Max
-29.825 -8.825 0.175 9.175 26.175

Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -1.68 1.23 -1.37 0.17

Residual standard error: 12.1 on 96 degrees of freedom


3 INFERENZA 45

Esercizio 3.6

Uno psicologo viene interpellato dal preside di una grande scuola in un quartiere fortemente
disagiato per un programma di prevenzione rispetto l’abbandono scolastico. Prima di
valutare quale possa essere il possibile programma, lo psicologo vuole stimare il tasso di
abbandono scolastico (θ) adottando una procedura di tipo bayesiano. Poichè a priori non
dispone di nessuna conoscenza definisce per il parametro θ la seguente distibuzione di
probabilità:
p(θ = i) = 0.25 con i ∈ {0.2, 0.4, 0.6, 0.8}

1. Si rappresenti graficamente la distribuzione di probabilità definita.


Distribuzione a priori
0.35
0.30
p(θ)

0.25
0.20
0.15

0.0 0.2 0.4 0.6 0.8 1.0

2. Su un campione esaminato di 250 studenti, 75 di essi hanno abbandonato la scuola.


La funzione di verosimiglianza per questo risultato è data da p(D|θ) = θ75 (1 −
θ)250−75 . Si calcolino i valori di verosimiglianza per ciascun valore ipotizzato di θ e
si rappresentino graficamente.
> theta <- c(.2,.4,.6,.8)
> L <- theta^75*(1-theta)^(250-75)

Verosimiglianza
2.0e-69
p(D|θ)

1.0e-69
0.0e+00

0.0 0.2 0.4 0.6 0.8 1.0

3. Si calcolino i valori di probabilità a posteriori utilizzando la formula di Bayes

p(θ)p(D|θ)
p(θ|D) =
p(D)
3 INFERENZA 46

P
in cui p(D) = θ p(θ)p(D|θ) e quindi li si rappresenti graficamente.
> post <- 0.25*L/sum(0.25*L)

Distribuzione a posteriori

0.8
0.6
p(θ|D)

0.4
0.2
0.0

0.0 0.2 0.4 0.6 0.8 1.0

4. Quali conclusioni si possono prendere sulla base del risultato ottenuto?

Esercizio 3.7

1. Si utilizzi la funzione rnorm per generare un vettore (Y ) di 30 dati con media 20 e


deviazione standard 5.
> set.seed(20140331) # da usare solo per ottenere gli stessi risultati
> Y <- rnorm(30,20,5)

2. Si crei un fattore (A) con tre livelli e dieci osservazioni per livello (si possono usare
la funzione rep e/o la funzione factor).
> A <- factor(rep(1:3,each=10))

3. Si calcolino le medie e deviazioni standard del vettore Y utilizzando A come variabile


indipendente (si ottengono tre gruppi da 10 osservazioni ciascuno).
> tapply(Y,list(A),mean)

1 2 3
19.02 21.29 22.94

4. Si rappresentino graficamente, nella maniera più opportuna, i punteggi dei tre gruppi
ottenuti.
3 INFERENZA 47

25
20
15

1 2 3

5. Si formulino le ipotesi di normalità associate alle distribuzioni di punteggi nei tre


gruppi e si valutino tali ipotesi con i test più opportuni.
gruppo 1 gruppo 2 gruppo 3
25

25

25
Sample Quantiles

Sample Quantiles

Sample Quantiles
20

20

20
15

15

15

-1.5 0.0 1.0 -1.5 0.0 1.0 -1.5 0.0 1.0

6. Si formuli l’ipotesi di omogeneità delle varianze nei tre gruppi, si valuti tale ipotesi
con il test opportuno e si stabilisca se il risultato sia coerente con quello osservato
al punto 4.
> bartlett.test(Y~A)

Bartlett test of homogeneity of variances

data: Y by A
Bartlett's K-squared = 0.62, df = 2, p-value = 0.7

7. Si formuli l’ipotesi di uguaglianza delle medie tra i gruppi e si valuti tale ipotesi con
il test opportuno.
> fit <- lm(Y~A)
> anova(fit)

Analysis of Variance Table

Response: Y
Df Sum Sq Mean Sq F value Pr(>F)
A 2 78 38.8 1.42 0.26
Residuals 27 740 27.4
3 INFERENZA 48

8. Si stimi la dimensione dell’effetto e la si interpreti.


> summary(fit)$r.squared # eta quadro

[1] 0.0949

9. Si ripeta il test eseguito al punto 7 utilizzando il Bayes Factor e si confrontino i


risultati.
> lmBF(Y~A,data=data.frame(Y,A))

Bayes factor analysis


--------------
[1] A : 0.5201 ±0.01%

Against denominator:
Intercept only
---
Bayes factor type: BFlinearModel, JZS

Esercizio 3.8

1. Si aggiunga al vettore Y , creato nell’esercizio 3.7, un vettore di 10 elementi con


media 12 e deviazione standard 5.
> Y <- c(Y,rnorm(10,12,5))

2. Si aggiunga al fattore A, creato nell’esercizio 3.7, un quarto livello con 10 osserva-


zioni.
> A <- factor(c(A,rep("4",10)))

3. Si ripetano i punti 3-9 dell’esercizio 3.7 confrontando i risultati.

Esercizio 3.9
In figura 3 sono rappresentate rispettivamente le distribuzioni campionarie (con stessa
varianza σ 2 = 1) di una statistica test T utilizzata per la stima di un parametro θ, sotto
le due ipotesi H0 e H1 .
1. Sulla base della rappresentazione, si formulino le ipotesi H0 e H1 in forma puntuale.

> # H0: theta = 0


> # H1: theta = 2

2. Si determini la regione critica del test per rigettare H0 al 5%. Suggerimento: si


utilizzi la funzione qnorm().
> # la regione critica comprende i valori maggiori di
> (tc <- qnorm(.95))

[1] 1.645

3. Si calcoli la probabilità di rigettare H0 nel caso in cui fosse vera H1 (potenza del
test). Suggerimento: si utilizzi la funzione pnorm().
3 INFERENZA 49

0.4

0.3
p(T ) ipotesi
0.2 H0
H1

0.1

0.0
-3 -2 -1 0 1 2 3 4 5
T

Fig. 3: Esercizio 3.9: rappresentazione grafica della distribuzione campionaria teorica di


una statistica T sotto due diverse ipotesi H0 e H1 .

> # la potenza è data dall'area sotto H1 nella regione critica


> pnorm(tc,2,lower.tail = FALSE)

[1] 0.6388

4. Supponendo di avere le seguenti tre stime del parametro θ ottenute su 3 diversi


campioni: θ̂1 = .3, θ̂2 = 2.1 e θ̂3 = 3.9; si stabilisca sotto quale delle due ipotesi sia
più plausibile osservare ciascuno di tali risultati. Suggerimento: si utilizzi la funzione
dnorm().
> theta.hat <- c(.3,2.1,3.5)
> dnorm(theta.hat)

[1] 0.3813878 0.0439836 0.0008727

> dnorm(theta.hat,2)

[1] 0.09405 0.39695 0.12952

> # .3 è più plausibile sotto H0


> # 2.1 e 3.9 sono più plausibili sotto H1

Esercizio 3.10

Si ripeta l’esercizio 3.6 considerando di avere un campione di soli 30 studenti, di cui 9


hanno abbandonato la scuola. Ci aspettiamo di ottenere lo stesso risultato?
1. Si rappresenti graficamente la distribuzione di probabilità a priori.
> ## E' la stessa di prima

2. Si calcolino i valori di verosimiglianza per ciascun valore ipotizzato di θ e si rappre-


sentino graficamente.
3 INFERENZA 50

> theta <- c(.2,.4,.6,.8)


> L <- theta^9*(1-theta)^(30-9)

Verosimiglianza

4e-09
p(D|θ)

0e+00 2e-09

0.0 0.2 0.4 0.6 0.8 1.0

θ
3. Si calcolino i valori di probabilità a posteriori utilizzando la formula di Bayes e quindi
li si rappresenti graficamente.
> post <- 0.25*L/sum(0.25*L)

Distribuzione a posteriori
0.4
p(θ|D)

0.2
0.0

0.0 0.2 0.4 0.6 0.8 1.0

4. Quali conclusioni possiamo trarre confrontando questa distribuzione con quella ot-
tenuta nell’esercizio 3.6?
4 REGRESSIONE LINEARE SEMPLICE 51

4 REGRESSIONE LINEARE SEMPLICE

Esercizio 4.1

Per ciascuna coppia di variabili (x, y) generate come specificato di seguito si producano
un diagramma di dispersione e due boxplot (uno per ciascuna variabile). Quindi si calcoli
la correlazione tra esse e si valuti con un test opportuno se il coefficiente di regressione
del modello y ∼ x sia diverso da zero. Al termine si confrontino i risultati e si traggano
le conclusioni.

1. Siano: y <- rnorm(50) e x1 <- y.


> y <- rnorm(50)
> x1 <- y
3

3
2

2
1

1
y

0
-1

-1
-2

-2

-2 -1 0 1 2 3 y x1

x1

> cor(y,x1)

[1] 1

> fit1 <- lm(y~x1)


> summary(fit1)$coefficients[2,]

Estimate Std. Error t value Pr(>|t|)


1.000e+00 3.430e-17 2.915e+16 0.000e+00

2. Siano: y (generato al punto 1) e x2 <- y+10.


> x2 <- y+10
4 REGRESSIONE LINEARE SEMPLICE 52

10
2
1
y

5
0
-1

0
-2

8 9 10 11 12 13 y x2

x2

> cor(y,x2)

[1] 1

> fit2 <- lm(y~x2)


> summary(fit2)$coefficients[2,]

Estimate Std. Error t value Pr(>|t|)


1.000e+00 8.868e-17 1.128e+16 0.000e+00

3. Siano: y (generato al punto 1) e x3 <- rnorm(50).


> x3 <- rnorm(50)
3

3
2

2
1

1
y

0
-1

-1
-2

-2

-2 -1 0 1 2 y x3

x3

> cor(y,x3)

[1] 0.01366

> fit3 <- lm(y~x3)


> summary(fit3)$coefficients[2,]

Estimate Std. Error t value Pr(>|t|)


0.01564 0.16526 0.09466 0.92498
4 REGRESSIONE LINEARE SEMPLICE 53

4. Siano: y (generato al punto 1) e x4 <- x3+10.


> x4 <- x3+10

10
2
1

5
y

0
-1

0
-2

8 9 10 11 12 y x4

x4

> cor(y,x4)

[1] 0.01366

> fit4 <- lm(y~x4)


> summary(fit4)$coefficients[2,]

Estimate Std. Error t value Pr(>|t|)


0.01564 0.16526 0.09466 0.92498

Esercizio 4.2

Nel file autor.dat sono riportati i punteggi di 12 soggetti su una scala di autoritarismo
ed una di pregiudizi sociali (dati: Siegel & Castellan, 1992).
Ci si chiede se vi sia una relazione significativa tra il livello di autoritarismo e il livello di
pregiudizio dei soggetti interpellati.

1. Si importi il file autor.dat in R assegnandogli nome AP.


> AP <- read.table(paste(datadir,"autor.dat",sep=""),header=TRUE)

2. Si identifichino unità statistiche e variabili del data-frame. Per ciascuna variabile si


definiscano le proprietà metriche.
> str(AP)

'data.frame': 12 obs. of 3 variables:


$ sogg: int 1 2 3 4 5 6 7 8 9 10 ...
$ aut : int 82 98 87 40 116 113 111 83 85 126 ...
$ preg: int 42 46 39 37 65 88 86 56 62 92 ...

3. Si calcoli il campo di variazione dei punteggi di autoritarismo e pregiudizio.


4 REGRESSIONE LINEARE SEMPLICE 54

> range(AP$aut)

[1] 40 126

> range(AP$preg)

[1] 37 92

4. Si determini l’80◦ percentile della variabile autoritarismo.


> quantile(AP$aut,.8)

80%
115.4

5. Si rappresenti graficamente la distribuzione dei punteggi di autoritarismo e pregiu-


dizio.
90
80
pregiudizio

70
60
50
40

40 60 80 100 120

autoritarismo

6. Si calcolino covarianza e correlazione tra autoritarismo e pregiudizio e si interpretino.

> cov(AP$aut,AP$preg) # covarianza

[1] 364.5

> cor(AP$aut,AP$preg) # correlazione

[1] 0.7745

Esercizio 4.3

Il file Hooker.dat contiene dati raccolti da J.Hooker sulle montagne dell’Himalaya (cfr.
Weisberg, 1985). Tali dati rappresentano le temperature in gradi Fahrenheit (variabile
temp) di ebollizione dell’acqua a diversi valori di pressione atmosferica (mmhg; variabile
press).
4 REGRESSIONE LINEARE SEMPLICE 55

1. Si importi il file Hooker.dat in R.


> X <- read.table(paste(datadir,"Hooker.dat",sep=""),header=TRUE)

2. Si identifichino unità statistiche e variabili del data-frame. Per ciascuna variabile si


definiscano le proprietà metriche.
> str(X)

'data.frame': 31 obs. of 3 variables:


$ caso : int 1 2 3 4 5 6 7 8 9 10 ...
$ temp : num 181 181 182 182 182 ...
$ press: num 15.4 15.9 16.1 15.9 16.2 ...

3. Si calcolino moda, mediana e media della variabile temp. Sulla base del risultato si
valuti se la distribuzione di tale variabile possa considerarsi simmetrica.
> moda(X$temp); median(X$temp); mean(X$temp)

[1] "181.9" "184.1"


[1] 190.6
[1] 191.8

4. Si valuti con un grafico opportuno la simmetria della distribuzione.


8
6
Frequency

4
2
0

180 185 190 195 200 205 210 215

temperatura

5. Si produca un grafico in quattro parti (utilizzando il comando layout() oppure


par()) con i boxplot e qqplot per le variabili press e temp.
pressione temperatura
180 190 200 210
28
24
20
16

180 190 200 210


Sample Quantiles

Sample Quantiles
28
24
20
16
4 REGRESSIONE LINEARE SEMPLICE 56

6. Si produca il diagramma di dispersione relativo alle variabili press e temp valutando


se sia ipotizzabile una relazione lineare.

210
temperatura

200
190
180

16 18 20 22 24 26 28

pressione

7. Si calcolino covarianza e correlazione tra le variabili press e temp.


> cov(X$press,X$temp) # covarianza

[1] 33.72

> cor(X$press,X$temp) # correlazione

[1] 0.9959

8. Si stimino i parametri della retta di regressione.


> (fit <- lm(temp~press,data=X))

Call:
lm(formula = temp ~ press, data = X)

Coefficients:
(Intercept) press
146.79 2.25

9. Si valutino graficamente gli assunti del modello utilizzando i grafici dei residui ed
individuando la presenza di eventuali casi anomali o influenti.
4 REGRESSIONE LINEARE SEMPLICE 57

Residuals vs Fitted Normal Q-Q

Standardized residuals

2
20 20

0.0 1.0

1
Residuals

0
-2 -1
-1.5
2 31 31 2

185 190 195 200 205 210 -2 -1 0 1 2

Fitted values Theoretical Quantiles


Scale-Location Residuals vs Leverage
Standardized residuals

Standardized residuals
1.5

2 31

2
20 0.5

1
1.0

0
0.5

-2 -1
Cook’s
2 distance
29 0.5
31
0.0

185 190 195 200 205 210 0.00 0.05 0.10 0.15 0.20

10. Si valuti se la stima del parametro β sia statisticamente significativa, definendo


l’ipotesi H0 relativa.
> summary(fit)

Call:
lm(formula = temp ~ press, data = X)

Residuals:
Min 1Q Median 3Q Max
-1.595 -0.691 0.237 0.537 1.417

Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 146.7871 0.7771 189 <2e-16 ***
press 2.2460 0.0381 59 <2e-16 ***
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 0.809 on 29 degrees of freedom


Multiple R-squared: 0.992,Adjusted R-squared: 0.991
F-statistic: 3.47e+03 on 1 and 29 DF, p-value: <2e-16

11. Si aggiunga al grafico la retta di regressione teorica.


210
temperatura

200
190
180

16 18 20 22 24 26 28

pressione
4 REGRESSIONE LINEARE SEMPLICE 58

12. Si stimi, sulla base dei parametri calcolati, il valore atteso di temperatura con una
pressione di 27.
> coef(fit)[1]+27*coef(fit)[2]

(Intercept)
207.4

Esercizio 4.4

Supponiamo di avere misurato la statura di 10 bambini di età compresa tra 6 e 12 anni e


di riportare i dati in tabella 1.

Età Statura
(anni) (cm)
1 6 115
2 6 120
3 7 122
4 8 130
5 8 128
6 9 134
7 10 136
8 10 140
9 11 147
10 12 151

Tab. 1: Età e statura di un campione di 10 bambini.

1. Si identifichino unità statistiche e variabili del problema. Per ciascuna variabile si


definiscano le proprietà metriche.
2. Si costruisca un data-frame con i dati della tabella 1 in R.
> anni <- c(6,6,7,8,8,9,10,10,11,12)
> statura <- c(115,120,122,130,128,134,136,140,147,151)
> X <- data.frame(anni,statura)

3. Si produca il diagramma di dispersione relativo alle due variabili valutando se sia


ipotizzabile una relazione lineare.
4 REGRESSIONE LINEARE SEMPLICE 59

145
135
cm

125
115

6 7 8 9 10 11 12

anni

4. Si calcolino covarianza e correlazione tra le variabili età e statura.


> cov(anni,statura) # covarianza

[1] 23.66

> cor(anni,statura) # correlazione

[1] 0.9866

5. Si stimino i parametri della retta di regressione.


> (fit <- lm(statura~anni,data=X))

Call:
lm(formula = statura ~ anni, data = X)

Coefficients:
(Intercept) anni
83.69 5.59

6. Si valutino graficamente gli assunti del modello utilizzando i grafici dei residui ed
individuando la presenza di eventuali casi anomali o influenti.
4 REGRESSIONE LINEARE SEMPLICE 60

Residuals vs Fitted Normal Q-Q

Standardized residuals

2
2 2

1
Residuals

0
-2

-1
1 1
7 7
-4

-2
120 125 130 135 140 145 150 -1.5 -1.0 -0.5 0.0 0.5 1.0 1.5

Fitted values Theoretical Quantiles


Scale-Location Residuals vs Leverage
Standardized residuals

Standardized residuals
7

2
2 2 1
0.0 0.4 0.8 1.2

1 0.5

1
0
-1
0.5
Cook’s distance
1
1

-2
7

120 125 130 135 140 145 150 0.0 0.1 0.2 0.3 0.4

7. Si valuti se la stima del parametro β sia statisticamente significativa, definendo


l’ipotesi H0 relativa.
> summary(fit)

Call:
lm(formula = statura ~ anni, data = X)

Residuals:
Min 1Q Median 3Q Max
-3.564 -0.698 0.142 1.318 2.787

Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 83.685 2.908 28.8 2.3e-09 ***
anni 5.588 0.326 17.1 1.4e-07 ***
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 2.01 on 8 degrees of freedom


Multiple R-squared: 0.973,Adjusted R-squared: 0.97
F-statistic: 293 on 1 and 8 DF, p-value: 1.37e-07

8. Si aggiunga al grafico la retta di regressione teorica.


145
135
cm

125
115

6 7 8 9 10 11 12

anni
4 REGRESSIONE LINEARE SEMPLICE 61

Esercizio 4.5

Ad un campione di 50 adolescenti affetti da una sindrome metabolica vengono misurate


la concentrazione di globuli bianchi nel sangue (white blood cell count, wbcc) e l’indice di
massa corporea (body mass index, bmi). I dati sono nel file MetS.dat. Si vuole sapere se
la concentrazione di globuli bianchi sia predittiva del bmi.
1. Si importino i dati in R.
> X <- read.table(paste(datadir,"MetS.dat",sep=""),header=TRUE)

2. Si calcolino media, varianza e deviazione standard delle variabili wbcc e bmi.


> apply(X,2,mean)

wbcc bmi
6.832 19.415

> apply(X,2,var)

wbcc bmi
0.09768 0.19180

> apply(X,2,sd)

wbcc bmi
0.3125 0.4379

3. Si produca un grafico a dispersione che rappresenti la distribuzione congiunta delle


due variabili.
20.5
20.0
bmi

19.5
19.0

6.5 7.0 7.5

wbcc

4. Si stimino i parametri del modello di regressione in cui la variabile wbcc è il predittore


della variabile bmi.
> (fit <- lm(bmi~wbcc,data=X))
4 REGRESSIONE LINEARE SEMPLICE 62

Call:
lm(formula = bmi ~ wbcc, data = X)

Coefficients:
(Intercept) wbcc
16.696 0.398

5. Si aggiunga al grafico ottenuto al punto 3 la retta di regressione attesa.


20.5
20.0
bmi

19.5
19.0

6.5 7.0 7.5

wbcc

6. Si stimi il valore atteso di indice di massa corporea quando la concentrazione di


globuli bianchi è 8 e lo si rappresenti graficamente.
> (haty <- coef(fit)[1]+8*coef(fit)[2])

(Intercept)
19.88
20.5
20.0
bmi

19.5
19.0

6.5 7.0 7.5 8.0

wbcc

7. Si calcoli la dimensione dell’effetto (R2 ).


4 REGRESSIONE LINEARE SEMPLICE 63

> summary(fit)$r.squared

[1] 0.08068

Esercizio 4.6

Un campione di 13 soggetti con disturbi di memoria viene sottoposto ad una terapia per
il recupero delle funzioni cognitive compromesse. Prima della terapia i soggetti vengono
sottoposti al Mini Mental State Examination Test (variabile MMSE1). Al termine della
terapia, ai soggetti viene risomministrato il test (variabile MMSE3). I dati sono riportati
nel file mmse.dat. Si vuole sapere se la prima somministrazione possa essere considerata
predittiva della terza.

1. Si importi il file mmse.dat in R.


> X <- read.table(paste(datadir,"mmse.dat",sep=""),header=TRUE)

2. Si identifichino unità statistiche e variabili del data-frame. Per ciascuna variabile si


definiscano le proprietà metriche.
> str(X)

'data.frame': 13 obs. of 3 variables:


$ MMSE1: num 24.7 20.7 28.3 25.9 29.6 27.3 27.4 25.9 27.9 28.7 ...
$ MMSE2: num 27.7 22.7 29.3 28.3 25.9 27.3 27.4 26.9 27.9 28.7 ...
$ MMSE3: num 27.7 22.7 29.3 28.3 27.9 28.7 27 28.3 25.9 28.7 ...

3. Si calcolino il campo di variazione e la semidifferenza interquartilica per le variabili


del data-frame5 .
> diff(apply(X,2,range))

MMSE1 MMSE2 MMSE3


[1,] 8.9 6.6 6.6

> diff(apply(X,2,quantile,c(.25,.75)))/2

MMSE1 MMSE2 MMSE3


75% 1.2 0.7 1

4. Si produca la matrice di correlazione tra le variabili del data-frame.


> round(cor(X),3)

MMSE1 MMSE2 MMSE3


MMSE1 1.000 0.607 0.637
MMSE2 0.607 1.000 0.777
MMSE3 0.637 0.777 1.000

5
Data una variabile casuale X: il campo di variazione è la differenza tra max(X) e min(X), la
semidifferenza interquartilica è (Q3 − Q1)/2 in cui Q1 è il primo quartile e Q3 il terzo.
4 REGRESSIONE LINEARE SEMPLICE 64

5. Si produca un opportuno grafico che permetta di confrontare le distribuzioni dei


punteggi delle tre variabili.

28
26
24
22

MMSE1 MMSE2 MMSE3

6. Si produca un grafico in tre parti (utilizzando il comando layout() oppure par())


con i qqplot per le tre variabili del data-frame e si valuti se ci sono potenziali outliers.
MMSE1 MMSE2 MMSE3
23 24 25 26 27 28 29

23 24 25 26 27 28 29
28
Sample Quantiles

Sample Quantiles

Sample Quantiles
26
24
22

-1.5 0.5 -1.5 0.5 -1.5 0.5

Theoretical Quantiles Theoretical Quantiles Theoretical Quantiles

7. Si produca il diagramma di dispersione relativo alle variabili MMSE1 e MMSE3 valutando


se sia ipotizzabile una relazione lineare.
29
28
27
MMSE3

26
25
24
23

22 24 26 28

MMSE1

8. Si stimino i parametri della retta di regressione.


4 REGRESSIONE LINEARE SEMPLICE 65

> (fit <- lm(MMSE3~MMSE1,data=X))

Call:
lm(formula = MMSE3 ~ MMSE1, data = X)

Coefficients:
(Intercept) MMSE1
14.222 0.486

9. Si valutino graficamente gli assunti del modello utilizzando i grafici dei residui ed
individuando la presenza di eventuali casi anomali o influenti.

Standardized residuals
Residuals vs Fitted Normal Q-Q

1.5
Residuals

0 1

0.0
9 11
2

-2.0
911
-2

25 26 27 28 -1.5 -0.5 0.5 1.5


Standardized residuals

Fitted values Theoretical Quantiles


Standardized residuals

Scale-Location Residuals vs Leverage


2
1
1.2

0 1

911 1
0.5
0.6

0.5
1
9 Cook’s distance
-2
0.0

25 26 27 28 0.0 0.2 0.4 0.6

10. Si valuti se la stima del parametro β sia statisticamente significativa, definendo


l’ipotesi H0 relativa.
> summary(fit)

Call:
lm(formula = MMSE3 ~ MMSE1, data = X)

Residuals:
Min 1Q Median 3Q Max
-1.8773 -1.1858 0.0086 1.3284 1.4944

Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 14.222 4.773 2.98 0.013 *
MMSE1 0.486 0.177 2.74 0.019 *
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 1.39 on 11 degrees of freedom


Multiple R-squared: 0.406,Adjusted R-squared: 0.352
F-statistic: 7.51 on 1 and 11 DF, p-value: 0.0192

11. Si aggiunga al grafico la retta di regressione teorica.


4 REGRESSIONE LINEARE SEMPLICE 66

> par(mfrow=c(1,1),mar=c(4,4,1,1),cex=.7)
> plot(X$MMSE1,X$MMSE3,xlab="MMSE1",ylab="MMSE3")
> abline(fit,col="red")

29
28
27
MMSE3

26
25
24
23

22 24 26 28

MMSE1

12. Si ripetano i punti 7, 8, 9, 10 e 11 eliminando il secondo soggetto (Perchè viene


eliminato?).
> X2 <- X[-2,] # tolgo il secondo soggetto
> (fit2 <- lm(MMSE3~MMSE1,data=X2))

Call:
lm(formula = MMSE3 ~ MMSE1, data = X2)

Coefficients:
(Intercept) MMSE1
28.4114 -0.0281

13. Si confrontino i risultati della regressione con tutti i soggetti e della regressione senza
il secondo soggetto.
29

29
28

28
27

27
MMSE3

MMSE3
26

26
25

25
24

24
23

23

22 24 26 28 22 24 26 28

MMSE1 MMSE1

14. Si determini un idoneo indicatore di effect size per ciascuno dei due modelli.
> summary(fit)$r.squared # r quadro

[1] 0.4058
4 REGRESSIONE LINEARE SEMPLICE 67

> summary(fit)$adj.r.squared # r quadro aggiustato

[1] 0.3518

> summary(fit2)$r.squared # r quadro

[1] 0.001236

> summary(fit2)$adj.r.squared # r quadro aggiustato

[1] -0.09864

Esercizio 4.7

Il Sensation Seeking (SS) è un tratto di personalità che indica la tendenza alla ricerca
di sensazioni intense e di esperienze rischiose. Un ricercatore utilizza, per misurare tale
tratto, un test da cui si ottengono punteggi che variano da zero a trenta; maggiore è il
punteggio di un soggetto, maggiore la sua proprensione al Sensation Seeking. Il test viene
somministrato ad un campione di 8 soggetti di varie età, ottenendo i risultati riportati in
tabella 2.
Età SS
1 31 24
2 27 15
3 34 20
4 38 8
5 38 9
6 39 12
7 25 28
8 31 11

Tab. 2: Propensione al Sensation Seeking per età.

Si vuole sapere se esista una relazione significativa tra età e Sensation Seeking.
1. Si riportino opportunamente i dati della tabella 2 in R.
> eta <- c(31,27,34,38,38,39,25,31)
> SS <- c(24,15,20,8,9,12,28,11)

2. Si calcoli la correlazione tra le due variabili utilizzando il coefficiente di Pearson e


quello di Spearman.
> cor(eta,SS) # correlazione di Pearson

[1] -0.7034

> cor(eta,SS,method="spearman") # correlazione di Spearman

[1] -0.6627
4 REGRESSIONE LINEARE SEMPLICE 68

3. Si produca il diagramma di dispersione relativo alle due variabili valutando se sia


ipotizzabile una relazione lineare.

25
sensation seeking

20
15
10

26 28 30 32 34 36 38

età
4. Si stabilisca, con il test opportuno, se l’età sia un predittore statisticamente signifi-
cativo del SS, definendo l’ipotesi H0 relativa al test.
> fit <- lm(SS~eta)
> anova(fit)

Analysis of Variance Table

Response: SS
Df Sum Sq Mean Sq F value Pr(>F)
eta 1 187 187.4 5.88 0.052 .
Residuals 6 191 31.9
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

5. Si determinino le quote di devianza e di varianza spiegate dalla relazione lineare.


> anova(fit)[1,2:3]

Sum Sq Mean Sq
eta 187 187

Esercizio 4.8

Un ricercatore vuole sapere se vi siano differenze nell’atteggiamento verso l’attività extra-


domestica tra le donne sposate con figli e quelle senza figli. Allo scopo somministra una
scala di atteggiamento ad un campione casuale di 72 donne coniugate, metà delle quali
con figli e metà senza figli. I punteggi di atteggiamento ottenuti sono riportati nel file
extra.dat (variabile attegg).

1. Si importi il file extra.dat in R.


4 REGRESSIONE LINEARE SEMPLICE 69

> X <- read.table(paste(datadir,"extra.dat",sep=""),header=TRUE)

2. Si produca un grafico in due parti (utilizzando il comando layout() oppure par())


con gli istogrammi delle distribuzioni dei punteggi di atteggiamento per i due gruppi
di donne.
0.06 donne con figli donne senza figli

0.06
0.04

0.04
Density

Density
0.02

0.02
0.00

0.00
40 50 60 70 80 90 40 50 60 70 80 90

atteggiamento atteggiamento

3. Si valuti, con uno o più test opportuni, se le distribuzioni dei punteggi nei due gruppi
sono normali definendo le ipotesi H0 e commentando il risultato.
> ks.test(X$attegg[X$figli=="si"],"pnorm",mean(X$attegg[X$figli=="si"]),sd(X$attegg[X$figli=="si"]))

One-sample Kolmogorov-Smirnov test

data: X$attegg[X$figli == "si"]


D = 0.086, p-value = 1
alternative hypothesis: two-sided

> ks.test(X$attegg[X$figli=="no"],"pnorm",mean(X$attegg[X$figli=="no"]),sd(X$attegg[X$figli=="no"]))

One-sample Kolmogorov-Smirnov test

data: X$attegg[X$figli == "no"]


D = 0.086, p-value = 1
alternative hypothesis: two-sided

4. Si valuti se le varianze dei due gruppi sono omogenee (funzione bartlett.test)


definendo l’ipotesi H0 relativa al test.
> bartlett.test(attegg~figli,data=X)

Bartlett test of homogeneity of variances

data: attegg by figli


Bartlett's K-squared = 0.0075, df = 1, p-value = 0.9

5. Si valuti, servendosi degli opportuni grafici, se vi siano potenziali outliers nei due
gruppi.
4 REGRESSIONE LINEARE SEMPLICE 70

90
80
atteggiamento

70
60
50

no si

figli

6. Si stabilisca, con il test opportuno, se vi siano differenze di atteggiamento tra le


donne con figli e quelle senza definendo l’ipotesi H0 relativa al test.
> fit <- lm(attegg~figli,data=X)
> anova(fit)

Analysis of Variance Table

Response: attegg
Df Sum Sq Mean Sq F value Pr(>F)
figli 1 910 910 11.9 0.00096 ***
Residuals 70 5355 76
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

7. Si stimi la dimensione dell’effetto e la si interpreti.


> summary(fit)$r.squared

[1] 0.1453

> summary(fit)$adj.r.squared

[1] 0.1331

Esercizio 4.9

Nel periodo dal 1900 al 1950, negli Stati Uniti, si sono registrati i valori di popolazione
(in decine di milioni di abitanti) riportati in tabella 3.
Si vuole stimare, con le dovute assunzioni, la popolazione al 1960.

1. Si riportino opportunamente i dati della tabella 3 in R.


> anno <- seq(1900,1950,10)
> pop <- c(7.6,9.2,10.57,12.28,13.17,15.11)
4 REGRESSIONE LINEARE SEMPLICE 71

Anno Popolazione
1900 7.6
1910 9.2
1920 10.57
1930 12.28
1940 13.17
1950 15.11

Tab. 3: Popolazione degli Stati Uniti, in decine di milioni di abitanti, nel periodo 1900-1950.

2. Si produca il diagramma di dispersione relativo alle due variabili valutando se sia


ipotizzabile una relazione lineare.
14
popolazione in milioni

12
10
8

1900 1910 1920 1930 1940 1950

anno

3. Si stimino i parametri della retta di regressione.


> fit <- lm(pop~anno)

4. Si valuti se le stime dei parametri α e β siano statisticamente significative, definendo


l’ipotesi H0 relativa.
> summary(fit)

Call:
lm(formula = pop ~ anno)

Residuals:
1 2 3 4 5 6
-0.0667 0.0713 -0.0207 0.2273 -0.3447 0.1333

Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -2.70e+02 1.02e+01 -26.4 1.2e-05 ***
anno 1.46e-01 5.32e-03 27.5 1.0e-05 ***
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 0.223 on 4 degrees of freedom


Multiple R-squared: 0.995,Adjusted R-squared: 0.993
F-statistic: 755 on 1 and 4 DF, p-value: 1.04e-05
4 REGRESSIONE LINEARE SEMPLICE 72

5. Si aggiunga al grafico la retta di regressione teorica.

14
popolazione in milioni

12
10
8

1900 1910 1920 1930 1940 1950

anno

6. Si stimi, sulla base dei parametri calcolati, il valore atteso di popolazione nel 1960.
> coef(fit)[1]+1960*coef(fit)[2]

(Intercept)
16.44

Esercizio 4.10

Due campioni di 300 studenti di due diverse facoltà si sottopongono ad un test di memoria.
I punteggi di tutti i soggetti (600) sono riportati nel file studenti.dat (variabile punt) con
la relativa facoltà di appartenenza (variabile fac). Si vuole sapere se esista una differenza
significativa i punteggi nei due gruppi.

1. Si importi il file studenti.dat in R.


> X <- read.table(paste(datadir,"studenti.dat",sep=""),header=TRUE)

2. Si produca un grafico che permetta di confrontare la distribuzione dei percentili dei


punteggi nelle due facoltà (Suggerimento: si usino colori diversi per le due facoltà).
4 REGRESSIONE LINEARE SEMPLICE 73

1.0
F1
F2

0.8
ranghi percentili

0.6
0.4
0.2
0.0

10 15 20 25 30

punteggi

3. Si calcolino moda, mediana e media dei punteggi nelle due diverse facoltà. Quali
considerazioni è possibile fare dal confronto tra tali statistiche?
> tapply(X$punt,list(X$fac),moda)

1 2
"20" "17"

> tapply(X$punt,list(X$fac),median)

1 2
20 18

> tapply(X$punt,list(X$fac),mean)

1 2
20.19 17.86

4. Si calcolino semi differenza interquartilica, deviazione standard e varianza dei pun-


teggi nelle due diverse facoltà. Quali considerazioni è possibile fare dal confronto tra
tali statistiche?
> (tapply(X$punt,list(X$fac),quantile,.75)-tapply(X$punt,list(X$fac),quantile,.25))/2

1 2
1.5 3.5

> tapply(X$punt,list(X$fac),sd)

1 2
2.402 4.777

> tapply(X$punt,list(X$fac),var)

1 2
5.771 22.819
4 REGRESSIONE LINEARE SEMPLICE 74

5. Si produca un grafico in due parti (utilizzando il comando layout() oppure par())


con gli istogrammi delle distribuzioni dei punteggi al test di memoria dei due gruppi.

facoltà 1 facoltà 2

0.20

0.20
0.15

0.15
Density

Density
0.10

0.10
0.05

0.05
0.00

0.00
5 10 15 20 25 30 5 10 15 20 25 30

punteggio punteggio

6. Si valuti, con uno o più test opportuni, se le distribuzioni dei punteggi nei due gruppi
sono normali.
> ks.test(X$punt[X$fac==1],"pnorm",mean(X$punt[X$fac==1]),sd(X$punt[X$fac==1]))

One-sample Kolmogorov-Smirnov test

data: X$punt[X$fac == 1]
D = 0.099, p-value = 0.006
alternative hypothesis: two-sided

> ks.test(X$punt[X$fac==2],"pnorm",mean(X$punt[X$fac==2]),sd(X$punt[X$fac==2]))

One-sample Kolmogorov-Smirnov test

data: X$punt[X$fac == 2]
D = 0.075, p-value = 0.07
alternative hypothesis: two-sided

7. Si valuti se le varianze dei due gruppi sono omogenee (funzione bartlett.test)


definendo l’ipotesi H0 relativa al test.
> bartlett.test(punt~fac,data=X)

Bartlett test of homogeneity of variances

data: punt by fac


Bartlett's K-squared = 130, df = 1, p-value <2e-16

8. Si stabilisca, con il test opportuno, se vi siano differenze tra i due gruppi nei punteggi
al test di memoria definendo l’ipotesi H0 relativa al test.
> fit <- lm(punt~fac,data=X)
> anova(fit)

Analysis of Variance Table


4 REGRESSIONE LINEARE SEMPLICE 75

Response: punt
Df Sum Sq Mean Sq F value Pr(>F)
fac 1 814 814 57 1.7e-13 ***
Residuals 598 8548 14
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

9. Si determini la dimensione dell’effetto e la si interpreti.


> summary(fit)$r.squared # eta quadro

[1] 0.08698

10. Si replichi l’analisi calcolando il Bayes Factor e si confronti il risultato con quello
ottenuto al punto 8.
> library(BayesFactor)
> lmBF(punt~fac,data=X)

Bayes factor analysis


--------------
[1] fac : 3.605e+10 ±0%

Against denominator:
Intercept only
---
Bayes factor type: BFlinearModel, JZS

Esercizio 4.11

Un ricercatore ritiene che possa esservi una differenza di genere nell’attitudine al pronto
soccorso. Per valutare tale ipotesi somministra un questionario apposito ad un campione
di 562 studenti (165 maschi e 397 femmine). I dati (punteggi di attitudine e genere dei
soggetti) sono raccolti nel file firstaid.dat.

1. Si importino i dati in R.
> X <- read.table(paste(datadir,"firstaid.dat",sep=""),header=TRUE)

2. Si calcolino media e deviazione standard dei punteggi separatamente per maschi e


femmine.
> tapply(X$attitude,list(X$sex),mean)

f m
2.385 2.123

> tapply(X$attitude,list(X$sex),sd)

f m
0.7276 0.7736
4 REGRESSIONE LINEARE SEMPLICE 76

3. Si produca un grafico delle medie dei punteggi con i relativi intervalli di confidenza
(suggerimento: si può utilizzare la funzione plotmeans()).

2.4
2.3
attitudine

2.2
2.1
2.0

n=397 n=165

f m

sesso

4. Si valuti l’assunto di normalità utilizzando gli opportuni test statistici e grafici.


> ks.test(X$attitude[X$sex=="m"],"pnorm",mean(X$attitude[X$sex=="m"]),sd(X$attitude[X$sex=="m"]))

One-sample Kolmogorov-Smirnov test

data: X$attitude[X$sex == "m"]


D = 0.072, p-value = 0.4
alternative hypothesis: two-sided

> ks.test(X$attitude[X$sex=="f"],"pnorm",mean(X$attitude[X$sex=="f"]),sd(X$attitude[X$sex=="f"]))

One-sample Kolmogorov-Smirnov test

data: X$attitude[X$sex == "f"]


D = 0.026, p-value = 1
alternative hypothesis: two-sided

maschi femmine
3
Theoretical Quantiles

Theoretical Quantiles
2

2
1

1
0

0
-1
-1

-2
-2

-3

0.5 1.5 2.5 3.5 0 1 2 3 4

Sample Quantiles Sample Quantiles


4 REGRESSIONE LINEARE SEMPLICE 77

5. Si esegua il test opportuno per valutare se vi siano differenze tra maschi e femmine
nei punteggi del questionario.
> fit <- lm(attitude~sex,data=X)
> anova(fit)

Analysis of Variance Table

Response: attitude
Df Sum Sq Mean Sq F value Pr(>F)
sex 1 8 8.00 14.6 0.00015 ***
Residuals 560 308 0.55
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

6. Si valuti graficamente l’assunto di omoschedasticità dei residui (si può utilizzare la


funzione rstandard() che calcola i residui di un modello lineare).
1.5
1.0


0.5

2.0 2.1 2.2 2.3 2.4 2.5

7. Si calcoli un opportuno indice di Effect Size.


> library(heplots)
> etasq(fit)

Partial eta^2
sex 0.02534
Residuals NA

8. Si stimi l’evidenza del risultato utilizzando la differenza tra valori di BIC.


> (BIC0 <- BIC(lm(attitude~1,data=X))) # ipotesi nulla

[1] 1284

> (BIC1 <- BIC(fit)) # ipotesi alternativa

[1] 1276

> exp((BIC0-BIC1)/2)

[1] 57.15
4 REGRESSIONE LINEARE SEMPLICE 78

9. Sulla base dei risultati ottenuti si traggano le conclusioni.

Esercizio 4.12

Nel file gestazioni.dat sono raccolti i valori di gestazione in settimane (variabile weeks)
di un campione di 328 donne che hanno partorito presso un ospedale. Per ciascuna donna
è indicata l’età in anni compiuti al momento del parto (variabile years). Le stesse età
sono poi raggruppate in due classi (variabile age): 25-30 e 40-47. Si ipotizza che vi siano
differenze nel numero medio di settimane di gestazione in relazione all’età.

1. Si importino i dati in R.
> X <- read.table(paste(datadir,"gestazioni.dat",sep=""),header=TRUE)

2. Si calcolino media e deviazione standard delle settimane di gestazione per le due


fasce di età.
> (mx <- tapply(X$weeks,list(X$age),mean))

25-30 40-47
39.06 38.45

> (sx <- tapply(X$weeks,list(X$age),sd))

25-30 40-47
1.498 2.088

3. Si producano in un unico layout un grafico a boxplot che rappresenti le distribuzioni


delle settimane di gestazione nelle due fasce di età e un grafico con le medie ed i
relativi intervalli di confidenza.
44
42

39.0
40

weeks
38

38.6
36

38.2
34

n=160 n=168

25-30 40-47 25-30 40-47

age

4. Si valuti se le settimane di gestazione abbiano una distribuzione normale nei due


gruppi di età utilizzando gli opportuni test statistici e grafici.
> ks.test(X$weeks[X$age=="25-30"],"pnorm",mx[1],sx[1])

One-sample Kolmogorov-Smirnov test


4 REGRESSIONE LINEARE SEMPLICE 79

data: X$weeks[X$age == "25-30"]


D = 0.031, p-value = 1
alternative hypothesis: two-sided

> ks.test(X$weeks[X$age=="40-47"],"pnorm",mx[2],sx[2])

One-sample Kolmogorov-Smirnov test

data: X$weeks[X$age == "40-47"]


D = 0.035, p-value = 1
alternative hypothesis: two-sided

25-30 40-47
Theoretical Quantiles

Theoretical Quantiles
2

2
1

1
0

0
-2
-2

36 38 40 42 34 36 38 40 42 44

Sample Quantiles Sample Quantiles

5. Si esegua il test opportuno per valutare se vi siano differenze tra le due fasce di età
nelle settimane di gestazione.
> fit1 <- lm(weeks~age,data=X)
> anova(fit1)

Analysis of Variance Table

Response: weeks
Df Sum Sq Mean Sq F value Pr(>F)
age 1 31 30.64 9.21 0.0026 **
Residuals 326 1085 3.33
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

6. Si calcoli il valore di η 2 per il test eseguito.


> etasq(fit1)

Partial eta^2
age 0.02747
Residuals NA

7. Si rappresenti graficamente la distribuzione delle età (in anni compiuti) e delle setti-
mane di gestazione in modo da evidenziare l’eventuale relazione tra queste variabili.
4 REGRESSIONE LINEARE SEMPLICE 80

44
42
settimane di gestazione

40
38
36
34

25 30 35 40 45

anni partoriente

8. Si valuti, con il modello opportuno, se la variabile years sia predittiva delle settimane
di gestazione.
> fit2 <- lm(weeks~years,data=X)
> anova(fit2)

Analysis of Variance Table

Response: weeks
Df Sum Sq Mean Sq F value Pr(>F)
years 1 29 29.21 8.77 0.0033 **
Residuals 326 1086 3.33
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

9. Si calcoli il valore di R2 del modello definito al punto 8 e lo si confronti con il valore


di η 2 relativo al modello del punto 5. Quali conclusioni si possono trarre?
> summary(fit2)$r.squared

[1] 0.02619

10. Si ripetano i test dei punti 6 e 10 utilizzando i ∆AIC . Quali conclusioni si possono
trarre da queste statistiche?
> ## modello nullo
> aic0 <- AIC(lm(weeks~1,data=X))
> ## modello 1: predittore dicotomico
> aic1 <- AIC(fit1)
> ## modello 2: predittore quantitativo
> aic2 <- AIC(fit2)
> exp((aic0-aic1)/2)

[1] 35.44

> exp((aic0-aic2)/2)

[1] 28.56
4 REGRESSIONE LINEARE SEMPLICE 81

Esercizio 4.13

Si vuole studiare l’effetto della deprivazione da sonno in un compito attentivo. Tale com-
pito consiste nell’ individuazione di un oggetto in movimento su uno schermo radar. 16
soggetti vengono suddivisi in quattro gruppi, ciascuno dei quali viene privato del sonno per
un certo numero di ore (4, 12, 20 e 28; variabile hr). I punteggi dei soggetti nel compito
(variabile score) sono espressi nel numero di mancate individuazioni durante un periodo
di 30 minuti e sono riportati nel file anova1.dat (dati Keppel, 1991). Si vuole sapere se
esista una differenza tra i punteggi nel compito in relazione alle ore di deprivazione da
sonno.
1. Si importi il file anova1.dat in R.
> X <- read.table(paste(datadir,"anova1.dat",sep=""),header=TRUE)

2. Si produca un grafico con le medie e le barre di errore dei punteggi per i quattro
gruppi (si usi la funzione errbarr, libreria Hmisc).
70
60
50
score

40
30

0 5 10 15 20 25 30

hr

3. Si valuti, con uno o più test opportuni, se le distribuzioni dei punteggi nei quattro
gruppi sono normali.
> ks.test(X$score[X$hr==4],"pnorm",mean(X$score[X$hr==4]),sd(X$score[X$hr==4]))

One-sample Kolmogorov-Smirnov test

data: X$score[X$hr == 4]
D = 0.33, p-value = 0.8
alternative hypothesis: two-sided

> ks.test(X$score[X$hr==12],"pnorm",mean(X$score[X$hr==12]),sd(X$score[X$hr==12]))

One-sample Kolmogorov-Smirnov test

data: X$score[X$hr == 12]


D = 0.25, p-value = 0.9
alternative hypothesis: two-sided

> ks.test(X$score[X$hr==20],"pnorm",mean(X$score[X$hr==20]),sd(X$score[X$hr==20]))
4 REGRESSIONE LINEARE SEMPLICE 82

One-sample Kolmogorov-Smirnov test

data: X$score[X$hr == 20]


D = 0.27, p-value = 0.9
alternative hypothesis: two-sided

> ks.test(X$score[X$hr==28],"pnorm",mean(X$score[X$hr==28]),sd(X$score[X$hr==28]))

One-sample Kolmogorov-Smirnov test

data: X$score[X$hr == 28]


D = 0.26, p-value = 0.9
alternative hypothesis: two-sided

4. Si valuti se le varianze dei gruppi sono omogenee.


> bartlett.test(score~hr,data=X)

Bartlett test of homogeneity of variances

data: score by hr
Bartlett's K-squared = 1.6, df = 3, p-value = 0.7

5. Si stabilisca, con il test opportuno, se le ore di deprivazione da sonno siano predittive


dei punteggi al compito definendo l’ipotesi H0 relativa al test.
> fit <- lm(score~hr,data=X)
> anova(fit)

Analysis of Variance Table

Response: score
Df Sum Sq Mean Sq F value Pr(>F)
hr 1 3150 3150 22.4 0.00032 ***
Residuals 14 1970 141
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

6. Si valuti la bontà del modello lineare valutando gli assunti sui residui.
Standardized residuals

Residuals vs Fitted Normal Q-Q


10 10
0 1 2
20
Residuals

0
-20

8 8
15
-2

15

30 40 50 60 -2 -1 0 1 2

Fitted values Theoretical Quantiles


Standardized residuals

Standardized residuals

Scale-Location Residuals vs Leverage


10 15 0.5
10
2
1.2

8
13
0
0.6

Cook’s distance
-2
0.0

15 0.5

30 40 50 60 0.00 0.05 0.10 0.15


4 REGRESSIONE LINEARE SEMPLICE 83

7. Si stimi la dimensione dell’effetto e lo si interpreti.


> summary(fit)$r.squared

[1] 0.6153

> summary(fit)$adj.r.squared

[1] 0.5878

8. Si stimi il Bayes Factor e lo si interpreti in relazione ai risultati ottenuti ai punti 5


e 7.
> lmBF(score~hr,data=X)

Bayes factor analysis


--------------
[1] hr : 72.49 ±0%

Against denominator:
Intercept only
---
Bayes factor type: BFlinearModel, JZS

Esercizio 4.14

Si vuole studiare l’effetto dell’affaticamento sul rendimento in una prova di precisione.


A questo scopo si contano il numero di errori commessi da un gruppo di 10 soggetti
in una prova di precisione. Dopo averli sottoposti ad un lavoro gravoso per un certo
periodo di tempo, si contano nuovamente gli errori commessi dai 10 soggetti nella stessa
prova di precisione. I punteggi riportati nel file precision.dat sono espressi in forma di
proporzione di risposte corrette sul totale. Si vuole sapere se il numero di errori commessi
prima dell’affaticamento sia predittivo del numero di errori commessi dopo l’affaticamento.

1. Si importi il file precision.dat in R.


> X <- read.table(paste(datadir,"precision.dat",sep=""),header=TRUE)

2. Si produca un grafico con i boxplot delle distribuzioni dei punteggi al test di preci-
sione nei due momenti.
4 REGRESSIONE LINEARE SEMPLICE 84

1.0
0.8
proporzione errori

0.6
0.4
0.2
0.0

1 2

prova

3. Si valuti, con uno o più test opportuni, se le distribuzioni dei punteggi nei due
momenti sono normali.
> ks.test(X$p.err[X$prova==1],"pnorm",mean(X$p.err[X$prova==1]),sd(X$p.err[X$prova==1]))

One-sample Kolmogorov-Smirnov test

data: X$p.err[X$prova == 1]
D = 0.13, p-value = 1
alternative hypothesis: two-sided

> ks.test(X$p.err[X$prova==2],"pnorm",mean(X$p.err[X$prova==2]),sd(X$p.err[X$prova==2]))

One-sample Kolmogorov-Smirnov test

data: X$p.err[X$prova == 2]
D = 0.21, p-value = 0.8
alternative hypothesis: two-sided

4. Si stimino i parametri β0 e β1 del modello di regressione ipotizzato e li si interpreti.

> (fit <- lm(X$p.err[X$prova==2]~X$p.err[X$prova==1]))

Call:
lm(formula = X$p.err[X$prova == 2] ~ X$p.err[X$prova == 1])

Coefficients:
(Intercept) X$p.err[X$prova == 1]
0.801 -0.025

5. Si individui la regione critica (anche graficamente) per rigettare l’ipotesi che β1 = 0.


4 REGRESSIONE LINEARE SEMPLICE 85

Regione critica: [t ≤ −2.306, t ≥ 2.306]

0.4
0.3
d(t|8)

0.2
0.1
0.0

-3 -2 -1 0 1 2 3

> ## regione critica rispetto a t


> gradi.lib <- 8
> (tcrit <- qt(.05/2,gradi.lib,lower.tail=FALSE)) # t critico

[1] 2.306

> ## regione critica rispetto a beta


> std.err <- summary(fit)$coefficients[2,2]
> tcrit*std.err # valore critico di beta

[1] 0.6163

> ## per valori stimati di beta maggiori o minori del valore critico
> ## rigettiamo H0

6. Si stimi la dimensione dell’effetto e la si interpreti.


> summary(fit)$r.squared

[1] 0.00109

7. Si stimi il Bayes Factor e lo si confronti con la dimensione dell’effetto ottenuta al


punto precedente.
> x1 <- X$p.err[X$prova==1]
> x2 <- X$p.err[X$prova==2]
> Y <- data.frame(x1,x2)
> lmBF(x2~x1,data=Y)

Bayes factor analysis


--------------
[1] x1 : 0.4937 ±0%

Against denominator:
Intercept only
---
Bayes factor type: BFlinearModel, JZS
4 REGRESSIONE LINEARE SEMPLICE 86

Esercizio 4.15

Ad un campione di 102 studenti vengono somministrate, a distanza di una settimana, due


versioni del Minnesota Multiphasic Personality Inventory (MMPI): una versione cartacea
(paper-and-pencil, PAP) ed una al computer (computer-administered, CA). Si vuole sapere
se vi siano differenze tra i due tipi di somministrazione. I dati sono nel file MMPI.dat.
1. Si importino i dati in R.
> X <- read.table(paste(datadir,"MMPI.dat",sep=""),header=TRUE)

2. Si calcolino media e deviazione standard dei punteggi al test con i due metodi di
somministrazione.
> apply(X,2,mean)

CA PAP
53.79 54.91

> apply(X,2,sd)

CA PAP
11.41 10.35

3. Si utilizzi l’opportuna rappresentazione grafica per valutare se i punteggi nelle due


modalità di somministrazione risultino associati.
80
70
60
50
PAP

40
30
20

30 40 50 60 70 80

CA

4. Si calcolino covarianza e correlazione tra i punteggi PAP e CA.


> cov(X$CA,X$PAP)

[1] 48.73

> cor(X$CA,X$PAP)

[1] 0.4128
4 REGRESSIONE LINEARE SEMPLICE 87

5. Si stabilisca con l’opportuno test se i punteggi in versione cartacea siano predittivi


di quelli in versione computerizzata.
> fit <- lm(PAP~CA,data=X)
> summary(fit)

Call:
lm(formula = PAP ~ CA, data = X)

Residuals:
Min 1Q Median 3Q Max
-31.50 -6.24 1.39 5.26 22.13

Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 34.7619 4.5440 7.65 1.3e-11 ***
CA 0.3746 0.0827 4.53 1.6e-05 ***
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 9.47 on 100 degrees of freedom


Multiple R-squared: 0.17,Adjusted R-squared: 0.162
F-statistic: 20.5 on 1 and 100 DF, p-value: 1.62e-05

6. Si determini il Bayes Factor del modello.


> lmBF(PAP~CA,data=X)

Bayes factor analysis


--------------
[1] CA : 1117 ±0.01%

Against denominator:
Intercept only
---
Bayes factor type: BFlinearModel, JZS

7. Si utilizzi l’opportuna rappresentazione grafica per confrontare le distribuzioni dei


punteggi nelle due somministrazioni.
80
70
60
50
40
30
20

CA PAP
4 REGRESSIONE LINEARE SEMPLICE 88

8. Si valuti, con l’opportuno test, se esiste una differenza significativa tra le medie dei
punteggi PAP e CA, definendo opportunamente le ipotesi H0 e H1 .
> summary(lm((PAP-CA)~1,data=X))

Call:
lm(formula = (PAP - CA) ~ 1, data = X)

Residuals:
Min 1Q Median 3Q Max
-35.12 -8.87 0.88 6.88 28.88

Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 1.12 1.17 0.95 0.34

Residual standard error: 11.8 on 101 degrees of freedom

Esercizio 4.16

Per valutare se bambini con esperienze sociali più ricche siano anche più capaci di parla-
re delle proprie esperienze relazionali viene predisposto un esperimento che coinvolge un
campione di bambini di età intorno ai 5 anni. Durante le sessioni sperimentali i bambini
vengono osservati ed al termine viene attribuito loro un livello di esperienza sociale in una
scala a 5 categorie, definite sulla base delle azioni sociali agite e ricevute: presenti (alto nu-
mero di agite e ricevute), assenti (basso numero di agite e ricevute), cercatori (alto numero
di agite e basso di ricevute), cercati (basso numero di agite e alto di ricevute) e medi. Per
la valutazione della capacità di descrivere le esperienze relazionali viene calcolato un pun-
teggio di competenza linguistica. I dati sono disponibili nel file relbambini.dat. Si vuole
sapere se vi sia una relazione tra il comportamento sociale e le competenze linguistiche.
1. Si importino i dati in R.
> X <- read.table(paste(datadir,"relbambini.dat",sep=""),header=TRUE)

2. Si calcolino le numerosità, medie e deviazioni standard dei punteggi di competenza


linguistica (variabile comp.ling) per ciascuno dei 5 gruppi definiti dalla scala di
comportamento sociale (variabile cat.comp).
> tapply(X$comp.ling,list(X$cat.comp),length)

assenti cercati cercatori medi presenti


14 11 11 35 10

> tapply(X$comp.ling,list(X$cat.comp),mean)

assenti cercati cercatori medi presenti


10.768 9.846 13.574 12.427 15.170

> tapply(X$comp.ling,list(X$cat.comp),sd)

assenti cercati cercatori medi presenti


6.230 3.602 3.024 3.474 5.115
4 REGRESSIONE LINEARE SEMPLICE 89

3. Si produca il grafico delle medie di comp.ling con relativi intervalli di confidenza.

18
competenze linguistiche

16
14
12
10
8

assenti cercati cercatori medi presenti

categoria di comportamento

4. Si utilizzino gli opportuni test e grafici per valutare l’assunto di normalità comples-
sivamente ed in ciascun gruppo di bambini.
> shapiro.test(X$comp.ling)

Shapiro-Wilk normality test

data: X$comp.ling
W = 0.98, p-value = 0.3

> shapiro.test(X$comp.ling[X$cat.comp=="assenti"])

Shapiro-Wilk normality test

data: X$comp.ling[X$cat.comp == "assenti"]


W = 0.92, p-value = 0.2

> shapiro.test(X$comp.ling[X$cat.comp=="cercati"])

Shapiro-Wilk normality test

data: X$comp.ling[X$cat.comp == "cercati"]


W = 0.96, p-value = 0.7

> shapiro.test(X$comp.ling[X$cat.comp=="cercatori"])

Shapiro-Wilk normality test

data: X$comp.ling[X$cat.comp == "cercatori"]


W = 0.95, p-value = 0.6

> shapiro.test(X$comp.ling[X$cat.comp=="medi"])
4 REGRESSIONE LINEARE SEMPLICE 90

Shapiro-Wilk normality test

data: X$comp.ling[X$cat.comp == "medi"]


W = 0.96, p-value = 0.3

> shapiro.test(X$comp.ling[X$cat.comp=="presenti"])

Shapiro-Wilk normality test

data: X$comp.ling[X$cat.comp == "presenti"]


W = 0.96, p-value = 0.8

tutti assenti cercati


Sample Quantiles

Sample Quantiles
20
20

12
10
10

8
4
0

-2 0 1 2 -1 0 1 -1.5 0.0 1.0


cercatori medi presenti
Sample Quantiles

Theoretical Quantiles Theoretical Quantiles Sample Quantiles Theoretical Quantiles


18

16

15
14

6 10
10

-1.5 0.0 1.0 -2 -1 0 1 2 -1.5 -0.5 0.5 1.5

5. Si esegua il test appropriato per valutare se esistano differenze tra le medie dei 5
gruppi.
> fit <- lm(comp.ling~cat.comp,data=X)
> anova(fit)

Analysis of Variance Table

Response: comp.ling
Df Sum Sq Mean Sq F value Pr(>F)
cat.comp 4 200 50 2.77 0.033 *
Residuals 76 1371 18
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

6. Si utilizzino gli opportuni test grafici per valutare l’assunto di indipendenza e di


omoschedasticità dei residui.
> haty <- fitted(fit) # valori attesi
> r <- resid(fit) # residui
> rs <- rstandard(fit) #residui standardizzati
4 REGRESSIONE LINEARE SEMPLICE 91

indipendenza omoschedasticità

1.4
5

1.0
0

s


0.6
-5

0.2
-10

10 11 12 13 14 15 10 11 12 13 14 15

ŷ ŷ

7. Si calcoli la dimensione dell’effetto relativa al modello eseguito al punto 5.


> etasq(fit)

Partial eta^2
cat.comp 0.1272
Residuals NA

8. Si calcoli il Bayes Factor e lo si interpreti confrontandolo con i risultati ottenuti ai


punti 5 e 7.
> lmBF(comp.ling~cat.comp,data=X)

Bayes factor analysis


--------------
[1] cat.comp : 1.351 ±0%

Against denominator:
Intercept only
---
Bayes factor type: BFlinearModel, JZS

Esercizio 4.17

Ad un campione di 15 bambini viene presentata una serie di problemi di ragionamento. I


bambini sono divisi in tre gruppi di cinque soggetti ciascuno: ai bambini del primo gruppo
viene dato un rinforzo positivo ad ogni risposta corretta, ai soggetti del secondo gruppo
viene dato un rinforzo negativo ad ogni risposta errata, il terzo gruppo non riceve nessun
tipo di rinforzo. Nel file anova4.dat sono riportati i punteggi ottenuti dai bambini. Si
vuole sapere se i diversi tipi di rinforzo abbiano effetto sulle prove di ragionamento.

1. Si importi il file anova4.dat in R.


> X <- read.table(file.choose(),header=TRUE)

2. Si rappresentino graficamente le distribuzioni dei punteggi dei tre gruppi separata-


mente (si può usare la funzione boxplot).
4 REGRESSIONE LINEARE SEMPLICE 92

10
8
6
4
2

- + 0

3. Si rappresentino graficamente le medie dei tre gruppi con i relativi intervalli di


confidenza.
10
8
risp

6
4
2

- + 0

rinforzo

4. Si esegua l’analisi appropriata per valutare se il tipo di rinforzo influisca sui punteggi
nelle prove di ragionamento, specificando l’ipotesi H0 .
> fit <- lm(risp~rinforzo,data=X)
> anova(fit)

Analysis of Variance Table

Response: risp
Df Sum Sq Mean Sq F value Pr(>F)
rinforzo 2 30.4 15.2 4.22 0.041 *
Residuals 12 43.2 3.6
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

5. Si valuti se i residui del modello abbiano una distribuzione approssimativamente


normale.
4 REGRESSIONE LINEARE SEMPLICE 93

Normal Q-Q Plot

2
Sample Quantiles

1
0
-1
-2
-3

-1 0 1

Theoretical Quantiles

Esercizio 4.18

Nel file radar.csv sono presenti gli stessi dati dell’esperimento descritto nell’esercizio 4.13
con l’aggiunta di otto soggetti.
1. Si importi il file radar.csv in R.
> X <- read.csv2(paste(datadir,"radar.csv",sep=""))

2. Utilizzando la funzione aggregate, si produca la tabella con le medie dei punteggi


nei quattro gruppi.
> aggregate(X$score,list(hr=X$hr),mean)

hr x
1 4 37.67
2 12 37.83
3 20 53.00
4 28 61.50

3. Si rappresenti graficamente la distribuzione delle medie (con relativo intervallo di


confidenza) in funzione delle ore di deprivazione da sonno.
70
60
50
score

40
30
20
10

4 12 20 28

hr
4 REGRESSIONE LINEARE SEMPLICE 94

4. Si valuti, con uno o più test opportuni, se le distribuzioni dei punteggi nei quattro
gruppi sono normali.
> ks.test(X$score[X$hr==4],"pnorm",mean(X$score[X$hr==4]),sd(X$score[X$hr==4]))

One-sample Kolmogorov-Smirnov test

data: X$score[X$hr == 4]
D = 0.34, p-value = 0.5
alternative hypothesis: two-sided

> ks.test(X$score[X$hr==12],"pnorm",mean(X$score[X$hr==12]),sd(X$score[X$hr==12]))

One-sample Kolmogorov-Smirnov test

data: X$score[X$hr == 12]


D = 0.25, p-value = 0.8
alternative hypothesis: two-sided

> ks.test(X$score[X$hr==20],"pnorm",mean(X$score[X$hr==20]),sd(X$score[X$hr==20]))

One-sample Kolmogorov-Smirnov test

data: X$score[X$hr == 20]


D = 0.36, p-value = 0.4
alternative hypothesis: two-sided

> ks.test(X$score[X$hr==28],"pnorm",mean(X$score[X$hr==28]),sd(X$score[X$hr==28]))

One-sample Kolmogorov-Smirnov test

data: X$score[X$hr == 28]


D = 0.21, p-value = 0.9
alternative hypothesis: two-sided

5. Si valuti se le varianze dei gruppi sono omogenee.


> bartlett.test(score~hr,data=X)

Bartlett test of homogeneity of variances

data: score by hr
Bartlett's K-squared = 8.3, df = 3, p-value = 0.04

6. Si stabilisca, con il modello opportuno, se vi sia una relazione tra le ore di depri-
vazione ed il punteggio al compito definendo l’ipotesi H0 relativa al test eseguito.

> fit <- lm(score~hr,data=X)


> anova(fit)

Analysis of Variance Table

Response: score
Df Sum Sq Mean Sq F value Pr(>F)
4 REGRESSIONE LINEARE SEMPLICE 95

hr 1 2253 2253 7.91 0.01 *


Residuals 22 6269 285
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

7. Si valuti la bontà del modello analizzando opportunamente i residui.

Residuals vs Fitted Normal Q-Q

Standardized residuals
6 6

1 2 3 4
60
Residuals

14
20

14
-20

10

-1
10

35 40 45 50 55 60 -2 -1 0 1 2

Fitted values Theoretical Quantiles


Scale-Location Residuals vs Leverage
Standardized residuals

Standardized residuals
2.0

6
6

1 2 3 4
1
0.5
10 14
1.0

19

Cook’s distance
-1
21
0.0

35 40 45 50 55 60 0.00 0.02 0.04 0.06 0.08 0.10 0.12

8. Si stimi la dimensione dell’effetto e lo si interpreti.


> summary(fit)$r.squared # eta quadro

[1] 0.2644

9. Si confrontino i risultati con quelli ottenuti nell’esercizio 4.13.

Esercizio 4.19

Un ricercatore vuole sapere se vi siano differenze nell’atteggiamento verso l’attività extra-


domestica tra le donne sposate con figli e quelle senza figli. Allo scopo somministra una
scala di atteggiamento a due campioni casuali di donne coniugate, di cui n1 = 45 con figli
e n2 = 36 senza figli (i dati sono riportati nel file donne.dat). Si vuole sapere se vi siano
differenze di atteggiamento tra le donne con figli e quelle senza.
1. Si importi il file donne.dat in R.
> X <- read.table(paste(datadir,"donne.dat",sep=""),header=TRUE)

2. Si calcolino i quartili della variabile atteggiamento separatamente per i due gruppi.


> tapply(X$attegg,list(X$figli),quantile,c(.25,.5,.75))

$no
25% 50% 75%
68.5 76.0 82.0

$si
25% 50% 75%
63 69 74
4 REGRESSIONE LINEARE SEMPLICE 96

3. Si produca un grafico a scatole con le distribuzioni dei punteggi di atteggiamento


per le donne con figli e senza separatamente.

90
80
70
60
50

no si

4. Si valuti, con il test opportuno, se le varianze dei punteggi nei due gruppi siano
omogenee.
> bartlett.test(attegg~figli,data=X)

Bartlett test of homogeneity of variances

data: attegg by figli


Bartlett's K-squared = 0.2, df = 1, p-value = 0.7

5. Si valuti, con il modello opportuno, se vi siano differenze tra i due gruppi in relazione
ai punteggi di atteggiamento, specificando le ipotesi H0 e H1 .
> fit <- lm(attegg~figli,data=X)
> anova(fit)

Analysis of Variance Table

Response: attegg
Df Sum Sq Mean Sq F value Pr(>F)
figli 1 1059 1059 12.6 0.00066 ***
Residuals 79 6659 84
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

6. Si stimi l’Effect Size.


> summary(fit)$r.squared # eta quadro

[1] 0.1372

7. Si calcolino il valore di ∆AIC e ∆BIC con i relativi valori di evidenza, interpretandoli


e confrontando il risultato con quello ottenuto al punto 5.
> (A0 <- AIC(lm(attegg~1,data=X)))

[1] 603
4 REGRESSIONE LINEARE SEMPLICE 97

> (A1 <- AIC(fit))

[1] 593

> exp((A0-A1)/2)

[1] 145.3

> (B0 <- BIC(lm(attegg~1,data=X)))

[1] 607.8

> (B1 <- BIC(fit))

[1] 600.2

> exp((B0-B1)/2)

[1] 43.87

Esercizio 4.20

Nel file orevoti.csv sono riportate le ore di frequenza ed il voto di 37 studenti partecipanti
ad un corso di statistica. Vogliamo sapere se le ore di frequenza siano predittive del voto.
1. Si importi il file orevoti.csv in R.
> X <- read.csv2(paste(datadir,"orevoti.csv",sep=""))

2. Si produca il grafico a dispersione dei voti in funzione delle ore di frequenza.


30
25
20
voto

15
10

0 5 10 15 20 25 30

ore di frequenza

3. Si calcolino covarianza e correlazione tra le due variabili.


> cov(X$ore,X$voto)

[1] 29.06
4 REGRESSIONE LINEARE SEMPLICE 98

> cor(X$ore,X$voto)

[1] 0.6061

4. Si determini, con il test statistico opportuno, se le ore di frequenza sono predittive


del voto.
> fit <- lm(voto~ore,data=X)
> summary(fit)

Call:
lm(formula = voto ~ ore, data = X)

Residuals:
Min 1Q Median 3Q Max
-12.18 -2.29 0.97 2.89 6.97

Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 14.8713 2.0989 7.09 3e-08 ***
ore 0.4079 0.0905 4.51 7e-05 ***
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 4.58 on 35 degrees of freedom


Multiple R-squared: 0.367,Adjusted R-squared: 0.349
F-statistic: 20.3 on 1 and 35 DF, p-value: 7.02e-05

5. Si individui un appropriato indice di effect size e lo si interpreti.


> summary(fit)$r.squared

[1] 0.3673

6. Si aggiunga al grafico la retta di regressione teorica.


30
25
20
voto

15
10

0 5 10 15 20 25 30

ore di frequenza

7. Si determinino devianza di regressione e devianza residua del modello.


> anova(fit)[,2]

[1] 426.8 735.0


4 REGRESSIONE LINEARE SEMPLICE 99

8. Si calcoli il Bayes Factor e lo si confronti con i risultati dei punti 4 e 5.


> lmBF(voto~ore,data=X)

Bayes factor analysis


--------------
[1] ore : 291 ±0%

Against denominator:
Intercept only
---
Bayes factor type: BFlinearModel, JZS

Esercizio 4.21

Ad un campione di 20 soggetti di varie età con un particolare deficit di memoria viene


somministrato un test per la valutazione delle capacità di memoria, più sono alti i punteggi
migliori sono le prestazioni (i dati sono raccolti nel file memory.dat). Vogliamo sapere se
l’età sia predittiva del deficit in questione.
1. Si importi il file memory.dat in R.
> X <- read.table(paste(datadir,"memory.dat",sep=""),header=TRUE)

2. Si produca un grafico in due parti con gli istogrammi della distribuzione dei punteggi
e delle età dei soggetti.
6

6
5

5
4

4
Frequency

Frequency
3

3
2

2
1

1
0

34 38 42 46 20 30 40 50 60 70 80

punteggi età

3. Si valuti, con un test opportuno, se la distribuzione dei punteggi si possa considerare


normale.
> ks.test(X$punteggi,"pnorm",mean(X$punteggi),sd(X$punteggi))

One-sample Kolmogorov-Smirnov test

data: X$punteggi
D = 0.16, p-value = 0.7
alternative hypothesis: two-sided
4 REGRESSIONE LINEARE SEMPLICE 100

4. Si produca un grafico a dispersione con i punteggi in funzione dell’età. Dalla lettura


di questo grafico è ragionevole ipotizzare una relazione lineare tra le due variabili?

46
44
punteggi

42
40
38
36

30 40 50 60 70 80

età

5. Si produca un grafico che riporti in ascissa i percentili della variabile età ed in ordi-
nata i percentili dei punteggi. Dalla lettura di questo grafico è ragionevole ipotizzare
una relazione lineare tra le due variabili?
46
44
punteggi

42
40
38
36

30 40 50 60 70 80

età

6. Si valuti, con un test opportuno, se l’età sia predittiva dei punteggi al test.
> summary(lm(punteggi~eta,data=X))

Call:
lm(formula = punteggi ~ eta, data = X)

Residuals:
Min 1Q Median 3Q Max
-7.269 -1.815 0.386 2.948 3.991

Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 45.3303 2.6509 17.10 1.4e-12 ***
eta -0.0494 0.0454 -1.09 0.29
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 3.17 on 18 degrees of freedom


Multiple R-squared: 0.0618,Adjusted R-squared: 0.00963
F-statistic: 1.18 on 1 and 18 DF, p-value: 0.291
4 REGRESSIONE LINEARE SEMPLICE 101

Esercizio 4.22

Il file impiegati.sav contiene dati relativi ad un campione di 474 impiegati di banca. Le


variabili considerate sono le seguenti: id = codice identificativo dell’impiegato; sesso =
sesso dell’impiegato; istruz = livello di istruzione (in anni di studio); catlav = categoria
lavorativa; stipatt = stipendio percepito; stipiniz = stipendio iniziale percepito al
momento dell’assunzione.
1. Si apra il file impiegati.sav in R.
> X <- read.spss(paste(datadir,"impiegati.sav",sep=""),to.data.frame=TRUE)

2. Si producano le opportune statistiche per descrivere le variabili presenti nel data-set.

> summary(X[,-1])

sesso istruz catlav stipatt stipiniz


Femmina:216 12 :190 Impiegato :363 Min. : 15750 Min. : 9000
Maschio:258 15 :116 Funzionario: 27 1st Qu.: 24000 1st Qu.:12488
16 : 59 Dirigente : 84 Median : 28875 Median :15000
8 : 53 Mean : 34420 Mean :17016
19 : 27 3rd Qu.: 36938 3rd Qu.:17490
17 : 11 Max. :135000 Max. :79980
(Other): 18

3. Si valuti, con il test opportuno, se il campione si possa considerare rappresentativo


di una popolazione (di impiegati di banca) che percepisce come stipendio medio una
somma pari a 37.000.
> summary(lm((37000-stipatt)~1,data=X))

Call:
lm(formula = (37000 - stipatt) ~ 1, data = X)

Residuals:
Min 1Q Median 3Q Max
-100580 -2518 5545 10420 18670

Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 2580 784 3.29 0.0011 **
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 17100 on 473 degrees of freedom

4. Si individui graficamente la regione critica del test eseguito al punto precedente.


4 REGRESSIONE LINEARE SEMPLICE 102

4e-04
2e-04
0e+00
S ≤ 35459 S ≥ 38541

34000 36000 38000 40000

stipendi
5. Si valuti, con il test opportuno, se vi siano differenze significative tra maschi e
femmine in relazione allo stipendio percepito.
> fit1 <- lm(stipatt~sesso,data=X)
> anova(fit1)

Analysis of Variance Table

Response: stipatt
Df Sum Sq Mean Sq F value Pr(>F)
sesso 1 2.79e+10 2.79e+10 120 <2e-16 ***
Residuals 472 1.10e+11 2.33e+08
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

6. Si calcoli la dimensione dell’effetto nel test eseguito al punto precedente e la si


interpreti.
> etasq(fit1)

Partial eta^2
sesso 0.2024
Residuals NA

7. Si valuti, con il test opportuno, lo stipendio iniziale al momento dell’assunzione sia


predittivo di quello percepito.
> fit2 <- lm(stipatt~stipiniz,data=X)
> summary(fit2)

Call:
lm(formula = stipatt ~ stipiniz, data = X)

Residuals:
Min 1Q Median 3Q Max
-35424 -4031 -1154 2584 49293

Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 1.93e+03 8.89e+02 2.17 0.031 *
stipiniz 1.91e+00 4.74e-02 40.28 <2e-16 ***
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 8120 on 472 degrees of freedom


Multiple R-squared: 0.775,Adjusted R-squared: 0.774
F-statistic: 1.62e+03 on 1 and 472 DF, p-value: <2e-16
4 REGRESSIONE LINEARE SEMPLICE 103

8. Si valuti se esistano differenze significative tra le medie degli stipendi percepiti in


funzione della categoria lavorativa, controllando opportunamente gli assunti per il
test statistico da eseguire.
> ks.test(X$stipatt,"pnorm",mean(X$stipatt),sd(X$stipatt))

One-sample Kolmogorov-Smirnov test

data: X$stipatt
D = 0.21, p-value <2e-16
alternative hypothesis: two-sided

> bartlett.test(stipatt~catlav,data=X)

Bartlett test of homogeneity of variances

data: stipatt by catlav


Bartlett's K-squared = 190, df = 2, p-value <2e-16

> fit3 <- lm(stipatt~catlav,data=X)


> anova(fit3)

Analysis of Variance Table

Response: stipatt
Df Sum Sq Mean Sq F value Pr(>F)
catlav 2 8.94e+10 4.47e+10 434 <2e-16 ***
Residuals 471 4.85e+10 1.03e+08
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

9. Si calcoli un indice di effect size per il test eseguito al punto precedente e lo si


interpreti.
> etasq(fit3)

Partial eta^2
catlav 0.6485
Residuals NA

10. Si ripetano i test dei punti 5, 7 e 8 utilizzando ∆BIC e Bayes Factor, confrontando
i risultati con quelli ottenuti precedentemente.
> B0 <- BIC(lm(stipatt~1,data=X))
> B1 <- BIC(fit1)
> exp((B0-B1)/2)

[1] 8.77e+21

> B2 <- BIC(fit2)


> exp((B0-B2)/2)

[1] 1.035e+152

> B3 <- BIC(fit3)


> exp((B0-B3)/2)

[1] 8.693e+104
4 REGRESSIONE LINEARE SEMPLICE 104

> lmBF(stipatt~sesso,data=X)

Bayes factor analysis


--------------
[1] sesso : 5.899e+21 ±0%

Against denominator:
Intercept only
---
Bayes factor type: BFlinearModel, JZS

> lmBF(stipatt~stipiniz,data=X)

Bayes factor analysis


--------------
[1] stipiniz : 3.923e+150 ±0.01%

Against denominator:
Intercept only
---
Bayes factor type: BFlinearModel, JZS

> lmBF(stipatt~catlav,data=X)

Bayes factor analysis


--------------
[1] catlav : 7.464e+103 ±0%

Against denominator:
Intercept only
---
Bayes factor type: BFlinearModel, JZS
5 REGRESSIONE LINEARE MULTIPLA 105

5 REGRESSIONE LINEARE MULTIPLA

Esercizio 5.1

Consideriamo un esperimento sulle capacità di apprendimento delle scimmie in relazione


al tempo di deprivazione da cibo e l’assunzione di determinati farmaci. 24 animali vengono
sottoposti ad una serie di problemi di identificazione di oggetti e vengono ricompensati
con del cibo quando rispondono correttamente. La V.D. è rappresentata dal numero di
risposte corrette su 20 tentativi (variabile score). I predittori sono il tipo di farmaco (X,
Y e nessuno; variabile drug) e il tempo di deprivazione da cibo (1 e 24 ore; variabile fdep).
I dati sono contenuti nel file anova2.dat (Keppel, 1991). Si vuole sapere se esista una
differenza nel numero di risposte corrette in funzione del farmaco assunto, del periodo di
deprivazione da cibo e se vi sia un’interazione tra le due variabili.

1. Si importi il file anova2.dat in R.


> X <- read.table(file.choose(),header=TRUE)

2. Si calcolino media e deviazione standard del numero di risposte corrette in relazione


alla variabile drug, alla variabile fdep e all’interazione tra le due (si può usare la
funzione aggregate).
> my <- aggregate(X$score,list(X$drug,X$fdep),mean)
> sy <- aggregate(X$score,list(X$drug,X$fdep),sd)
> W <- cbind(my,round(sy$x,3))
> colnames(W) <- c("drug","fdep","medie","ds")
> W

drug fdep medie ds


1 c 1 3 3.162
2 x 1 10 4.761
3 y 1 14 3.916
4 c 24 11 3.916
5 x 24 12 5.477
6 y 24 10 4.082

3. Si rappresentino graficamente le medie delle interazioni tra drug e fdep inserendo


anche le barre di errore (si usi la funzione errbarr(), pacchetto Hmisc).
15
risposte corrette

10
5

c x y

tipo di farmaco

4. Si valuti se le varianze dei 6 gruppi sono omogenee (quali sono i sei gruppi?).
5 REGRESSIONE LINEARE MULTIPLA 106

> X$drugfdep <- paste(X$drug,X$fdep,sep="")


> bartlett.test(score~drugfdep,data=X)

Bartlett test of homogeneity of variances

data: score by drugfdep


Bartlett's K-squared = 0.94, df = 5, p-value = 1

5. Si stabilisca, con il test opportuno, se vi siano differenze nel numero di risposte


corrette in funzione delle variabili drug, fdep e dell’interazione tra di esse definendo
le ipotesi H0 relative ai vari test.
> (A <- anova(lm(score~drug*fdep,data=X)))

Analysis of Variance Table

Response: score
Df Sum Sq Mean Sq F value Pr(>F)
drug 2 112 56.0 3.05 0.072 .
fdep 1 24 24.0 1.31 0.268
drug:fdep 2 144 72.0 3.93 0.038 *
Residuals 18 330 18.3
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

6. Si stimino le dimensioni degli effetti (η 2 parziali) con la funzione partial.eta2()


del pacchetto ADati oppure con la funzione etasq() del pacchetto heplots e le si
interpreti.
> ## con ADati
> library(ADati)
> partial.eta2(A[1:3,2],A[4,2],rownames(A)[1:3])

drug fdep drug:fdep


0.2534 0.0678 0.3038

> ## con heplots


> library(heplots)
> etasq(lm(score~drug*fdep,data=X))

Partial eta^2
drug 0.2534
fdep 0.0678
drug:fdep 0.3038
Residuals NA

7. Si determini, utilizzando il BIC, se il modello con interazione sia meglio di quello


senza interazione.
> M0 <- lm(score~drug+fdep,data=X) # modello additivo
> M1 <- lm(score~drug*fdep,data=X) # modello di interazione
> BIC(M0)

[1] 155.6

> BIC(M1)

[1] 153.3
5 REGRESSIONE LINEARE MULTIPLA 107

Esercizio 5.2

Il file testingresso.sav contiene dei dati relativi ad un campione di studenti universitari


che hanno effettuato un test di ingresso. Per ciascuno studente sono riportati la matricola
(variabile matricol), l’anno di corso (an_corso), il sesso (sex), il tipo di diploma di
scuola superiore (codmat), il voto di diploma(votodip), il voto medio ottenuto negli esami
sostenuto (media), il numero di esami sostenuti (n_es) ed il punteggio al test di ingresso
(tottest). Si vuole sapere se il test di ingresso possa essere considerato predittivo della
prestazione degli studenti in termini di numero e media degli esami.
1. Si importi il file testingresso.sav in R.
> X <- read.spss(paste(datadir,"testingresso.sav",sep=""),to.data.frame=TRUE)

2. Si eliminino dal data-frame i soggetti con zero esami.


> X <- subset(X,X$n_es>0)

3. Si produca un grafico in quattro parti con la rappresentazione delle medie, con


relativo intervallo di confidenza, suddivise per anno di corso e sesso delle seguenti
variabili: votodip, media, n_es e tottest.
votodip media
48 50 52 54

24.0
media

23.0

2maschi 2femmine 2maschi 2femmine


n es tottest
9 10

85
tottest
8

75
7
6

65

2maschi 2femmine 2maschi 2femmine

4. Si crei una variabile prestazione ottenuta con la seguente formula


media × n es
prestazione =
30 × max(n es)

> X$prestazione <- (X$media*X$n_es)/(30*max(X$n_es))

5. Si calcolino i decili della variabile creata al punto precedente.


> quantile(X$prestazione,seq(.1,.9,.1),na.rm=TRUE)

10% 20% 30% 40% 50% 60% 70% 80% 90%


0.1933 0.2795 0.3381 0.3833 0.4143 0.4457 0.5057 0.6076 0.7038
5 REGRESSIONE LINEARE MULTIPLA 108

6. Si produca un grafico in tre parti con istogramma, boxplot e qqplot della variabile
prestazione.

Normal Q-Q Plot

100

0.8

0.8
80

Sample Quantiles
Frequency

0.6

0.6
60

0.4

0.4
40
20

0.2

0.2
0

0.0 0.4 0.8 -3 -1 1 3

prestazione Theoretical Quantiles

7. Si producano la matrice di covarianza e di correlazione tra le variabili votodip,


tottest e prestazione.
> cov(X[,c("votodip","tottest","prestazione")])

votodip tottest prestazione


votodip 38.8155 -34.9107 0.3073
tottest -34.9107 148.0499 0.5399
prestazione 0.3073 0.5399 0.0362

> cor(X[,c("votodip","tottest","prestazione")])

votodip tottest prestazione


votodip 1.0000 -0.4605 0.2592
tottest -0.4605 1.0000 0.2332
prestazione 0.2592 0.2332 1.0000

8. Si produca un grafico in due parti con la distribuzione dei punteggi della variabile
prestazione in funzione delle variabili votodip e tottest.
0.8

0.8
prestazione

prestazione
0.6

0.6
0.4

0.4
0.2

0.2

40 45 50 55 60 50 60 70 80 90

voto diploma totale test

9. Si determini, con un opportuno modello, se le variabili votodip e tottest siano


predittive della variabile prestazione.
5 REGRESSIONE LINEARE MULTIPLA 109

> fit <- lm(prestazione~votodip*tottest,data=X)


> summary(fit)

Call:
lm(formula = prestazione ~ votodip * tottest, data = X)

Residuals:
Min 1Q Median 3Q Max
-0.6728 -0.0968 0.0020 0.0947 0.4559

Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -0.212993 0.484950 -0.44 0.66
votodip 0.002759 0.008941 0.31 0.76
tottest -0.000592 0.005894 -0.10 0.92
votodip:tottest 0.000143 0.000110 1.30 0.19

Residual standard error: 0.168 on 429 degrees of freedom


Multiple R-squared: 0.228,Adjusted R-squared: 0.223
F-statistic: 42.2 on 3 and 429 DF, p-value: <2e-16

10. Si valuti la bontà del modello analizzando opportunamente i residui.


Standardized residuals

Residuals vs Fitted Normal Q-Q


0.4

2
Residuals

0
-0.2

117 172 172


117
-0.8

23
-4

23

0.3 0.4 0.5 0.6 0.7 0.8 -3 -2 -1 0 1 2 3

Fitted values Theoretical Quantiles


Standardized residuals

Standardized residuals

Scale-Location Residuals vs Leverage


2.0

23
117 172
0 2
1.0

150
Cook’s
172 distance
-4
0.0

23

0.3 0.4 0.5 0.6 0.7 0.8 0.00 0.02 0.04

Esercizio 5.3

Nel file metodo.sav sono riportati i punteggi ottenuti da 20 studenti in una prova sostenuta
alla fine di un corso. Gli studenti sono stati suddivisi in quattro gruppi, in ciascuno dei
quali il corso è stato impostato diversamente nel metodo (lezione o discussione) e nella
durata delle sessioni (30 o 50 minuti). Si cuole sapere se il metodo e la durata hanno
influito sui punteggi ottenuti dagli studenti nella prova di fine corso.
1. Si importi il file metodo.sav in R.
> X <- read.spss(paste(datadir,"metodo.sav",sep=""),to.data.frame=TRUE)

2. Si calcolino la media generale e la varianza della variabile punteggi.


5 REGRESSIONE LINEARE MULTIPLA 110

> mean(X$punteggi)

[1] 11.25

> var(X$punteggi)

[1] 6.513

3. Si calcolino le quattro medie e relative varianze della variabile punteggi in funzione


delle variabili metodo e durata e si riportino opportunamente in una tabella.
> medie <- aggregate(X$punteggi,list(X$metodo,X$durata),mean)
> ds <- aggregate(X$punteggi,list(X$metodo,X$durata),sd)$x
> medie <- cbind(medie,round(ds,3))
> colnames(medie) <- c("metodo","durata","media","ds")
> medie

metodo durata media ds


1 Lezione 30 9.8 1.483
2 Discussione 30 10.0 1.414
3 Lezione 50 10.8 1.643
4 Discussione 50 14.4 2.608

4. Si produca il grafico delle medie, con relativi intervalli di confidenza, della variabile
punteggi in funzione delle variabili metodo e durata.

Lezione
30

Discussione
20
punteggi

10
0

30 50

durata

5. Determinare, con un opportuno test statistico, se vi sia una influenza delle variabili
metodo e durata sulla variabile punteggi.
> fit <- lm(punteggi~metodo*durata,data=X)
> anova(fit)

Analysis of Variance Table

Response: punteggi
Df Sum Sq Mean Sq F value Pr(>F)
metodo 1 18.0 18.0 5.27 0.0355 *
durata 1 36.5 36.5 10.64 0.0049 **
metodo:durata 1 14.5 14.5 4.22 0.0567 .
Residuals 16 54.8 3.4
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
5 REGRESSIONE LINEARE MULTIPLA 111

6. Si stimi la dimensione degli effetti usando η 2 parziale.


> etasq(fit)

Partial eta^2
metodo 0.2478
durata 0.3995
metodo:durata 0.2087
Residuals NA

7. Si determini con il Bayes Factor l’evidenza relativa dell’interazione tra le variabili


metodo e durata e si commenti il risultato confrontandolo con quelli ottenuti ai
punti 5 e 6.
> BF1 <- lmBF(punteggi~metodo+durata,data=X)
> BF2 <- lmBF(punteggi~metodo*durata,data=X)
> BF2/BF1

Bayes factor analysis


--------------
[1] metodo * durata : 1.642 ±1.07%

Against denominator:
punteggi ~ metodo + durata
---
Bayes factor type: BFlinearModel, JZS

Esercizio 5.4

In uno studio sull’utilizzo di un particolare servizio sociale disponibile su internet in re-


lazione al grado di estroversione sono selezionati 100 studenti, 50 dei quali sono membri
di un gruppo on-line e 50 no (variabile member). Ai soggetti viene somministrato l’EPQ
(Eysenck personality questionnaire) e, sulla base dei punteggi ottenuti, essi vengono sud-
divisi in due gruppi: introversi ed estroversi (variabile trait). Il grado di utilizzo del
servizio sociale (variabile use) viene valutato con un questionario composto di 10 item, il
cui punteggio finale varia da 0 (nessun uso del servizio) a 7 (massimo uso del servizio). I
dati sono disponibili nel file eysenck.dat. Si vuole sapere se il fare parte del gruppo ed
il grado di estroversione influenzano l’uso del servizio sociale.

1. Si importino i dati in R.
> X <- read.table(paste(datadir,"eysenck.dat",sep=""),header=TRUE)

2. Per ciascuno dei quattro gruppi, definiti dall’incrocio tra le variabili trait e member
si calcolino, medie, deviazioni standard, numerosità ed intervallo di confidenza delle
medie al 95%.
> (mx <- tapply(X$use,list(X$member,X$trait),mean))

Ex In
no 3.121 3.738
yes 3.487 3.408

> (sx <- tapply(X$use,list(X$member,X$trait),sd))


5 REGRESSIONE LINEARE MULTIPLA 112

Ex In
no 0.4989 0.7252
yes 0.6055 0.8091

> (n <- tapply(X$use,list(X$member,X$trait),length))

Ex In
no 25 25
yes 25 25

> (se <- sx/sqrt(n)) # errori standard

Ex In
no 0.09977 0.1450
yes 0.12110 0.1618

> CI.mean(mx,sx,n)

$input
mean sd n level
Ex-no 3.12 0.50 25 0.95
Ex-yes 3.49 0.61 25 0.95
In-no 3.74 0.73 25 0.95
In-yes 3.41 0.81 25 0.95

$err.st
[1] 0.09977 0.12110 0.14504 0.16183

$CI
inf sup
Ex-no 2.915 3.326
Ex-yes 3.237 3.737
In-no 3.439 4.038
In-yes 3.074 3.742

3. Si valuti graficamente se sia ipotizzabile una interazione delle variabili member e


trait sulla variabile use.
4.5

Ex
In
4.0
use

3.5
3.0

no yes

member

4. Si definisca il modello appropriato per valutare l’interazione tra le variabili trait e


member.
> fit <- lm(use~member*trait,data=X)
> anova(fit)
5 REGRESSIONE LINEARE MULTIPLA 113

Analysis of Variance Table

Response: use
Df Sum Sq Mean Sq F value Pr(>F)
member 1 0.0 0.008 0.02 0.891
trait 1 1.8 1.816 4.04 0.047 *
member:trait 1 3.0 3.032 6.75 0.011 *
Residuals 96 43.1 0.449
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

5. Si calcoli la dimensione dell’effetto di interazione usando η 2 parziale.


> etasq(fit)

Partial eta^2
member 0.0001963
trait 0.0404258
member:trait 0.0657108
Residuals NA

6. Si calcoli il Bayes Factor dell’interazione.


> BF0 <- lmBF(use~member+trait,data=X)
> BF1 <- lmBF(use~member*trait,data=X)
> BF1/BF0

Bayes factor analysis


--------------
[1] member * trait : 4.503 ±2.91%

Against denominator:
use ~ member + trait
---
Bayes factor type: BFlinearModel, JZS

7. Sulla base dei risultati ottenuti si traggano le conclusioni.

Esercizio 5.5

Un campione di 405 modelli di auto, prodotte tra il 1970 ed il 1982, viene analizzato per
una valutazione comparativa. Per ciascun modello vengono riportate alcune informazioni
relative al consumo in km al litro, cilindrata, potenza in cavalli, peso e accelerazione, più
il paese e l’anno di produzione. I dati sono nel file auto.sav.
1. Si importi il file auto.sav in R.
> X <- read.spss(paste(datadir,"auto.sav",sep=""),to.data.frame=TRUE)

2. Si calcoli il consumo medio (con relativa deviazione standard, variabile consumo) in


funzione dell’anno di produzione (anno) e della nazione di produzione (origine).
> (mx <- tapply(X$consumo,list(X$anno,X$origine),mean,na.rm=TRUE))

Italia Europa Giappone


70 10.57 20.20 20.50
71 13.10 23.75 24.50
5 REGRESSIONE LINEARE MULTIPLA 114

72 11.28 17.00 19.20


73 10.03 19.00 15.00
74 13.33 22.00 24.33
75 12.55 19.50 22.50
76 14.43 19.25 23.00
77 15.72 24.25 22.42
78 16.77 19.95 24.69
79 18.48 25.45 27.95
80 20.91 32.29 30.40
81 22.53 26.57 27.96
82 24.45 35.00 29.89

> tapply(X$consumo,list(X$anno,X$origine),sd,na.rm=TRUE)

Italia Europa Giappone


70 3.295 0.8367 2.121
71 4.656 1.5000 4.435
72 4.860 2.9155 3.564
73 3.213 3.5119 1.633
74 4.776 2.5298 3.445
75 2.856 2.5100 4.359
76 4.982 5.0427 6.377
77 5.974 5.9791 5.034
78 4.800 10.4397 6.134
79 6.419 5.3257 1.626
80 4.107 5.4937 6.235
81 6.066 2.7945 4.466
82 4.872 5.6569 2.713

3. Si rappresentino graficamente i consumi medi, in funzione dell’anno di produzione,


differenziandoli per nazione di produzione.
35

Italia
Europa
30

Giappone
consumo

25
20
15
10

70 72 74 76 78 80 82

anno

4. Si valuti, con gli opportuni test e grafici, se le distribuzioni dei consumi nelle nazioni
di produzione possono essere considerate normali.

One-sample Kolmogorov-Smirnov test

data: X$consumo[X$origine == "Italia"]


D = 0.11, p-value = 0.005
alternative hypothesis: two-sided

One-sample Kolmogorov-Smirnov test

data: X$consumo[X$origine == "Europa"]


D = 0.11, p-value = 0.4
5 REGRESSIONE LINEARE MULTIPLA 115

alternative hypothesis: two-sided

One-sample Kolmogorov-Smirnov test

data: X$consumo[X$origine == "Giappone"]


D = 0.12, p-value = 0.2
alternative hypothesis: two-sided

Italia Europa Giappone


3

p = 0.005 p = 0.357 p = 0.22

2
Theoretical Quantiles

Theoretical Quantiles

Theoretical Quantiles
2

1
1
0

0
-1

-1
-1
-2

-2
-2
-3

5 15 25 35 15 25 35 15 25 35

Sample Quantiles Sample Quantiles Sample Quantiles

5. Si produca un grafico in quattro parti che presenti i grafici a dispersione della varia-
bile consumo in funzione delle variabili cilindrata (variabile motore), potenza (cv),
peso (peso) e numero di cilindri (cilindri).
consumo

consumo
30

30
10

10

100 200 300 400 50 100 150 200

motore cv
consumo

consumo
30

30
10

10

600 1000 1400 3 4 5 6 7 8

peso cilindri

6. Si determini quali tra le variabili cilindrata (variabile motore), potenza (cv), pe-
so (peso) e numero di cilindri (cilindri) siano predittive della variabile consumo
(ovvero quali β relativi siano statisticamente significativi).
> fit <- lm(consumo~motore+cv+peso+cilindri,data=X)
> summary(fit)

Call:
lm(formula = consumo ~ motore + cv + peso + cilindri, data = X)
5 REGRESSIONE LINEARE MULTIPLA 116

Residuals:
Min 1Q Median 3Q Max
-9.347 -2.589 -0.505 2.153 16.450

Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 34.42868 1.35359 25.44 < 2e-16 ***
motore -0.01510 0.00660 -2.29 0.023 *
cv -0.06268 0.01292 -4.85 1.8e-06 ***
peso -0.01473 0.00208 -7.08 6.9e-12 ***
cilindri 1.22236 0.20676 5.91 7.4e-09 ***
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 4.07 on 386 degrees of freedom


(14 observations deleted due to missingness)
Multiple R-squared: 0.729,Adjusted R-squared: 0.726
F-statistic: 259 on 4 and 386 DF, p-value: <2e-16

7. Si individui, utilizzando η 2 parziale, la variabile che spiega la quota più elevata di


variabilità.
> etasq(fit) # individuo la variabile

Partial eta^2
motore 0.01337
cv 0.05743
peso 0.11491
cilindri 0.08303
Residuals NA

8. Si utilizzi la variabile individuata al punto precedente per stimare i consumi dei


modelli di auto in cui il dato è mancante.
> m.peso <- lm(consumo~peso,data=X) # modello
> coef(m.peso)[1]+X$peso[is.na(X$consumo)]*coef(m.peso)[2]

[1] 17.592 9.539 10.367 9.355 11.771 15.590 26.129 19.824

9. Si ripeta il punto 7, individuando la variabile da utilizzare con il Bayes Factor al


posto di η 2 . Se la variabile individuata è diversa dalla precedente si ripeta anche il
punto e 8.
> BF <- generalTestBF(consumo~motore+cv+peso+cilindri,data=na.omit(X))
> sort(BF,decreasing=TRUE)

Bayes factor analysis


--------------
[1] cv + peso + cilindri : 2.399e+104 ±0%
[2] motore + cv + peso + cilindri : 1.828e+104 ±0%
[3] motore + peso + cilindri : 3.662e+100 ±0%
[4] cv + peso : 2.399e+99 ±0%
[5] motore + cv + peso : 1.837e+98 ±0%
[6] peso + cilindri : 2.688e+97 ±0%
[7] motore + peso : 2.327e+97 ±0%
[8] peso : 8.514e+96 ±0.01%
[9] motore + cv + cilindri : 2.039e+95 ±0%
[10] motore + cilindri : 3.715e+89 ±0%
[11] motore + cv : 2.739e+88 ±0%
[12] motore : 1.694e+86 ±0.01%
[13] cv + cilindri : 4.382e+77 ±0%
[14] cv : 1.164e+76 ±0.01%
[15] cilindri : 8.109e+21 ±0%
5 REGRESSIONE LINEARE MULTIPLA 117

Against denominator:
Intercept only
---
Bayes factor type: BFlinearModel, JZS

Esercizio 5.6

Nel file SNA1.rda sono contenuti i dati relativi ad un esperimento condotto su 76 bambini
di età compresa tra i 3 ed i 6 anni. Ciascun bambino è stato classificato in base alla
modalità con cui utilizza l’associazione numeri-spazio (Spatial-Numeric Association, SNA).
Con questo criterio sono stati identificati tre gruppi (definiti nella variabile SNA): soggetti
SNA1, ovvero i bambini che mostrano un’associazione numeri-spazio compatibile con la
direzione di lettura-scrittura, SNA2, ovvero i bambini con associazione inversa e non-SNA,
ovvero bambini che non mostrano un’associazione stabile. Ai bambini viene mostrata una
sequenza di numeri target da 1 a 9 ed essi devono riportare su una linea di 10 cm la
posizione del numero. Nel file sono presenti le variabili che indicano la differenza in cm.
tra la posizione indicata e la vera posizione dei numeri, e la media di tali scarti (variabile
media.scarti). La variabile gruppo.eta contiene le età dei bambini raggruppate in 6
fasce.
1. Si importino i dati in R.
> load(paste(datadir,"SNA1.rda",sep=""))

2. Si producano le statistiche descrittive per le variabili del data-frame.


> summary(SNA1)

gruppo.eta sna n1 n2 n3 n4
1:14 no-sna:42 Min. :-3.698 Min. :-1.647 Min. :-3.322 Min. :-1.540
2:13 sna1 :18 1st Qu.:-2.702 1st Qu.:-0.704 1st Qu.:-1.467 1st Qu.:-0.469
3:12 sna2 :16 Median :-1.513 Median :-0.191 Median :-0.750 Median : 0.422
4:14 Mean :-1.364 Mean :-0.157 Mean :-0.425 Mean : 0.324
5:11 3rd Qu.:-0.035 3rd Qu.: 0.401 3rd Qu.: 0.621 3rd Qu.: 1.098
6:12 Max. : 0.846 Max. : 1.446 Max. : 2.439 Max. : 2.367
n5 n6 n7 n8 n9
Min. :-1.087 Min. :-0.074 Min. :-1.30 Min. :-0.338 Min. :-0.113
1st Qu.: 0.283 1st Qu.: 0.810 1st Qu.: 0.82 1st Qu.: 1.206 1st Qu.: 1.516
Median : 0.888 Median : 1.334 Median : 1.28 Median : 1.675 Median : 2.608
Mean : 0.976 Mean : 1.466 Mean : 1.21 Mean : 1.666 Mean : 2.482
3rd Qu.: 1.598 3rd Qu.: 2.106 3rd Qu.: 1.60 3rd Qu.: 2.319 3rd Qu.: 3.502
Max. : 3.185 Max. : 3.151 Max. : 3.14 Max. : 3.891 Max. : 5.467
medie.scarti
Min. :-0.0485
1st Qu.: 0.4767
Median : 0.6895
Mean : 0.6870
3rd Qu.: 0.9012
Max. : 1.3107

3. Volendo sapere se l’età dei soggetti e il tipo di SNA siano predittive degli scarti com-
messi dai bambini si definisca il modello opportuno e si stimino i relativi parametri.

> (fit1 <- lm(medie.scarti~gruppo.eta+sna,data=SNA1))


5 REGRESSIONE LINEARE MULTIPLA 118

Call:
lm(formula = medie.scarti ~ gruppo.eta + sna, data = SNA1)

Coefficients:
(Intercept) gruppo.eta2 gruppo.eta3 gruppo.eta4 gruppo.eta5 gruppo.eta6 snasna1
0.4638 0.0603 0.0768 -0.0246 0.0457 0.0485 0.4398
snasna2
0.4125

4. Si valuti se vi sia un’interazione statisticamente significativa tra i predittori del


modello definito al punto precedente individuando le ipotesi H0 e H1 .
> fit2 <- lm(medie.scarti~gruppo.eta*sna,data=SNA1)
> anova(fit1,fit2)

Analysis of Variance Table

Model 1: medie.scarti ~ gruppo.eta + sna


Model 2: medie.scarti ~ gruppo.eta * sna
Res.Df RSS Df Sum of Sq F Pr(>F)
1 68 4.19
2 58 3.24 10 0.947 1.7 0.1

5. Si considerino ora le singole valutazioni ottenute per i nove numeri target e si indi-
vidui un grafico opportuno per visualizzare le distribuzioni degli scarti indicati dai
bambini rispetto a ciascun numero target.
4
2
0
-2
-4

n1 n2 n3 n4 n5 n6 n7 n8 n9

6. Si valuti, sulla base del grafico prodotto al punto 5, se sia ipotizzabile una relazione
lineare tra la grandezza del numero target e lo scarto indicato.

Esercizio 5.7

Il file mathschool.rda contiene i punteggi di fine anno al test di matematica rilevati


in 7 classi di una scuola nella successione dei 5 anni scolastici utilizzati per valutare
l’apprendimento della matematica. Nel set di dati ci sono le seguenti variabili: subj,
codice identificativo dello studente; classe, codice identificativo della classe; docente,
sigla docente della classe; anno, anno di rilevazione; math, punteggio finale di matematica.

1. Si importino i dati in R.
5 REGRESSIONE LINEARE MULTIPLA 119

> load(paste(datadir,"mathschool.rda",sep=""))

2. Si determini il numero di classi assegnate a ciascun docente.


> (TB <- table(mathschool$classe,mathschool$docente)/5)

prof1 prof2
101 26.2 0.0
102 31.0 0.0
103 0.0 27.0
104 23.2 0.0
105 0.0 34.0
106 0.0 18.8
107 0.0 35.8

3. Si determini il numero di studenti assegnati a ciascun docente.


> apply(TB,2,sum)

prof1 prof2
80.4 115.6

4. Si rappresentino graficamente i punteggi al test di matematica in funzione dell’anno


scolastico e si interpreti il risultato ottenuto.
100
80
60
40
20

1 2 3 4 5

5. Si formuli un modello (lineare) per valutare i punteggi nel test di matematica durante
i cinque anni di scuola e se ne stimino i parametri.
> (lm1 <- lm(math~anno,data=mathschool))

Call:
lm(formula = math ~ anno, data = mathschool)

Coefficients:
(Intercept) anno
18.88 6.24

6. Si aggiunga al modello precedente l’effetto del docente e si stabilisca se tale effetto


risulti significativo.
5 REGRESSIONE LINEARE MULTIPLA 120

> lm2 <- lm(math~anno+docente,data=mathschool)


> anova(lm1,lm2)

Analysis of Variance Table

Model 1: math ~ anno


Model 2: math ~ anno + docente
Res.Df RSS Df Sum of Sq F Pr(>F)
1 978 203275
2 977 102173 1 101102 967 <2e-16 ***
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

7. Si aggiunga al modello precedente anche l’effetto di interazione e lo si valuti utiliz-


zando il Bayes Factor.
> BF2 <- lmBF(math~anno+docente,data=mathschool)
> BF3 <- lmBF(math~anno*docente,data=mathschool)
> BF3/BF2

Bayes factor analysis


--------------
[1] anno * docente : 1.231e+50 ±2.54%

Against denominator:
math ~ anno + docente
---
Bayes factor type: BFlinearModel, JZS

8. Si utilizzi il Bayes Factor per individuare il migliore tra i modelli definiti ai punti 5,
6 e 7 (suggerimento: si può utilizzare la funzione generalTestBF()).
> generalTestBF(math~anno*docente,data=mathschool)

Bayes factor analysis


--------------
[1] anno : 4.311e+65 ±0%
[2] docente : 4.959e+94 ±0%
[3] anno + docente : 3.336e+209 ±1.36%
[4] anno + docente + anno:docente : 4.341e+259 ±2.91%

Against denominator:
Intercept only
---
Bayes factor type: BFlinearModel, JZS

9. Si rappresentino graficamente gli effetti del modello migliore tra i tre valutati e si
interpretino i risultati.
5 REGRESSIONE LINEARE MULTIPLA 121

1 2 3 4 5

docente=prof1 docente=prof2
70
math 60
50
40
30
20
1 2 3 4 5

anno

Esercizio 5.8

Il file vaes2015.rda contiene un campione di 200 soggetti coinvolti in una ricerca sul
pregiudizio verso gli immigrati. Nel data set sono presenti le seguenti variabili:

• PREGIUDIZIO = livello di pregiudizio verso gli extracomunitari, punteggi su una scala


tra 0 e 7 in cui più alti sono i punteggi più è alto il livello di pregiudizio

• NORME = livello di accordo espresso dai partecipanti in relazione alla presenza di


norme anti discriminazione (es. Le persone che esprimono atteggiamenti offensivi
verso gli immigrati devono essere perseguite legalmente),

• PAURACRI = livello di paura della criminalità percepita,

• STIME = stima soggettiva della percentuale di immigrati che commettono crimini,

• CONTATTO = livello di contatto percepito con gli immigrati,

• AGENTI SOC = livello di pregiudizio delle persone importanti (partner, genitori, amici
stretti, etc.),

• Or Politico = orientamento politico, espresso su una scala da 1 (estrema destra) a


16 (estrema sinistra),

• GIORNALIsx = frequenza di lettura giornali con orientamento di sinistra,

• GIORNALIdx = frequenza di lettura gironali con orientamento di destra,

• TG = frequenza di esposizione ai telegiornali

Si vuole individuare quali siano i predittori del livello di pregiudizio.

1. Si importino i dati in R.
> load(paste(datadir,"vaes2015.rda",sep=""))
5 REGRESSIONE LINEARE MULTIPLA 122

2. Si rappresentino graficamente le distribuzioni univariate delle variabili del dataset.

AGENTI SOC CONTATTO GIORNALIdx GIORNALIsx NORME

150
100
50
0

0 20 40 60 80 100 0 20 40 60 80 100 0 20 40 60 80 100 0 20 40 60 80 100 0 20 40 60 80 100


Or Politico PAURACRI PREGIUDIZIO STIME TG

150
100
50
0

0 20 40 60 80 100 0 20 40 60 80 100 0 20 40 60 80 100 0 20 40 60 80 100 0 20 40 60 80 100

3. Si rappresentino le distribuzioni bivariate delle variabili (si può utilizzare la funzione


pairs()).

1 2 3 4 5 6 7 0 20 40 60 80 10 20 30 40 0 5 10 15 20 0 5 10 15 20

6
PREGIUDIZIO

4
2
1 3 5 7

NORME

6
PAURACRI

2
80

STIME
40
0

80
40
CONTATTO

0
30

AGENTI SOC
10

15
Or Politico
5
20

GIORNALIsx
10
0

12

GIORNALIdx
6
0
20

TG
10
0

2 3 4 5 6 2 4 6 8 0 20 40 60 80 5 10 15 0 4 8 12

4. Si definisca un modello lineare per individuare quali siano i predittori del livello di
pregiudizio e se ne stimino i parametri (quanti sono?).
> fit <- lm(PREGIUDIZIO~.,data=vaes2015)
> coef(fit)

(Intercept) NORME PAURACRI STIME CONTATTO AGENTI_SOC Or_Politico


2.502064 -0.154016 0.045683 0.014945 -0.011340 0.013374 0.094271
GIORNALIsx GIORNALIdx TG
-0.008444 0.033385 0.017839

5. Si valutino con le opportune analisi gli assunti del modello.


5 REGRESSIONE LINEARE MULTIPLA 123

Residuals vs Fitted Normal Q-Q

4
137 1 137

Standardized residuals
1

3
2
1

1
0

-1 0
-1
289

-3
-2
289

2 3 4 5 6 -3 -2 -1 0 1 2 3

Scale-Location
Fitted values Residuals vsQuantiles
Theoretical Leverage
137

4
1 289
1137

Standardized residuals
1.5

2
1.0

0
0.5

-2
Cook’s distance
289
0.0

-4
2 3 4 5 6 0.00 0.05 0.10 0.15 0.20

6. Si individuino i predittori statisticamente significativi.


> summary(fit)

Call:
lm(formula = PREGIUDIZIO ~ ., data = vaes2015)

Residuals:
Min 1Q Median 3Q Max
-1.7765 -0.3963 -0.0127 0.3535 1.9918

Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 2.50206 0.27430 9.12 < 2e-16 ***
NORME -0.15402 0.03156 -4.88 2.3e-06 ***
PAURACRI 0.04568 0.02422 1.89 0.061 .
STIME 0.01494 0.00301 4.97 1.5e-06 ***
CONTATTO -0.01134 0.00252 -4.50 1.2e-05 ***
AGENTI_SOC 0.01337 0.00587 2.28 0.024 *
Or_Politico 0.09427 0.01463 6.45 9.5e-10 ***
GIORNALIsx -0.00844 0.01151 -0.73 0.464
GIORNALIdx 0.03338 0.01974 1.69 0.092 .
TG 0.01784 0.01111 1.61 0.110
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 0.588 on 188 degrees of freedom


(2 observations deleted due to missingness)
Multiple R-squared: 0.743,Adjusted R-squared: 0.73
F-statistic: 60.3 on 9 and 188 DF, p-value: <2e-16

7. Si stimino le dimensioni degli effetti con η 2 .


> etasq(fit,partial=FALSE)

eta^2
NORME 0.076063
PAURACRI 0.011363
STIME 0.078937
CONTATTO 0.064694
AGENTI_SOC 0.016602
Or_Politico 0.132699
GIORNALIsx 0.001721
GIORNALIdx 0.009134
TG 0.008242
Residuals NA
5 REGRESSIONE LINEARE MULTIPLA 124

8. Si calcolino i Bayes Factor associati ai predittori del modello.


> BF <- generalTestBF(PREGIUDIZIO~NORME+PAURACRI+STIME+CONTATTO+AGENTI_SOC
+ +Or_Politico+GIORNALIsx+GIORNALIdx+TG,data=na.omit(vaes2015),whichModels="bottom")
> plot(BF)

vs. Intercept only

Or Politico
STIME
GIORNALIsx
NORME
GIORNALIdx
AGENTI SOC
PAURACRI
TG
CONTATTO
1
10
100
1000
10000
1e+05
1e+06
1e+07
1e+08
1e+09
1e+10
1e+11
1e+12
1e+13
1e+14
1e+15
1e+16
1e+17
1e+18
1e+19
1e+20
1e+21
1e+22
1e+23
1e+24
1e+25
1e+26
1e+27
1e+28
1e+29
1e+30
1e+31
1e+32
9. Considerando i risultati dei punti 6, 7 e 8 si formulino tre modelli alternativi (uno
sulla base di ciascuno dei tre risultati) e si confrontino.
> ## MODELLO 1: tolgo i predittori non-significativi
> fit1 <- lm(PREGIUDIZIO~NORME+STIME+CONTATTO+AGENTI_SOC+Or_Politico,data=vaes2015)
>
> ## MODELLO 2: tolgo i predittori con eta2 < .01
> fit2 <- lm(PREGIUDIZIO~NORME+PAURACRI+STIME+CONTATTO+AGENTI_SOC
+ +Or_Politico,data=vaes2015)
>
> ## MODELLO 3: tolgo i predittori con BF più basso
> fit3 <- lm(PREGIUDIZIO~NORME+STIME+Or_Politico+GIORNALIsx+GIORNALIdx,data=vaes2015)
>
> ## confronto
> BIC(fit,fit1,fit2,fit3)

df BIC
fit 11 399.4
fit1 7 394.5
fit2 8 391.2
fit3 7 414.3

10. Si stimi l’evidenza relativa del modello migliore individuato al punto precedente
rispetto al modello con tutti i predittori.
> BFall <- lmBF(PREGIUDIZIO~NORME+PAURACRI+STIME+CONTATTO+AGENTI_SOC
+ +Or_Politico+GIORNALIsx+GIORNALIdx+TG,data=na.omit(vaes2015))
> BF2 <- lmBF(PREGIUDIZIO~NORME+PAURACRI+STIME+CONTATTO+AGENTI_SOC
+ +Or_Politico,data=na.omit(vaes2015))
> BF2/BFall

Bayes factor analysis


--------------
[1] NORME + PAURACRI + STIME + CONTATTO + AGENTI_SOC + Or_Politico : 17.52 ±0.01%

Against denominator:
PREGIUDIZIO ~ NORME + PAURACRI + STIME + CONTATTO + AGENTI_SOC + Or_Politico + GIORNALIsx + GIORNALIdx + TG
---
Bayes factor type: BFlinearModel, JZS
5 REGRESSIONE LINEARE MULTIPLA 125

Esercizio 5.9

In una ricerca sulla depressione nei preadolescenti viene selezionato un campione di 676
studenti di scuola media e primi anni di superiore. A ciascun soggetto viene chiesto di
esprimere su una scala a 5 punti il proprio grado di preferenza verso la musica gotica
(variabile goth, più è alto il valore maggiore la preferenza), e viene somministrato un test
per valutare il livello di depressione con una misura che varia tra -2 e 2 (variabile dep, più
è alto il valore maggiore il livello di depressione). Il file gothic.rda contiene i dati rilevati
su queste variabili con l’aggiunta delle informationi relative a genere (variabile gender ed
età (variabile age) dei soggetti.
Adottando un approccio di confronto tra i modelli, si voglioni individuare i migliori
predittori della depressione.
1. Si importino i dati in R.
> load(paste(datadir,"gothic.rda",sep=""))

2. Si producano le statistiche descrittive delle variabili nel data-set utilizzando la fun-


zione describe() del pacchetto psych.
> describe(goth)

vars n mean sd median trimmed mad min max range skew kurtosis se
subj* 1 676 438.99 263.08 441.50 435.31 332.10 1.00 936.00 935.00 0.07 -1.16 10.12
gender* 2 676 1.54 0.50 2.00 1.56 0.00 1.00 2.00 1.00 -0.18 -1.97 0.02
age 3 676 12.35 0.56 12.00 12.31 0.00 10.00 15.00 5.00 0.74 1.26 0.02
goth 4 676 1.77 1.10 1.00 1.54 0.00 1.00 5.00 4.00 1.45 1.28 0.04
dep 5 676 0.14 0.63 0.25 0.19 0.59 -1.31 1.37 2.68 -0.68 -0.10 0.02

3. Si rappresentino graficamente le distribuzioni univariate delle variabili del dataset,


ciascuna nel modo più opportuno.
genere età
400
300

300
200

200
100

100
0

male female 10 11 12 13 14 15
preferenza per la musica gotica depressione
300

80
Frequency

60
200

40
100

20
0
0

1 2 3 4 5 -1.5 -1.0 -0.5 0.0 0.5 1.0 1.5

4. Si definisca il modello nullo e se ne stimino i parametri.


> (m0 <- lm(dep~1,data=goth))

Call:
lm(formula = dep ~ 1, data = goth)

Coefficients:
(Intercept)
0.138
5 REGRESSIONE LINEARE MULTIPLA 126

5. Si definiscano i modelli con un solo predittore e se ne stimino i parametri.


> (m11 <- lm(dep~goth,data=goth))

Call:
lm(formula = dep ~ goth, data = goth)

Coefficients:
(Intercept) goth
-0.0259 0.0931

> (m12 <- lm(dep~gender,data=goth))

Call:
lm(formula = dep ~ gender, data = goth)

Coefficients:
(Intercept) genderfemale
0.0439 0.1738

> (m13 <- lm(dep~age,data=goth))

Call:
lm(formula = dep ~ age, data = goth)

Coefficients:
(Intercept) age
-0.1224 0.0211

6. Si definiscano i modelli con due predittori, senza interazioni, e se ne stimino i


parametri.
> (m21 <- lm(dep~goth+gender,data=goth))

Call:
lm(formula = dep ~ goth + gender, data = goth)

Coefficients:
(Intercept) goth genderfemale
-0.1082 0.0892 0.1636

> (m22 <- lm(dep~goth+age,data=goth))

Call:
lm(formula = dep ~ goth + age, data = goth)

Coefficients:
(Intercept) goth age
-0.3743 0.0936 0.0281

> (m23 <- lm(dep~gender+age,data=goth))

Call:
lm(formula = dep ~ gender + age, data = goth)

Coefficients:
(Intercept) genderfemale age
-0.4109 0.1778 0.0366
5 REGRESSIONE LINEARE MULTIPLA 127

7. Si aggiungano ai modelli del punto precedente le relative interazioni.


> (m31 <- lm(dep~goth*gender,data=goth))

Call:
lm(formula = dep ~ goth * gender, data = goth)

Coefficients:
(Intercept) goth genderfemale goth:genderfemale
-0.0948 0.0814 0.1405 0.0132

> (m32 <- lm(dep~goth*age,data=goth))

Call:
lm(formula = dep ~ goth * age, data = goth)

Coefficients:
(Intercept) goth age goth:age
-0.49812 0.16799 0.03818 -0.00604

> (m33 <- lm(dep~gender*age,data=goth))

Call:
lm(formula = dep ~ gender * age, data = goth)

Coefficients:
(Intercept) genderfemale age genderfemale:age
-0.8299 1.0255 0.0704 -0.0686

8. Si calcolino i valori di AIC e BIC di tutti i modelli dei modelli precedenti e si


confrontino per individuare il modello migliore.
> AIC(m11,m12,m13,m21,m22,m23,m31,m32,m33)

df AIC
m11 3 1286
m12 3 1291
m13 3 1303
m21 4 1276
m22 4 1287
m23 4 1292
m31 5 1278
m32 5 1289
m33 5 1293

> BIC(m11,m12,m13,m21,m22,m23,m31,m32,m33)

df BIC
m11 3 1299
m12 3 1304
m13 3 1317
m21 4 1294
m22 4 1305
m23 4 1310
m31 5 1300
m32 5 1312
m33 5 1316

9. Si analizzino e si interpretino i parametri del modello migliore ottenuto (es. sono


statisticamente significativi?)
5 REGRESSIONE LINEARE MULTIPLA 128

> summary(m21)

Call:
lm(formula = dep ~ goth + gender, data = goth)

Residuals:
Min 1Q Median 3Q Max
-1.811 -0.353 0.111 0.449 1.290

Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -0.1082 0.0512 -2.11 0.03495 *
goth 0.0892 0.0218 4.10 4.7e-05 ***
genderfemale 0.1636 0.0479 3.42 0.00067 ***
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 0.619 on 673 degrees of freedom


Multiple R-squared: 0.0426,Adjusted R-squared: 0.0398
F-statistic: 15 on 2 and 673 DF, p-value: 4.27e-07

10. Si rappresentino graficamente e si interpretino gli effetti del modello migliore.

goth effect plot gender effect plot

0.5 0.25
0.4 0.20
0.15
dep

dep

0.3
0.10
0.2
0.05
0.1
0.00
0.0
1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0 male female

goth gender

Esercizio 5.10

In una ricerca sul ruolo dell’attaccamento e dell’alleanza tra genitori come predittori dello
stress in genitori adottivi, viene intervistato un gruppo di 40 coppie con un figlio adottato.
Nel file parenting.rda sono raccolti i dati relativi a 5 variabili che misurano: lo stress dei
genitori relativo a tre domini (Parent Distress, PD; Parent/Child Disfunctional interaction,
PCD; Difficulty Child, CD), l’attaccamento irrisolto (U, in cui il valore 1 indica questa
caratteristica del genitore) e l’alleanza tra genitori (Parenting Alliance Measure, PAM).
Per ciascuna variabile è presente il valore ottenuto sulle madri (.m) e sui padri (.p).
Si vuole individuare il modello che spiega meglio il livello di stress.
1. Si importino i dati in R.
> load(paste(datadir,"parenting.rda",sep=""))

2. Si modifichi il data frame in modo da ottenere una riga per ogni soggetto e cinque
colonne (relative alle variabili PD, PCD, CD, U, PAM) più una nuova colonna che
5 REGRESSIONE LINEARE MULTIPLA 129

indichi il genitore. Suggerimento: si creino prima due data frame separati per madri
e padri e poi li si unisca con rbind().
> Xm <- parenting[,c(1:3,7,8)]; Xm$genitore <- "m"
> Xp <- parenting[,c(4:6,9,10)]; Xp$genitore <- "p"
> colnames(Xm)[1:5] <- colnames(Xp)[1:5] <- c("PD","PCD","CD","U","PAM")
> X <- rbind(Xm,Xp)
> head(X)

PD PCD CD U PAM genitore


1 21 16 27 0 68 m
2 20 16 17 0 86 m
3 20 23 24 0 87 m
4 26 20 24 1 79 m
5 25 25 25 1 76 m
6 19 20 26 0 92 m

3. Si calcoli un punteggio totale di stress (tot.stress) sommando le variabili PD, PCD


e CD.
> X$tot.stress <- apply(X[,c("PD","PCD","CD")],1,sum)

4. Si ispezionino con gli opportuni grafici le variabili U, PAM, genitore (creata al punto
2) ed il punteggio totale di stress appena calcolato.

10.0 40 5
60

4
7.5 30
40
frequenza

3
5.0 20
2
20
2.5 10
1

0 0.0 0 0
0 1 70 80 90 100 m p 40 60 80 100 120
U PAM genitore tot.stress

5. Si ispezionino graficamente, con le opportune rappresentazioni, le relazioni bivariate


tra le quattro variabili del punto precedente.
100 120
totale stress

30
frequenza

genitore
90 100
PAM

20 m
80
80 10 p 60
70 0 40
0 1 0 1 0 1
U U U

100 120 120


totale stress

tot.stress

90 100 100
PAM

80 80
80
60 60
70 40
40
m p 70 80 90 100 m p
genitore PAM genitore
5 REGRESSIONE LINEARE MULTIPLA 130

6. Si definiscano i modelli (senza effetti di interazione) per la previsione dello stress in


funzione dei tre predittori U, PAM, genitore e si stimino i parametri.
> m_nullo <- lm(tot.stress~1,data=X)
> m_U <- lm(tot.stress~U,data=X)
> m_PAM <- lm(tot.stress~PAM,data=X)
> m_genitore <- lm(tot.stress~genitore,data=X)
> m_U_PAM <- lm(tot.stress~U+PAM,data=X)
> m_U_genitore <- lm(tot.stress~U+genitore,data=X)
> m_PAM_genitore <- lm(tot.stress~PAM+genitore,data=X)

7. Si individui il modello migliore tra quelli valutati utilizzando il BIC e se ne calcoli


l’evidenza relativa verso il modello nullo.
> BIC(m_nullo,m_U,m_PAM,m_genitore,m_U_PAM,m_U_genitore,m_PAM_genitore)

df BIC
m_nullo 2 646.9
m_U 3 649.3
m_PAM 3 640.1
m_genitore 3 651.2
m_U_PAM 4 642.7
m_U_genitore 4 653.7
m_PAM_genitore 4 644.0

> ## il modello migliore è m_PAM, calcolo l'evidenza relativa


> exp((BIC(m_nullo)-BIC(m_PAM))/2)

[1] 29.7

8. Si analizzino i residui del modello migliore ottenuto.


> plot(m_PAM)

Residuals vs Fitted Normal Q-Q


60

78 78
Standardized residuals

4
40

17 23 17 23
20

2
1
0

0
-20

-2

55 60 65 70 75 -2 -1 0 1 2

Scale-Location
Fitted values Residuals vsQuantiles
Theoretical Leverage
78
2.0

78
Standardized residuals

1
1.5

17 23
0.5
2

70
1.0

0
0.5

1
-2

Cook’s distance
0.0

0.5

55 60 65 70 75 0.00 0.02 0.04 0.06 0.08 0.10 0.12

9. Si stimino i parametri anche dei modelli con le interazioni a due e tre vie.
> m_UPAM <- lm(tot.stress~U*PAM,data=X)
> m_Ugenitore <- lm(tot.stress~U*genitore,data=X)
> m_PAMgenitore <- lm(tot.stress~PAM*genitore,data=X)
> m_UPAMgenitore <- lm(tot.stress~U*PAM*genitore,data=X)

10. Si utilizzi il BIC per confrontare questi nuovi modelli con il modello migliore ottenuto
prima e si valuti quantitativamente l’impatto delle interazioni su questo modello.
5 REGRESSIONE LINEARE MULTIPLA 131

> BIC(m_PAM,m_UPAM,m_Ugenitore,m_PAMgenitore,m_UPAMgenitore)

df BIC
m_PAM 3 640.1
m_UPAM 5 645.6
m_Ugenitore 5 657.5
m_PAMgenitore 5 645.1
m_UPAMgenitore 9 655.0

> # le interazioni peggiorano sempre il modello


> exp((BIC(m_PAM)-BIC(m_UPAM))/2)

[1] 0.06242

> exp((BIC(m_PAM)-BIC(m_PAMgenitore))/2)

[1] 0.08302

> exp((BIC(m_PAM)-BIC(m_UPAMgenitore))/2)

[1] 0.0005691

11. Si ripeta il confronto tra modelli utilizzando il Bayes Factor (con la funzione generalTestBF()).
Il modello migliore finale è lo stesso?
> generalTestBF(tot.stress~U*PAM*genitore,data=X)

Bayes factor analysis


--------------
[1] U : 0.5391 ±0%
[2] PAM : 30.16 ±0%
[3] U + PAM : 17.1 ±0%
[4] U + PAM + U:PAM : 9.848 ±0%
[5] genitore : 0.2347 ±0.02%
[6] U + genitore : 0.1208 ±1.94%
[7] PAM + genitore : 8.311 ±0.84%
[8] U + PAM + genitore : 4.785 ±1.39%
[9] U + PAM + U:PAM + genitore : 2.791 ±1.6%
[10] U + genitore + U:genitore : 0.05274 ±1.4%
[11] U + PAM + genitore + U:genitore : 2.165 ±1.23%
[12] U + PAM + U:PAM + genitore + U:genitore : 2.068 ±1.4%
[13] PAM + genitore + PAM:genitore : 9.089 ±1%
[14] U + PAM + genitore + PAM:genitore : 6.22 ±1.03%
[15] U + PAM + U:PAM + genitore + PAM:genitore : 6.779 ±1.36%
[16] U + PAM + genitore + U:genitore + PAM:genitore : 3.029 ±1.36%
[17] U + PAM + U:PAM + genitore + U:genitore + PAM:genitore : 5.936 ±1.46%
[18] U + PAM + U:PAM + genitore + U:genitore + PAM:genitore + U:PAM:genitore : 2.664 ±1.65%

Against denominator:
Intercept only
---
Bayes factor type: BFlinearModel, JZS

12. Si rappresentino graficamente gli effetti del modello migliore e si interpretino.


> plot(allEffects(m_PAM))
5 REGRESSIONE LINEARE MULTIPLA 132

PAM effect plot

85
80
tot.stress 75
70
65
60
55

70 75 80 85 90 95

PAM
6 REGRESSIONE LINEARE MULTIVARIATA 133

6 REGRESSIONE LINEARE MULTIVARIATA

Esercizio 6.1

Nel file Goldberger.dat6 sono riportati i valori del prodotto nazionale lordo (gnp) in
miliardi di dollari, la quantità di lavoro espressa in milioni di anni-uomo (labor), il capitale
reale in miliardi di dollari (capital) e il tempo in anni a partire dal 1928 (time) in 23
rilevazioni economiche annuali negli Stati Uniti durante i periodi 1929-1941 e 1946-1955.
Si vuole sapere se quantità di lavoro, capitale reale e tempo sono predittori del prodotto
nazionale lordo.

1. Si identifichino le variabili esogene ed endogene e si disegni il grafico del modello.

labor
β12

capital β13 gnp ψ11

β14

time

2. Si scriva l’equazione del modello.


'gnp~labor+capital+time'

3. Si importino i dati in R.
> X <- read.table(paste(datadir,"Goldberger.dat",sep=""),header=TRUE)

4. Si rappresentino graficamente le relazioni bivariate tra le variabili considerate.


6
Fonte: Goldberger, 1964.
6 REGRESSIONE LINEARE MULTIVARIATA 134

35 45 55 0 5 15 25

250
gnp

100
50
35 labor

capital

20 80
time
15
0

100 200 20 60 100

5. Si stimino i parametri del modello con la funzione lm().


> (fitLM <- lm(gnp~labor+capital+time,data=X))

Call:
lm(formula = gnp ~ labor + capital + time, data = X)

Coefficients:
(Intercept) labor capital time
-61.728 3.819 0.322 3.786

6. Si stimino i parametri del modello con la funzione sem() (compresa l’intercetta) e


si confrontino con quelli ottenuti al punto precedente.
> fitSEM <- sem("gnp~labor+capital+time",data=X,meanstructure=TRUE)
> coef(fitSEM)

gnp~labor gnp~capital gnp~time gnp~~gnp gnp~1


3.819 0.322 3.786 11.915 -61.728

7. Si calcoli il valore di R2 .
> summary(fitLM)$r.squared

[1] 0.9971

> inspect(fitSEM,"rsquare")

gnp
0.997

Esercizio 6.2

Abbiamo i punteggi di 15 matricole di una grande università del midwest su 5 scale7 :


7
Fonte: Finn, 1974.
6 REGRESSIONE LINEARE MULTIVARIATA 135

gravereq = media dei voti sui corsi obbligatori (y1 ), gravelec = media dei voti sui
corsi opzionali (y2 ), knowledg = voto di conoscenza generale della scuola superiore (x1 ),
iqprevyr = punteggio al QI nell’anno precedente (x2 ), edmotiv = punteggio motivazionale
dell’anno precedente (x3 ). I relativi dati sono nel file Finn.dat. Si vuole valutare se le
variabili x1 , x2 e x3 sono predittive dei voti sui corsi.

1. Si importino i dati in R.
> X <- read.table(paste(datadir,"Finn.dat",sep=""),header=TRUE)

2. Si produca la matrice di covarianza (S) tra le variabili considerate.


> cov(X)

gravereq gravelec knowledg iqprevyr edmotiv


gravereq 0.5938 0.4826 3.993 0.4262 0.4990
gravelec 0.4826 0.7541 3.626 1.7567 0.7155
knowledg 3.9929 3.6257 47.457 4.1000 6.2614
iqprevyr 0.4262 1.7567 4.100 10.2667 0.5567
edmotiv 0.4990 0.7155 6.261 0.5567 2.6941

3. Si definiscano le equazioni del modello in cui x1 , x2 e x3 sono predittori di y1 e y2 .


'gravereq ~ knowledg + iqprevyr + edmotiv'
'gravelec ~ knowledg + iqprevyr + edmotiv'

4. Si stimino i parametri del modello, definendolo in modo che sia di tipo ricorsivo.
> fit <- sem(model,data=X)
> coef(fit)

gravereq~knowledg gravereq~iqprevyr gravereq~edmotiv gravelec~knowledg gravelec~iqprevyr


0.085 0.008 -0.015 0.047 0.145
gravelec~edmotiv gravereq~~gravereq gravelec~~gravelec
0.126 0.240 0.222

5. Si valuti la signifcatività statistica dei parametri.


> summary(fit)

lavaan (0.5-23.1097) converged normally after 29 iterations

Number of observations 15

Estimator ML
Minimum Function Test Statistic 9.521
Degrees of freedom 1
P-value (Chi-square) 0.002

Parameter Estimates:

Information Expected
Standard Errors Standard

Regressions:
Estimate Std.Err z-value P(>|z|)
gravereq ~
knowledg 0.085 0.023 3.700 0.000
iqprevyr 0.008 0.042 0.198 0.843
edmotiv -0.015 0.096 -0.156 0.876
6 REGRESSIONE LINEARE MULTIVARIATA 136

gravelec ~
knowledg 0.047 0.022 2.129 0.033
iqprevyr 0.145 0.040 3.639 0.000
edmotiv 0.126 0.092 1.366 0.172

Covariances:
Estimate Std.Err z-value P(>|z|)
.gravereq ~~
.gravelec 0.000

Variances:
Estimate Std.Err z-value P(>|z|)
.gravereq 0.240 0.088 2.739 0.006
.gravelec 0.222 0.081 2.739 0.006

6. Si produca il grafico del modello utilizzando la funzione semPaths().

knowledg iqprevyr edmotiv

gravereq gravelec

7. Si calcolino i seguenti indici di fit del modello: RMR, SRMR, R2 e CD


> inspect(fit,"fit")[c("rmr","srmr")]

rmr srmr
0.04079 0.06530

> inspect(fit,"rsquare")

gravereq gravelec
0.568 0.685

> PS <- inspect(fit,"est")$psi[1:2,1:2]


> hatS <- fitted(fit)$cov[1:2,1:2]
> 1-det(PS)/det(hatS)

[1] 0.8256

8. Si ridefinisca il modello eliminando i legami relativi ai parametri non significativi.


6 REGRESSIONE LINEARE MULTIVARIATA 137

knowledg iqprevyr

gravereq gravelec

9. Si stimino i parametri del nuovo modello (quanti sono?).


> fit2 <- sem(model2,data=X)
> coef(fit2)

gravereq~knowledg gravelec~knowledg gravelec~iqprevyr gravereq~~gravereq gravelec~~gravelec


0.084 0.064 0.146 0.241 0.249

10. Si calcolino gli stessi indici di fit già calcolati al punto 7 per questo nuovo modello
valutando se sia migliore del precedente.
> inspect(fit2,"fit")[c("rmr","srmr")]

rmr srmr
0.05763 0.08455

> inspect(fit2,"rsquare")

gravereq gravelec
0.566 0.646

> PS <- inspect(fit2,"est")$psi[1:2,1:2]


> hatS <- fitted(fit2)$cov[1:2,1:2]
> 1-det(PS)/det(hatS)

[1] 0.806

Esercizio 6.3

Si riprendano in esame i dati dell’esercizio 5.2 e si consideri il modello nella figura 4.

1. Si individuino le variabili esogene e le variabili endogene del modello.


2. Si definiscano le equazioni del modello.
'media ~ an_corso+sex+votodip+tottest'
'n_es ~ an_corso+sex+votodip+tottest'

3. Si stimino i parametri del modello (quanti sono?).


6 REGRESSIONE LINEARE MULTIVARIATA 138

> fit1 <- sem(model1,data=X)


> coef(fit1)

media~an_corso media~sex media~votodip media~tottest n_es~an_corso n_es~sex


-0.571 0.217 0.195 0.032 3.460 0.434
n_es~votodip n_es~tottest media~~media n_es~~n_es media~~n_es
0.140 -0.001 3.312 5.962 1.661

4. Si valuti quali parametri risultino statisticamente significativi.


> summary(fit1)

lavaan (0.5-23.1097) converged normally after 47 iterations

Used Total
Number of observations 433 455

Estimator ML
Minimum Function Test Statistic 0.000
Degrees of freedom 0
Minimum Function Value 0.0000000000000

Parameter Estimates:

Information Expected
Standard Errors Standard

Regressions:
Estimate Std.Err z-value P(>|z|)
media ~
an_corso -0.571 0.269 -2.119 0.034
sex 0.217 0.179 1.212 0.225
votodip 0.195 0.016 11.927 0.000
tottest 0.032 0.012 2.661 0.008
n_es ~
an_corso 3.460 0.361 9.576 0.000
sex 0.434 0.240 1.805 0.071
votodip 0.140 0.022 6.399 0.000

an.corso sex votodip tottest

media n.es

Fig. 4: Modello dell’esercizio 6.3.


6 REGRESSIONE LINEARE MULTIVARIATA 139

tottest -0.001 0.016 -0.057 0.955

Covariances:
Estimate Std.Err z-value P(>|z|)
.media ~~
.n_es 1.661 0.228 7.284 0.000

Variances:
Estimate Std.Err z-value P(>|z|)
.media 3.312 0.225 14.714 0.000
.n_es 5.962 0.405 14.714 0.000

5. Si calcolino gli R2 del modello e si individui quale variabile è spiegata meglio dai
predittori considerati.
> inspect(fit1,"rsquare")

media n_es
0.286 0.344

6. Si calcoli il coefficiente di determinazione totale del modello.


> # matrice PSI
> PS <- inspect(fit1,"est")$psi[1:2,1:2]
> # matrice Sigma-hat
> hatS <- fitted(fit1)$cov[1:2,1:2]
> # CD
> 1-det(PS)/det(hatS)

[1] 0.5424

Esercizio 6.4

Partendo dal modello relativo all’esercizio 6.3:


1. Si riformuli il modello fissando a zero le covarianze tra i residui.
'media ~~0*n_es'

2. Si stimino i parametri del nuovo modello e li si confronti con quelli ottenuti nell’e-
sercizio 6.3.
> fit2 <- sem(model2,data=X)
> coef(fit2)

media~an_corso media~sex media~votodip media~tottest n_es~an_corso n_es~sex


-0.571 0.217 0.195 0.032 3.460 0.434
n_es~votodip n_es~tottest media~~media n_es~~n_es
0.140 -0.001 3.312 5.962

3. Si calcolino gli R2 del modello.


> inspect(fit2,"rsquare")

media n_es
0.286 0.344

4. Si calcoli il coefficiente di determinazione totale del modello.


6 REGRESSIONE LINEARE MULTIVARIATA 140

> PS <- inspect(fit2,"est")$psi[1:2,1:2]


> hatS <- fitted(fit2)$cov[1:2,1:2]
> 1-det(PS)/det(hatS)

[1] 0.5275

5. Si valuti, se il modello cosı̀ definito sia di tipo ricorsivo o non ricorsivo.


> # ispeziono By (Beta Y)
> inspect(fit2,"est")$beta[1:2,1:2]

media n_es
media 0 0
n_es 0 0

> # ispeziono PSI


> inspect(fit2,"est")$psi[1:2,1:2]

media n_es
media 3.312 0.000
n_es 0.000 5.962

Esercizio 6.5

Partendo dal modello relativo all’esercizio 6.3:


1. Si riformuli il modello eliminando i legami definiti da parametri non significativi.
'media ~ an_corso+votodip+tottest'
'n_es ~ an_corso+votodip'

2. Si stimino i parametri del nuovo modello e li si confronti con quelli ottenuti nell’e-
sercizio 6.3.
> fit3 <- sem(model3,data=X)
> coef(fit3)

media~an_corso media~votodip media~tottest n_es~an_corso n_es~votodip media~~media


-0.563 0.199 0.032 3.461 0.148 3.323
n_es~~n_es media~~n_es
6.007 1.683

3. Si calcolino gli R2 del modello.


> inspect(fit3,"rsquare")

media n_es
0.284 0.339

4. Si calcoli il coefficiente di determinazione totale del modello.


> PS <- inspect(fit3,"est")$psi[1:2,1:2]
> hatS <- fitted(fit3)$cov[1:2,1:2]
> 1-det(PS)/det(hatS)

[1] 0.5386
6 REGRESSIONE LINEARE MULTIVARIATA 141

presreal

presperc

reddreal
statperc

reddperc

Fig. 5: Modello dell’esercizio 6.6.

Esercizio 6.6

Nel file Kluegel.dat sono tabulati i dati raccolti su un campione di 432 soggetti in una
famosa ricerca di Kluegel, Singleton & Starnes (1977): reddperc = reddito percepito (y1 ),
presperc = prestigio occupazionale percepito (y2 ), statperc = statuts generale percepito
(y3 ), reddreal = reddito reale (x1 ), presreal = prestigio occupazionale reale (x2 ). Nella
figura 5 è rappresentato il modello teorico di riferimento che si vuole analizzare.

1. Si importino i dati in R.
> X <- read.table(paste(datadir,"Kluegel.dat",sep=""),header=TRUE)

2. Si valuti graficamente e con dei test se le variabili considerate siano distribuite


normalmente.

reddperc presperc statperc reddreal presreal


3
2

1.5

2
1

Sample Quantiles

Sample Quantiles

Sample Quantiles

Sample Quantiles
1
1

1
0.5

0
0

0
0

-1
-0.5

-1
-2
-1

-1

-2
-3
-1.5
-2

-3
-4

-3 -1 1 3 -3 -1 1 3 -3 -1 1 3 -3 -1 1 3 -3 -1 1 3

> shapiro.test(X[,"reddperc"])
6 REGRESSIONE LINEARE MULTIVARIATA 142

Shapiro-Wilk normality test

data: X[, "reddperc"]


W = 1, p-value = 0.7

> shapiro.test(X[,"presperc"])

Shapiro-Wilk normality test

data: X[, "presperc"]


W = 1, p-value = 0.4

> shapiro.test(X[,"statperc"])

Shapiro-Wilk normality test

data: X[, "statperc"]


W = 1, p-value = 0.7

> shapiro.test(X[,"reddreal"])

Shapiro-Wilk normality test

data: X[, "reddreal"]


W = 0.99, p-value = 0.2

> shapiro.test(X[,"presreal"])

Shapiro-Wilk normality test

data: X[, "presreal"]


W = 0.99, p-value = 0.02

3. Si definiscano le equazioni del modello.


"reddperc ~ reddreal + presperc"
"presperc ~ presreal + reddperc"
"statperc ~ reddperc + presperc"

4. Si stimino i parametri del modello.


> fit <- sem(model,data=X)
> coef(fit)

reddperc~reddreal reddperc~presperc presperc~presreal presperc~reddperc statperc~reddperc


0.130 0.322 0.034 0.101 0.328
statperc~presperc reddperc~~reddperc presperc~~presperc statperc~~statperc
0.318 0.344 0.340 0.251

5. Si valuti la significatività statistica dei parametri.


> summary(fit)

lavaan (0.5-23.1097) converged normally after 28 iterations


6 REGRESSIONE LINEARE MULTIVARIATA 143

Number of observations 432

Estimator ML
Minimum Function Test Statistic 8.900
Degrees of freedom 3
P-value (Chi-square) 0.031

Parameter Estimates:

Information Expected
Standard Errors Standard

Regressions:
Estimate Std.Err z-value P(>|z|)
reddperc ~
reddreal 0.130 0.028 4.589 0.000
presperc 0.322 0.209 1.543 0.123
presperc ~
presreal 0.034 0.028 1.209 0.227
reddperc 0.101 0.202 0.500 0.617
statperc ~
reddperc 0.328 0.040 8.136 0.000
presperc 0.318 0.043 7.343 0.000

Variances:
Estimate Std.Err z-value P(>|z|)
.reddperc 0.344 0.028 12.383 0.000
.presperc 0.340 0.051 6.643 0.000
.statperc 0.251 0.017 14.697 0.000

6. Si identifichino le matrici BY e Ψ valutando, sulla base delle stesse, se il modello


sia di tipo ricorsivo o non-ricorsivo.
> inspect(fit,"est")$beta[1:3,1:3]

reddperc presperc statperc


reddperc 0.0000 0.3221 0
presperc 0.1008 0.0000 0
statperc 0.3281 0.3175 0

> inspect(fit,"est")$psi[1:3,1:3]

reddperc presperc statperc


reddperc 0.3436 0.0000 0.0000
presperc 0.0000 0.3395 0.0000
statperc 0.0000 0.0000 0.2506

7. Si stabilisca con gli opportuni indici, se il modello si possa considerare accettabile.


> inspect(fit,"fit")[c("rmr","srmr")]

rmr srmr
0.01924 0.03077

> inspect(fit,"rsquare")

reddperc presperc statperc


0.188 0.077 0.315

> PS <- inspect(fit,"est")$psi[1:3,1:3]


> hatS <- fitted(fit)$cov[1:3,1:3]
> 1-det(PS)/det(hatS)

[1] 0.1109
6 REGRESSIONE LINEARE MULTIVARIATA 144

Esercizio 6.7

Roth, Wiebe Fillingim & Shay (1989) in una loro ricerca sulla resistenza allo stress hanno
utilizzato le seguenti 5 misure su un campione di 373 studenti universitari: esercizio (va-
riabile exercise), resistenza (variabile hardiness), stato di forma (variabile fitness),
livello di stress (variabile stress) e livello di malessere (variabile illness). Il modello
ipotizzato prevede che lo stato di forma dipenda dall’esercizio e dalla resistenza e che i
livelli di stress e malessere dipendano entrambi da esercizio, resistenza e stato di forma (in
forma inversa). Il file Roth.rda contiene i dati raccolti.

1. Si importino i dati in R.
> load(paste(datadir,"Roth.rda",sep=""))

2. Si producano i grafici delle relazioni bivariate tra le variabili considerate.

-100 100 -100 50 200

fitness

-100
stress
-100

illness

-150
exercise
-100

hardiness -50

-100 0 100 -150 0 100 -50 50

3. Si definiscano le equazioni del modello (quante sono?).


"fitness ~ exercise + hardiness"
"stress ~ exercise + hardiness + fitness"
"illness ~ exercise + hardiness + fitness + stress"

4. Si stimino i parametri del modello.


> fit <- sem(model,data=Roth)

5. Si identifichino le variabili esogene ed endogene e si disegni il grafico del modello.


6 REGRESSIONE LINEARE MULTIVARIATA 145

stress

fitness
illness

hardiness
exercise

6. Si valuti quali parametri risultino statisticamente significativi.


> summary(fit)

lavaan (0.5-23.1097) converged normally after 22 iterations

Number of observations 373

Estimator ML
Minimum Function Test Statistic 0.000
Degrees of freedom 0

Parameter Estimates:

Information Expected
Standard Errors Standard

Regressions:
Estimate Std.Err z-value P(>|z|)
fitness ~
exercise 0.436 0.026 16.719 0.000
hardiness 0.136 0.047 2.909 0.004
stress ~
exercise -0.067 0.060 -1.104 0.270
hardiness -0.813 0.083 -9.844 0.000
fitness -0.291 0.091 -3.204 0.001
illness ~
exercise 0.136 0.054 2.519 0.012
hardiness -0.100 0.083 -1.202 0.229
fitness -0.830 0.082 -10.108 0.000
stress 0.513 0.046 11.097 0.000

Variances:
Estimate Std.Err z-value P(>|z|)
.fitness 1180.310 86.428 13.657 0.000
.stress 3618.878 264.993 13.657 0.000
.illness 2890.008 211.621 13.657 0.000

7. Si identifichino le matrici BY e Ψ valutando, sulla base delle stesse, se il modello


sia di tipo ricorsivo o non-ricorsivo.
> inspect(fit,"est")$beta[1:3,1:3]

fitness stress illness


6 REGRESSIONE LINEARE MULTIVARIATA 146

fitness 0.0000 0.0000 0


stress -0.2905 0.0000 0
illness -0.8302 0.5135 0

> inspect(fit,"est")$psi[1:3,1:3]

fitness stress illness


fitness 1180 0 0
stress 0 3619 0
illness 0 0 2890

8. Si stabilisca con gli opportuni indici, se il modello si possa considerare accettabile.


> inspect(fit,"fit")[c("rmr","srmr")]

rmr srmr
7.513e-05 1.514e-08

> inspect(fit,"rsquare")

fitness stress illness


0.431 0.260 0.519

> PS <- inspect(fit,"est")$psi[1:3,1:3]


> hatS <- fitted(fit)$cov[1:3,1:3]
> 1-det(PS)/det(hatS)

[1] 0.559

Esercizio 6.8

Si supponga di voler migliorare il modello definito nell’esercizio 6.7.

1. Si riformuli il modello escludendo le relazioni non statisticamente significative nel-


l’esercizio 6.7.

hardiness

stress
exercise

fitness illness
6 REGRESSIONE LINEARE MULTIVARIATA 147

2. Si calcolino R2 e CD del nuovo modello.


> inspect(fit2,"rsquare")

fitness stress illness


0.418 0.240 0.494

> PS <- inspect(fit2,"est")$psi[1:3,1:3]


> hatS <- fitted(fit2)$cov[1:3,1:3]
> 1-det(PS)/det(hatS)

[1] 0.5368

3. Si confronti il nuovo modello con quello dell’esercizio 6.7 utilizzando il Likelihood


Ratio Test, e definendo opportunamente l’ipotesi per stabilire quale sia il migliore.
> anova(fit,fit2)

Chi Square Difference Test

Df AIC BIC Chisq Chisq diff Df diff Pr(>Chisq)


fit 0 19853 19900 0.0
fit2 4 19863 19895 18.5 18.5 4 0.00099 ***
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Esercizio 6.9
Si consideri il modello nella figura 6.

SES
MA

SO
AP

EA

Fig. 6: Modello dell’esercizio 6.9.

1. Si individuino le variabili esogene e le variabili endogene.

2. Si individuino i coefficienti che legano tra loro le variabili indicandone i rispettivi


indici.

3. Si individuino gli errori del modello con i rispettivi simboli.


6 REGRESSIONE LINEARE MULTIVARIATA 148

4. si scrivano le equazioni del modello.


"AP ~ MA"
"SO ~ MA + SES + AP"
"EA ~ AP + SO"

Esercizio 6.10

Il modello nella figura 6 rappresenta la relazione tra le seguenti 5 variabili: Mental abi-
lity (MA), Socioeconomic status (SES), Academic performance (AP), Significant other’s
influence (SO), Educational aspiration (EA). Nel file Sewell.rda ci sono i dati raccolti
su un campione di studenti di alcune università americane.
1. Si importino i dati in R.
> load(paste(datadir,"Sewell.rda",sep=""))

2. Si individui la numerosità campionaria.


> str(Sewell)

'data.frame': 3500 obs. of 5 variables:


$ AP : num -0.324 0.366 0.444 -0.98 -0.266 ...
$ SO : num 0.729 0.0824 -0.4479 -1.689 -0.0351 ...
$ EA : num 0.0106 1.6189 0.4508 -1.2413 0.2052 ...
$ MA : num 1.136 -0.451 1.632 -0.472 -1.088 ...
$ SES: num 3.209 0.688 0.582 0.743 0.354 ...

3. Si rappresentino opportunamente le distribuzioni univariate delle variabili valutan-


do graficamente la normalità delle stesse e l’eventuale presenza di dati anomali
(univariati).
4
2
0
-2
-4

AP SO EA MA SES

4. Si stimino i parametri del modello teorico, raffigurato nell’esercizio 6.9.


> fit <- sem(model,data=Sewell)
> coef(fit)

AP~MA SO~MA SO~SES SO~AP EA~AP EA~SO AP~~AP SO~~SO EA~~EA


0.608 0.190 0.179 0.315 0.194 0.521 0.950 1.013 1.010
6 REGRESSIONE LINEARE MULTIVARIATA 149

5. Si identifichino le matrici BY e Ψ valutando, sulla base delle stesse, se il modello


sia di tipo ricorsivo o non-ricorsivo.
> inspect(fit,"est")$beta[1:3,1:3]

AP SO EA
AP 0.0000 0.0000 0
SO 0.3151 0.0000 0
EA 0.1939 0.5212 0

> inspect(fit,"est")$psi[1:3,1:3]

AP SO EA
AP 0.9499 0.000 0.00
SO 0.0000 1.013 0.00
EA 0.0000 0.000 1.01

6. Si valuti la bontà di adattamento del modello calcolando i seguenti indici: SRMR,


R2 e CD.
> inspect(fit,"fit")["srmr"]

srmr
0.002624

> inspect(fit,"rsquare")

AP SO EA
0.273 0.213 0.333

> PS <- inspect(fit,"est")$psi[1:3,1:3]


> Sy <- fitted(fit)$cov[1:3,1:3]
> 1-det(PS)/det(Sy)

[1] 0.3176

Esercizio 6.11
In una ricerca sulle aspirazioni professionali di un campione di studenti neodiplomati,
vengono raccolte, con un questionario, le seguenti variabili: grades (voto al diploma),
educexp (aspettative formative), occuasp (aspirazioni professionali), intellig (punteggio
al QI), siblings (numero di fratelli), fatheduc (livello di istruzione del padre), fathoccu
(livello occupazionale del padre). Il modello di riferimento è in figura 7, i relativi dati sono
nel file Kerchoff.rda.
1. Si importino i dati in R.
> load(paste(datadir,"Kerchoff.rda",sep=""))

2. Si determini quali siano le variabili esogene e quali le endogene del modello.

3. Si stabilisca se il modello sia di tipo ricorsivo o non ricorsivo.


4. Si scrivano le equazioni del modello.
6 REGRESSIONE LINEARE MULTIVARIATA 150

"grades ~ intellig+siblings+fatheduc+fathoccu"
"educexp ~ grades"
"occuasp ~ grades+educexp"

5. Si determini a priori il numero di parametri del modello.


6. Si stimino i parametri del modello.
> fit1 <- sem(modello1,data=Kerchoff)
> coef(fit1)

grades~intellig grades~siblings grades~fatheduc grades~fathoccu educexp~grades


0.248 -0.109 0.142 0.047 0.537
occuasp~grades occuasp~educexp grades~~grades educexp~~educexp occuasp~~occuasp
0.087 0.569 10.527 9.798 7.182

7. Si determini quali parametri risultino statisticamente significativi.


> summary(fit1)

lavaan (0.5-23.1097) converged normally after 22 iterations

Number of observations 767

Estimator ML
Minimum Function Test Statistic 107.064
Degrees of freedom 8
P-value (Chi-square) 0.000

Parameter Estimates:

Information Expected
Standard Errors Standard

Regressions:
Estimate Std.Err z-value P(>|z|)
grades ~
intellig 0.248 0.014 17.341 0.000
siblings -0.109 0.127 -0.858 0.391
fatheduc 0.142 0.030 4.698 0.000
fathoccu 0.047 0.029 1.605 0.108

intellig siblings fatheduc fathoccu

grades educexp occuasp

Fig. 7: Modello dell’esercizio 6.11.


6 REGRESSIONE LINEARE MULTIVARIATA 151

educexp ~
grades 0.537 0.029 18.391 0.000
occuasp ~
grades 0.087 0.030 2.916 0.004
educexp 0.569 0.031 18.393 0.000

Variances:
Estimate Std.Err z-value P(>|z|)
.grades 10.527 0.538 19.583 0.000
.educexp 9.798 0.500 19.583 0.000
.occuasp 7.182 0.367 19.583 0.000

8. Si determini la bontà di adattamento del modello utilizzando gli opportuni indici.


> inspect(fit1,"fit")[c("rmr","srmr")]

rmr srmr
1.01145 0.06019

> inspect(fit1,"rsquare")

grades educexp occuasp


0.298 0.306 0.433

> PSI <- inspect(fit1,"est")$psi[1:3,1:3]


> hatS <- fitted(fit1)$cov[1:3,1:3]
> 1-det(PSI)/det(hatS)

[1] 0.2984

Esercizio 6.12

Si riprendano i dati ed il modello dell’esercizio 6.11 (in figura 7).

1. Si definiscano, aiutandosi con il grafico, i percorsi relativi agli effetti indiretti.

intellig siblings fatheduc fathoccu

b1 b2 b3 b4

grades b5 educexp b7 occuasp

b6

# equazioni del modello


"grades ~ b1*intellig+b2*siblings+b3*fatheduc+b4*fathoccu"
"educexp ~ b5*grades"
"occuasp ~ b6*grades+b7*educexp"
6 REGRESSIONE LINEARE MULTIVARIATA 152

# effetti indiretti
"intellig2eduexp := b1*b5"
"siblings2eduexp := b2*b5"
"fatheduc2eduexp := b3*b5"
"fathoccu2eduexp := b4*b5"
"intellig2occuasp := b1*b5 + b5*b7 + b1*b6"
"siblings2occuasp := b2*b5 + b5*b7 + b2*b6"
"fatheduc2occuasp := b3*b5 + b5*b7 + b3*b6"
"fathoccu2occuasp := b4*b5 + b5*b7 + b4*b6"

2. Si stimino gli effetti indiretti delle variabili intellig, siblings, fatheduc, fathoccu.

> fit2 <- sem(modello2,data=Kerchoff)


> summary(fit2)

lavaan (0.5-23.1097) converged normally after 22 iterations

Number of observations 767

Estimator ML
Minimum Function Test Statistic 107.064
Degrees of freedom 8
P-value (Chi-square) 0.000

Parameter Estimates:

Information Expected
Standard Errors Standard

Regressions:
Estimate Std.Err z-value P(>|z|)
grades ~
intellig (b1) 0.248 0.014 17.341 0.000
siblings (b2) -0.109 0.127 -0.858 0.391
fatheduc (b3) 0.142 0.030 4.698 0.000
fathoccu (b4) 0.047 0.029 1.605 0.108
educexp ~
grades (b5) 0.537 0.029 18.391 0.000
occuasp ~
grades (b6) 0.087 0.030 2.916 0.004
educexp (b7) 0.569 0.031 18.393 0.000

Variances:
Estimate Std.Err z-value P(>|z|)
.grades 10.527 0.538 19.583 0.000
.educexp 9.798 0.500 19.583 0.000
.occuasp 7.182 0.367 19.583 0.000

Defined Parameters:
Estimate Std.Err z-value P(>|z|)
intellig2eduxp 0.133 0.011 12.617 0.000
siblings2eduxp -0.059 0.068 -0.857 0.392
fatheduc2eduxp 0.076 0.017 4.552 0.000
fathoccu2eduxp 0.025 0.016 1.599 0.110
intellig2occsp 0.460 0.029 15.854 0.000
siblings2occsp 0.237 0.083 2.863 0.004
fatheduc2occsp 0.394 0.032 12.448 0.000
fathoccu2occsp 0.334 0.030 11.106 0.000

3. Si modifichi il modello escludendo i parametri non significativi.


6 REGRESSIONE LINEARE MULTIVARIATA 153

intellig fatheduc

b1 b3

grades b5 educexp b7 occuasp

b6

4. Si confrontino i due modelli per valutare quale risulti migliore nello spiegare i dati.
> anova(fit2,fit3)

Chi Square Difference Test

Df AIC BIC Chisq Chisq diff Df diff Pr(>Chisq)


fit3 4 21282 21319 66
fit2 8 27639 27686 107 41 4 2.7e-08 ***
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Esercizio 6.13

Il file Romney.rda contiene la matrice di correlazione (R) delle 5 variabili rilevate in


una ricerca su 469 pazienti dopo un’intervento cardiaco: morale, sintomi, disf.neuro,
relazioni, SES. L’obiettivo della ricerca è testare il modello rappresentato nella figura 8.

disf.neuro SES

b1 b2

morale b3 sintomi relazioni

b4

Fig. 8: Modello dell’esercizio 6.13.

1. Si importi in R la matrice di correlazione.


6 REGRESSIONE LINEARE MULTIVARIATA 154

> load(paste(datadir,"Romney.rda",sep=""))

2. Si controlli se la matrice importata sia effettivamente una matrice di correlazione.


morale sintomi disf.neuro relazioni SES
morale 1.00 0.53 0.15 0.52 0.30
sintomi 0.53 1.00 0.18 0.29 0.34
disf.neuro 0.15 0.18 1.00 -0.05 0.23
relazioni 0.52 0.29 -0.05 1.00 0.09
SES 0.30 0.34 0.23 0.09 1.00

3. Si definiscano le equazioni del modello.


"morale ~ disf.neuro + SES"
"sintomi ~ morale"
"relazione ~ morale"

4. Si stimino i parametri del modello (quanti sono?).


> fitA <- sem(modelloA,sample.cov=R,sample.nobs=469)
> coef(fitA)

b1 b2 b3 b4
0.086 0.280 0.530 0.520
morale~~morale sintomi~~sintomi relazioni~~relazioni
0.901 0.718 0.728

5. Si calcolino gli R2 del modello.


> inspect(fitA,"rsquare")

morale sintomi relazioni


0.097 0.281 0.270

Esercizio 6.14

Si riconsideri il modello relativo all’esercizio 6.13 (in figura 8) con l’obiettivo di stimare
gli effetti indiretti.

1. Si determini quanti e quali sono gli effetti indiretti.


"SES_sintomi := b2*b3"
"SES_relazione := b2*b4"
"disf.neuro_sintomi := b1*b3"
"disf.neuro_relazione := b1*b4"

2. Si stimino gli effetti indiretti del modello.


lavaan (0.5-23.1097) converged normally after 11 iterations

Number of observations 469

Estimator ML
Minimum Function Test Statistic 40.488
Degrees of freedom 5
P-value (Chi-square) 0.000
6 REGRESSIONE LINEARE MULTIVARIATA 155

Parameter Estimates:

Information Expected
Standard Errors Standard

Regressions:
Estimate Std.Err z-value P(>|z|)
morale ~
disf.neur (b1) 0.086 0.045 1.897 0.058
SES (b2) 0.280 0.045 6.217 0.000
sintomi ~
morale (b3) 0.530 0.039 13.535 0.000
relazioni ~
morale (b4) 0.520 0.039 13.184 0.000

Covariances:
Estimate Std.Err z-value P(>|z|)
.sintomi ~~
.relazioni 0.000

Variances:
Estimate Std.Err z-value P(>|z|)
.morale 0.901 0.059 15.313 0.000
.sintomi 0.718 0.047 15.313 0.000
.relazioni 0.728 0.048 15.313 0.000

Defined Parameters:
Estimate Std.Err z-value P(>|z|)
SES_sintomi 0.149 0.026 5.650 0.000
SES_relazioni 0.146 0.026 5.623 0.000
disf.neur_sntm 0.045 0.024 1.878 0.060
disf.neur_rlzn 0.044 0.024 1.877 0.060

3. Si riformuli il modello eliminando i legami con parametri non statisticamente signi-


ficativi.

disf.neuro SES

b2

morale b3 sintomi relazioni

b4

4. Si valuti se questo nuovo modello risulti essere migliore del precedente, testato
nell’esercizio 6.13.
> anova(fitA,fitB)

Chi Square Difference Test

Df AIC BIC Chisq Chisq diff Df diff Pr(>Chisq)


fitA 5 6288 6317 40.5
fitB 6 6290 6314 44.1 3.58 1 0.058 .
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
6 REGRESSIONE LINEARE MULTIVARIATA 156

DisFis DisSoc Vitt Extra

Paura Preg

Strat

Fig. 9: Modello dell’esercizio 6.15.

Esercizio 6.15

I dati del file crimi.rda sono relativi ad uno studio sulla paura della criminalità e le sue
determinanti, raccolti in 4 diversi quartieri di una grande città. Le variabili contenute
nel file sono relative a 7 aspetti presi in considerazione nella ricerca: grado di pregiudizio
verso extracomunitari (Preg), Paura della criminalità, strategie per fronteggiare la paura
(Strat), percezione della presenza di extracomunitari (Extra), percezione di disordine
fisico (DisFis) e sociale (DisSoc), grado di vittimizzazione (Vitt). Si vuole valutare il
modello in figura 9.

1. Si importino i dati in R
> load(paste(datadir,"crimi.rda",sep=""))

2. Si definiscano le equazioni del modello.


"Paura ~ DisFis + DisSoc + Vitt + Strat + Preg"
"Strat ~ Paura"
"Preg ~ Extra"

3. Si stimino i parametri del modello (quanti sono?).


> fit <- sem(model,crimi)
> coef(fit)

Paura~DisFis Paura~DisSoc Paura~Vitt Paura~Strat Paura~Preg Strat~Paura Preg~Extra


0.924 1.634 8.319 -4.669 0.364 1.399 5.020
Paura~~Paura Strat~~Strat Preg~~Preg
691.841 235.591 541.298

4. Si valuti la bontà del modello calcolando gli opportuni indici di adattamento.


> inspect(fit,"fit")["srmr"]

srmr
0.08671
6 REGRESSIONE LINEARE MULTIVARIATA 157

> inspect(fit,"rsquare")

Paura Strat Preg


-5.401 -5.107 0.052

> PS <- inspect(fit,"est")$psi[1:3,1:3]


> Shat <- fitted(fit)$cov[1:3,1:3]
> 1-det(PS)/det(Shat)

[1] -40.99

5. Si definiscano due modelli alternativi in cui viene mantenuto un solo legame tra le
variabili Paura e Strat. Si confrontino per valutare quale dei due risulti essere il
migliore.
modelA <- "
Paura ~ DisFis + DisSoc + Vitt + Strat + Preg
Preg ~ Extra
"

modelB <- "


Paura ~ DisFis + DisSoc + Vitt + Preg
Strat ~ Paura
Preg ~ Extra
"

> fitA <- sem(modelA,data=crimi)


> fitB <- sem(modelB,data=crimi)
> anova(fitA,fitB)

Chi Square Difference Test

Df AIC BIC Chisq Chisq diff Df diff Pr(>Chisq)


fitA 5 13488 13519 22.9
fitB 9 13602 13637 134.7 112 4 <2e-16 ***
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

6. Si produca la rappresentazione grafica del modello risultato migliore dal confronto


eseguito al punto precedente.

DisFis DisSoc Vitt Strat Extra

Paura Preg
6 REGRESSIONE LINEARE MULTIVARIATA 158

Esercizio 6.16

Il file vaes2015.rda contiene un campione di 200 soggetti coinvolti in una ricerca sul
pregiudizio verso gli immigrati già descritti nell’esercizio 5.8. Si vuole testare il modello
in figura 10
1. Si importino i dati in R.
> load(paste(datadir,"vaes2015.rda",sep=""))

2. Si producano le matrici di correlazione e di covarianza tra le variabili del modello in


figura 10.
> cor(vaes2015[,c("PREGIUDIZIO","CONTATTO","AGENTI_SOC","Or_Politico","TG",
+ "NORME","PAURACRI","STIME")],use="complete.obs")

PREGIUDIZIO CONTATTO AGENTI_SOC Or_Politico TG NORME PAURACRI STIME


PREGIUDIZIO 1.0000 -0.4255 0.4769 0.7324 0.45191 -0.49510 0.4738 0.6286
CONTATTO -0.4255 1.0000 -0.1775 -0.3269 -0.22564 0.15572 -0.1438 -0.1413
AGENTI_SOC 0.4769 -0.1775 1.0000 0.4113 0.33144 -0.22178 0.3239 0.3419
Or_Politico 0.7324 -0.3269 0.4113 1.0000 0.41979 -0.33094 0.3253 0.5242
TG 0.4519 -0.2256 0.3314 0.4198 1.00000 -0.05913 0.3719 0.3500
NORME -0.4951 0.1557 -0.2218 -0.3309 -0.05913 1.00000 -0.2920 -0.3141
PAURACRI 0.4738 -0.1438 0.3239 0.3253 0.37186 -0.29201 1.0000 0.4086
STIME 0.6286 -0.1413 0.3419 0.5242 0.34996 -0.31405 0.4086 1.0000

> cov(vaes2015[,c("PREGIUDIZIO","CONTATTO","AGENTI_SOC","Or_Politico","TG",
+ "NORME","PAURACRI","STIME")],use="complete.obs")

PREGIUDIZIO CONTATTO AGENTI_SOC Or_Politico TG NORME PAURACRI STIME


PREGIUDIZIO 1.2814 -8.771 4.426 3.333 2.3580 -0.8359 1.1206 12.518
CONTATTO -8.7714 331.702 -26.502 -23.932 -18.9425 4.2301 -5.4741 -45.289
AGENTI_SOC 4.4264 -26.502 67.234 13.555 12.5269 -2.7124 5.5504 49.323
Or_Politico 3.3326 -23.932 13.555 16.156 7.7775 -1.9841 2.7326 37.070
TG 2.3580 -18.942 12.527 7.777 21.2462 -0.4065 3.5817 28.380
NORME -0.8359 4.230 -2.712 -1.984 -0.4065 2.2247 -0.9101 -8.241
PAURACRI 1.1206 -5.474 5.550 2.733 3.5817 -0.9101 4.3666 15.021
STIME 12.5182 -45.289 49.323 37.070 28.3802 -8.2413 15.0214 309.540

3. Si individuino le variabili esogene ed endogene del modello.

CONTATTO AGENTI SOC Or Politico TG

PREGIUDIZIO NORME PAURACRI STIME

Fig. 10: Modello dell’esercizio 6.16.


6 REGRESSIONE LINEARE MULTIVARIATA 159

> ## esogene: CONTATTO, AGENTI_SOC, Or_Politico, TG


> ## endogene: PREGIUDIZIO, NORME, PAURACRI, STIME

4. Si determini se il modello sia ricorsivo o non ricorsivo.


> ## Si tratta di un modello ricorsivo

5. Si scrivano le equazioni del modello.


> modello <- "
PREGIUDIZIO ~ CONTATTO+AGENTI_SOC+Or_Politico+TG+NORME+PAURACRI+STIME
NORME ~ TG
PAURACRI ~ TG
STIME ~ TG
"

6. Si stimino i parametri del modello (quanti sono?).


> (fit <- sem(modello,data=vaes2015))

lavaan (0.5-23.1097) converged normally after 42 iterations

Used Total
Number of observations 198 200

Estimator ML
Minimum Function Test Statistic 116.477
Degrees of freedom 12
P-value (Chi-square) 0.000

> coef(fit)

PREGIUDIZIO~CONTATTO PREGIUDIZIO~AGENTI_SOC PREGIUDIZIO~Or_Politico


-0.012 0.014 0.102
PREGIUDIZIO~TG PREGIUDIZIO~NORME PREGIUDIZIO~PAURACRI
0.022 -0.162 0.056
PREGIUDIZIO~STIME NORME~TG PAURACRI~TG
0.015 -0.019 0.169
STIME~TG PREGIUDIZIO~~PREGIUDIZIO NORME~~NORME
1.336 0.334 2.206
PAURACRI~~PAURACRI STIME~~STIME
3.744 270.258

7. Si valuti la bontà del modello con gli opportuni indici.


> inspect(fit,"fit")[c("rmr","srmr")]

rmr srmr
8.1451 0.1615

> inspect(fit,"rsquare")

PREGIUDIZIO NORME PAURACRI STIME


0.663 0.003 0.138 0.122

> TCD(fit)$TCD

[1] 0.6328
6 REGRESSIONE LINEARE MULTIVARIATA 160

8. Si analizzino e si interpretino i parametri del modello considerando anche i valori


standardizzati.
> summary(fit,standardized=TRUE)

lavaan (0.5-23.1097) converged normally after 42 iterations

Used Total
Number of observations 198 200

Estimator ML
Minimum Function Test Statistic 116.477
Degrees of freedom 12
P-value (Chi-square) 0.000

Parameter Estimates:

Information Expected
Standard Errors Standard

Regressions:
Estimate Std.Err z-value P(>|z|) Std.lv Std.all
PREGIUDIZIO ~
CONTATTO -0.012 0.002 -4.824 0.000 -0.012 -0.212
AGENTI_SOC 0.014 0.006 2.537 0.011 0.014 0.117
Or_Politico 0.102 0.012 8.352 0.000 0.102 0.413
TG 0.022 0.011 1.958 0.050 0.022 0.101
NORME -0.162 0.028 -5.855 0.000 -0.162 -0.242
PAURACRI 0.056 0.021 2.637 0.008 0.056 0.117
STIME 0.015 0.002 6.074 0.000 0.015 0.268
NORME ~
TG -0.019 0.023 -0.833 0.405 -0.019 -0.059
PAURACRI ~
TG 0.169 0.030 5.637 0.000 0.169 0.372
STIME ~
TG 1.336 0.254 5.257 0.000 1.336 0.350

Variances:
Estimate Std.Err z-value P(>|z|) Std.lv Std.all
.PREGIUDIZIO 0.334 0.034 9.950 0.000 0.334 0.337
.NORME 2.206 0.222 9.950 0.000 2.206 0.997
.PAURACRI 3.744 0.376 9.950 0.000 3.744 0.862
.STIME 270.258 27.162 9.950 0.000 270.258 0.878

9. Si individuino e si stimino gli effetti indiretti del modello.


> ## aggiungo gli effetti indiretti
> modello <- "
PREGIUDIZIO ~ CONTATTO+AGENTI_SOC+Or_Politico+d*TG+a*NORME+b*PAURACRI+c*STIME
NORME ~ e*TG
PAURACRI ~ f*TG
STIME ~ g*TG
## effetti indiretti
ieNORME := a*e
iePAURACRI := b*f
ieSTIME := c*g
"
> fit <- sem(modello,data=vaes2015)
> summary(fit)

lavaan (0.5-23.1097) converged normally after 42 iterations

Used Total
Number of observations 198 200

Estimator ML
Minimum Function Test Statistic 116.477
6 REGRESSIONE LINEARE MULTIVARIATA 161

Degrees of freedom 12
P-value (Chi-square) 0.000

Parameter Estimates:

Information Expected
Standard Errors Standard

Regressions:
Estimate Std.Err z-value P(>|z|)
PREGIUDIZIO ~
CONTATTO -0.012 0.002 -4.824 0.000
AGENTI_SOC 0.014 0.006 2.537 0.011
Or_Politic 0.102 0.012 8.352 0.000
TG (d) 0.022 0.011 1.958 0.050
NORME (a) -0.162 0.028 -5.855 0.000
PAURACRI (b) 0.056 0.021 2.637 0.008
STIME (c) 0.015 0.002 6.074 0.000
NORME ~
TG (e) -0.019 0.023 -0.833 0.405
PAURACRI ~
TG (f) 0.169 0.030 5.637 0.000
STIME ~
TG (g) 1.336 0.254 5.257 0.000

Variances:
Estimate Std.Err z-value P(>|z|)
.PREGIUDIZIO 0.334 0.034 9.950 0.000
.NORME 2.206 0.222 9.950 0.000
.PAURACRI 3.744 0.376 9.950 0.000
.STIME 270.258 27.162 9.950 0.000

Defined Parameters:
Estimate Std.Err z-value P(>|z|)
ieNORME 0.003 0.004 0.825 0.409
iePAURACRI 0.009 0.004 2.388 0.017
ieSTIME 0.020 0.005 3.975 0.000

Esercizio 6.17

Il file parenting contiene un campione di 40 coppie di genitori adottivi coinvolti in una


ricerca sullo stress già descritti nell’esercizio 5.10. Si vuole testare il modello in figura
11 in cui le tre componenti dello stress (Parent Distress, PD; Parent/Child Disfunctional
interaction, PCD; Difficulty Child, CD) sono funzione dell’attaccamento irrisolto (U),
dell’alleanza tra genitori (Parenting Alliance Measure, PAM) e dell’interazione tra queste
due.
Ci si chiede se il modello è valido sia per i padri che per le madri.
1. Si importino i dati in R.
> load(paste(datadir,"parenting.rda",sep=""))

2. Si aggiungano al data frame due colonne (una per le madri ed una per i padri) che
esprimano l’interazione U × PAM.
> parenting$UPAM.m <- parenting$U.m*parenting$PAM.m
> parenting$UPAM.p <- parenting$U.p*parenting$PAM.p

3. Si producano le statistiche descrittive del data frame utilizzando la funzione describe()


(del pacchetto psych).
6 REGRESSIONE LINEARE MULTIVARIATA 162

> describe(parenting)

vars n mean sd median trimmed mad min max range skew kurtosis se
PD.m 1 40 22.18 5.02 22.0 22.16 4.45 12 33 21 0.13 -0.31 0.79
PCD.m 2 40 19.43 5.10 19.0 18.88 4.45 12 35 23 1.23 2.01 0.81
CD.m 3 40 22.90 5.25 22.5 22.94 5.19 12 35 23 -0.04 -0.44 0.83
PD.p 4 40 22.45 5.43 22.0 22.22 5.93 13 35 22 0.40 -0.48 0.86
PCD.p 5 40 18.98 5.19 18.5 18.41 3.71 12 41 29 1.87 5.70 0.82
CD.p 6 40 22.62 6.39 22.0 21.78 4.45 13 43 30 1.22 1.51 1.01
U.m 7 40 0.25 0.44 0.0 0.19 0.00 0 1 1 1.11 -0.78 0.07
PAM.m 8 40 84.33 6.51 85.0 84.53 8.90 68 97 29 -0.28 -0.39 1.03
U.p 9 40 0.20 0.41 0.0 0.12 0.00 0 1 1 1.44 0.09 0.06
PAM.p 10 40 87.10 5.13 86.0 86.97 4.45 74 99 25 0.14 0.18 0.81
UPAM.m 11 40 20.93 36.84 0.0 14.84 0.00 0 95 95 1.14 -0.68 5.83
UPAM.p 12 40 17.40 35.27 0.0 10.56 0.00 0 91 91 1.45 0.11 5.58

4. Si scrivano i modelli da testare (per madri e padri).


> modello.m <- "
PD.m ~ U.m + PAM.m + UPAM.m
PCD.m ~ U.m + PAM.m + UPAM.m
CD.m ~ U.m + PAM.m + UPAM.m
"
> modello.p <- "
PD.p ~ U.p + PAM.p + UPAM.p
PCD.p ~ U.p + PAM.p + UPAM.p
CD.p ~ U.p + PAM.p + UPAM.p
"

5. Si stimino i parametri dei due modelli e si mettano a confronto.


> fit.m <- sem(modello.m,data=parenting)
> fit.p <- sem(modello.p,data=parenting)
> coef(fit.m)

PD.m~U.m PD.m~PAM.m PD.m~UPAM.m PCD.m~U.m PCD.m~PAM.m PCD.m~UPAM.m CD.m~U.m


26.535 -0.120 -0.297 70.482 0.073 -0.815 24.223
CD.m~PAM.m CD.m~UPAM.m PD.m~~PD.m PCD.m~~PCD.m CD.m~~CD.m PD.m~~PCD.m PD.m~~CD.m

U PAM U × PAM

PD PCD CD

Fig. 11: Modello dell’esercizio 6.17


6 REGRESSIONE LINEARE MULTIVARIATA 163

-0.101 -0.310 21.803 18.852 24.390 9.606 6.665


PCD.m~~CD.m
9.613

> coef(fit.p)

PD.p~U.p PD.p~PAM.p PD.p~UPAM.p PCD.p~U.p PCD.p~PAM.p PCD.p~UPAM.p CD.p~U.p


24.503 -0.440 -0.249 16.161 -0.271 -0.148 12.931
CD.p~PAM.p CD.p~UPAM.p PD.p~~PD.p PCD.p~~PCD.p CD.p~~CD.p PD.p~~PCD.p PD.p~~CD.p
-0.612 -0.132 21.932 22.445 29.453 10.013 8.237
PCD.p~~CD.p
15.087

6. Si confrontino gli indici di fit dei due modelli. Quali conclusioni possiamo trarre da
questo confronto?
> # madri
> inspect(fit.m,"rsquare")

PD.m PCD.m CD.m


0.112 0.256 0.091

> TCD(fit.m)$TCD

[1] 0.3552

> fitmeasures(fit.m)[c("rmr","srmr")]

rmr srmr
5.060e-09 8.764e-11

> # padri
> inspect(fit.p,"rsquare")

PD.p PCD.p CD.p


0.237 0.146 0.260

> TCD(fit.p)$TCD

[1] 0.3808

> fitmeasures(fit.p)[c("rmr","srmr")]

rmr srmr
1.646e-06 2.985e-08

7. Si estraggano le matrici dei parametri di regressione Bm (madri) e Bp (padri).


> (BE.m <- inspect(fit.m,"est")$be)

PD.m PCD.m CD.m U.m PAM.m UPAM.m


PD.m 0 0 0 26.54 -0.120 -0.297
PCD.m 0 0 0 70.48 0.073 -0.815
CD.m 0 0 0 24.22 -0.101 -0.310
U.m 0 0 0 0.00 0.000 0.000
PAM.m 0 0 0 0.00 0.000 0.000
UPAM.m 0 0 0 0.00 0.000 0.000
6 REGRESSIONE LINEARE MULTIVARIATA 164

> (BE.p <- inspect(fit.p,"est")$be)

PD.p PCD.p CD.p U.p PAM.p UPAM.p


PD.p 0 0 0 24.50 -0.440 -0.249
PCD.p 0 0 0 16.16 -0.271 -0.148
CD.p 0 0 0 12.93 -0.612 -0.132
U.p 0 0 0 0.00 0.000 0.000
PAM.p 0 0 0 0.00 0.000 0.000
UPAM.p 0 0 0 0.00 0.000 0.000

8. Si stimino i valori attesi delle variabili endogene utilizzando la formula generale del
modello Ŷ = X∗ B0 in cui X∗ è la matrice delle variabili esogene ed endogene usate
nel modello e B0 la trasposta delle matrici dei parametri stimati. Suggerimento: il
prodotto tra matrici si esegue con l’operatore %*%, la trasposta di una matrice con
la funzione t().
> # valori attesi madri
> X.m <- as.matrix(parenting[,colnames(BE.m)])
> hatY.m <- X.m%*%t(BE.m)+matrix(apply(X.m,2,mean),nrow=nrow(X.m),ncol=6,byrow=TRUE)
> # valori attesi padri
> X.p <- as.matrix(parenting[,colnames(BE.p)])
> hatY.p <- X.p%*%t(BE.p)+matrix(apply(X.p,2,mean),nrow=nrow(X.p),ncol=6,byrow=TRUE)

9. Si calcolino i residui utilizzando la formula Y − Ŷ in cui Y è la matrice delle variabili


endogene osservate e Ŷ i relativi valori attesi.
> # residui madri
> E.m <- X.m[,1:3]-hatY.m[,1:3]
> # residui padri
> E.p <- X.p[,1:3]-hatY.p[,1:3]

10. Si rappresentino graficamente i residui in funzione dei valori attesi in 6 grafici separati
(3 per ciascuna endogena e per ogni genitore). Quali considerazioni si possono trarre
dai residui ottenuti.

CDm PCDm PDm


20 0 20
15 -5 15
10 10
5 -10 5
0 -15 0
8 10 12 14 16 20 25 30 9 11 13 15 17
e

CDp PCDp PDp


70 40 50
45
60 30 40
50 20 35
30
-35 -30 -25 -8 -6 -4 -2 0 -21 -18 -15 -12 -9
values
7 REGRESSIONE LINEARE MULTILIVELLO 165

7 REGRESSIONE LINEARE MULTILIVELLO

Esercizio 7.1

In relazione ai dati dell’esercizio 1.10 si vuole valutare la plausibilità del modello in figura
12, ovvero che i costi degli impianti (variabile costo), le tipologie di servizi offerti (variabile
tipo) e lo spessore della neve siano predittori della qualità generale della neve. Inoltre si
vuole valutare se vi siano eventuali differenze tra le stazioni sciistiche (variable stazione).

costo tipo spessore

qualita

Fig. 12: Modello dell’esercizio 7.1.

1. Si importino i dati in R.
> X <- read.spss(paste(datadir,"sciatori.sav",sep=""),to.data.frame=TRUE)

2. Si stimino i parametri del modello di regressione (si può utilizzare a scelta la funzione
lm() o la funzione sem()).
> # con lm()
> (fit1 <- lm(qualita~costo+tipo+spessore,data=X))

Call:
lm(formula = qualita ~ costo + tipo + spessore, data = X)

Coefficients:
(Intercept) costo tipo spessore
29.472 -0.333 -0.329 1.073

> # con sem


> coef(sem("qualita~costo+tipo+spessore",data=X,meanstructure=TRUE))

qualita~costo qualita~tipo qualita~spessore qualita~~qualita qualita~1


-0.333 -0.329 1.073 2.014 29.472

3. Si determini nel modo opportuno, se esistano differenze tra le stazioni sciistiche.


> X$stazione <- factor(X$stazione)
> fit2 <- lm(qualita~costo+tipo+spessore+stazione,data=X)
> anova(fit2)
7 REGRESSIONE LINEARE MULTILIVELLO 166

Analysis of Variance Table

Response: qualita
Df Sum Sq Mean Sq F value Pr(>F)
costo 1 1826 1826 868.84 <2e-16 ***
tipo 1 8631 8631 4106.80 <2e-16 ***
spessore 1 14862 14862 7071.63 <2e-16 ***
stazione 4 8 2 0.96 0.43
Residuals 92 193 2
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

4. Si determini con il modello opportuno, se sia plausibile ipotizzare l’invarianza delle


intercette rispetto alle 5 stazioni sciistiche.
> library(lme4)
> fit3 <- lmer(qualita~costo+tipo+spessore+(1|stazione),data=X)
> summary(fit3)

Linear mixed model fit by REML ['lmerMod']


Formula: qualita ~ costo + tipo + spessore + (1 | stazione)
Data: X

REML criterion at convergence: 374.9

Scaled residuals:
Min 1Q Median 3Q Max
-2.045 -0.615 -0.100 0.693 2.456

Random effects:
Groups Name Variance Std.Dev.
stazione (Intercept) 5.82e-16 2.41e-08
Residual 2.10e+00 1.45e+00
Number of obs: 100, groups: stazione, 5

Fixed effects:
Estimate Std. Error t value
(Intercept) 29.4720 4.6582 6.3
costo -0.3330 0.0401 -8.3
tipo -0.3291 0.0465 -7.1
spessore 1.0733 0.0128 84.2

Correlation of Fixed Effects:


(Intr) costo tipo
costo -0.986
tipo -0.985 0.968
spessore -0.657 0.579 0.552

Esercizio 7.2

Il radon è un elemento chimico radioattivo che si ottiene naturalmente dal decadimento


dell’uranio ed è cancerogeno. Per controllare la presenza nelle case di radon l’agenzia
USA di protezione ambientale ha raccolto dati in più di 80000 case. Nel file radon.rda ci
sono dati relativi a 12777 rilevazioni in 8 stati americani. In particolare sono rilevate le
seguenti variabili: state: stato della rilevazione, county: contea della rilevazione, floor:
piano dell’abitazione (0 = piano terra), radon: concentrazione di radon, log.radon: loga-
ritmo della concentrazione di radon, u: concentrazione di uranio, log.u: logaritmo della
concentrazione di uranio.
1. Si importino i dati in R.
7 REGRESSIONE LINEARE MULTILIVELLO 167

> load(paste(datadir,"radon.rda",sep=""))

2. Si confrontino graficamente le distribuzioni di radon (sia effettive che trasformate in


logaritmo) negli otto stati per valutare se siano tra loro omogenee.

100 150 200 250

4
2
0
50

-2
0

AZ MA MO PA AZ MA MO PA

3. Si valuti se il piano delle abitazioni sia un predittore significativo del livello di radon
utilizzando come variabile dipendente quella più opportuna in base al confronto
grafico effettuato al punto precedente.
> m1 <- lm(log.radon~floor,data=radon)
> summary(m1)

Call:
lm(formula = log.radon ~ floor, data = radon)

Residuals:
Min 1Q Median 3Q Max
-3.205 -0.720 0.005 0.727 4.837

Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 0.90257 0.01065 84.8 <2e-16 ***
floor -0.16548 0.00726 -22.8 <2e-16 ***
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 1.12 on 12775 degrees of freedom


Multiple R-squared: 0.0391,Adjusted R-squared: 0.039
F-statistic: 520 on 1 and 12775 DF, p-value: <2e-16

4. Si stabilisca, con il modello opportuno, se vi siano differenze tra gli otto stati.
> m2 <- lm(log.radon~floor+state,data=radon)
> anova(m2)

Analysis of Variance Table

Response: log.radon
Df Sum Sq Mean Sq F value Pr(>F)
floor 1 658 658 606 <2e-16 ***
state 7 2303 329 303 <2e-16 ***
Residuals 12768 13863 1
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
7 REGRESSIONE LINEARE MULTILIVELLO 168

5. Si modifichi il modello testato al punto 4 considerando gli stati come effetto random,
valutando lo stesso con intercetta variabile.
> m3 <- lmer(log.radon~floor+(1|state),data=radon)
> summary(m3)

Linear mixed model fit by REML ['lmerMod']


Formula: log.radon ~ floor + (1 | state)
Data: radon

REML criterion at convergence: 37365

Scaled residuals:
Min 1Q Median 3Q Max
-3.774 -0.632 -0.012 0.645 4.401

Random effects:
Groups Name Variance Std.Dev.
state (Intercept) 0.226 0.476
Residual 1.086 1.042
Number of obs: 12777, groups: state, 8

Fixed effects:
Estimate Std. Error t value
(Intercept) 0.85223 0.16857 5.06
floor -0.08426 0.00705 -11.95

Correlation of Fixed Effects:


(Intr)
floor -0.022

6. Si rappresenti graficamente la distribuzione degli effetti random del modello.

(Intercept)
ND
MN
PA
IN
MA
R5
MO
AZ

-0.5 0.0 0.5

Esercizio 7.3

Nel data set school della libreria ADati sono presenti dei dati relativi a 260 studenti
di scuola superiore. Le variabili presenti nel data set sono le seguenti: schid, codice
identificativo della scuola; public, status della scuola, pubblica yes o privata no; ratio,
rapporto studenti-docenti della scuola; percmin, percentuale di studenti appartenenti a
minoranze etniche; classid, codice identificativo della classe; stuid, codice identificativo
dello studente; sex, genere dello studente; ethn, gruppo etnico dello studente; ses, status
socio-economico della famiglia dello studente; homework, ore dedicate alla settimana ai
compiti di matematica; math, punteggio al test di matematica.
7 REGRESSIONE LINEARE MULTILIVELLO 169

1. Si importino i dati in R.
> data(school,package="ADati")

2. Si producano le statistiche descrittive ed i grafici idonei per valutare le distribuzioni


delle variabili del set di dati.
> summary(school)

schid public ratio percmin classid stuid sex


7000 :67 no : 67 Min. :10.0 Min. :0.00 7930 : 24 1841 : 1 male :132
25000:64 yes:193 1st Qu.:10.0 1st Qu.:1.00 7472 : 23 2002 : 1 female:128
62000:67 Median :14.0 Median :3.00 62821 : 23 2200 : 1
68000:62 Mean :14.5 Mean :2.83 24725 : 22 2665 : 1
3rd Qu.:18.0 3rd Qu.:5.00 25456 : 22 2874 : 1
Max. :22.0 Max. :7.00 62822 : 22 3096 : 1
(Other):124 (Other):254
ethn ses homework math
asian : 8 Min. :-2.4100 Min. :0.00 Min. :23.4
hispainc: 23 1st Qu.:-0.7700 1st Qu.:1.00 1st Qu.:44.3
black : 40 Median :-0.1450 Median :1.00 Median :52.1
white :189 Mean :-0.0733 Mean :2.02 Mean :52.7
3rd Qu.: 0.8125 3rd Qu.:3.00 3rd Qu.:60.5
Max. : 1.8500 Max. :7.00 Max. :83.6

schid public ratio percmin


Frequency

Frequency
80

60
0 50

0
0

7000 68000 no yes 10 16 22 0 2 4 6

school[, j] school[, j]
classid stuid sex ethn
0.0 1.0

120
20
0

7472 62823 1841 10378 male asian white

ses homework math


Frequency

Frequency

Frequency
0 100

40
50
0

-2 0 2 0 2 4 6 20 50 80

3. Si rappresenti graficamente la relazione tra le variabili homework e math differen-


ziando le varie scuole valutando se sia ipotizzabile un modello di regressione unico e
valido per tutte.
7 REGRESSIONE LINEARE MULTILIVELLO 170

7000 25000

X$math

X$math
60

60
30

30
0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7

62000
X$homework 68000
X$homework
X$math

X$math
60

60
30

30
0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7

4. Si definisca un modello di regressione semplice per valutare se homework sia un


predittore di math, si stimino i parametri e si valutino.
> LM <- lm(math~homework,data=school)
> summary(LM)

Call:
lm(formula = math ~ homework, data = school)

Residuals:
Min 1Q Median 3Q Max
-25.483 -6.908 -0.577 7.263 30.995

Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 45.265 1.027 44.1 <2e-16 ***
homework 3.669 0.403 9.1 <2e-16 ***
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 10.1 on 258 degrees of freedom


Multiple R-squared: 0.243,Adjusted R-squared: 0.24
F-statistic: 82.8 on 1 and 258 DF, p-value: <2e-16

5. Si aggiunga al modello testato al punto precedente l’effetto casuale delle scuole con-
siderando le intercette variabili, si stimino nuovamente i parametri confrontandoli
con il risultato del punto 4.
> MX1 <- lmer(math~homework+(1|schid),data=school)
> summary(MX1)

Linear mixed model fit by REML ['lmerMod']


Formula: math ~ homework + (1 | schid)
Data: school

REML criterion at convergence: 1861

Scaled residuals:
Min 1Q Median 3Q Max
-2.7417 -0.6248 -0.0194 0.6617 2.9074

Random effects:
Groups Name Variance Std.Dev.
schid (Intercept) 48.6 6.97
Residual 72.6 8.52
Number of obs: 260, groups: schid, 4
7 REGRESSIONE LINEARE MULTILIVELLO 171

Fixed effects:
Estimate Std. Error t value
(Intercept) 49.038 3.615 13.57
homework 1.754 0.395 4.44

Correlation of Fixed Effects:


(Intr)
homework -0.219

6. Si consideri un nuovo modello, aggiungendo al precedente le pendenze variabili ri-


spetto al fattore casuale scuole. Quindi si confrontino i due modelli per valutare
quale risulti essere migliore.
> MX2 <- lmer(math~homework+(homework|schid),data=school)
> anova(MX1,MX2)

Data: school
Models:
MX1: math ~ homework + (1 | schid)
MX2: math ~ homework + (homework | schid)
Df AIC BIC logLik deviance Chisq Chi Df Pr(>Chisq)
MX1 4 1873 1887 -932 1865
MX2 6 1874 1896 -931 1862 2.73 2 0.25

7. Si rappresentino graficamente gli effetti random del modello giudicato migliore dal
confronto eseguito al punto 6.

schid

(Intercept)
62000
68000
7000
25000

-5 0 5 10

8. Si produca il grafico di verosimiglianza profilo per i parametri del modello giudicato


migliore dal confronto eseguito al punto 6.
7 REGRESSIONE LINEARE MULTILIVELLO 172

σ1 σ (Intercept) homework

1.0
0.20

1.0

0.10

0.8
0.8
0.15

0.6
density

0.6
0.10

0.05

0.4
0.4
0.05

0.2
0.2
0.00

0.00
0.0

0.0
5 10 15 20 25 30 7.5 8.0 8.5 9.0 9.5 30 40 50 60 70 0.5 1.0 1.5 2.0 2.5 3.0

Esercizio 7.4

In uno studio sull’effetto dello stato di umore sull’attenzione vengono selezionati 24 soggetti
(i dati sono disponibili nel file mood.dat). Il compito dei soggetti consiste nell’individua-
zione di alcuni stimoli ed il punteggio è dato dal numero di risposte corrette. Ciascun
soggetto esegue il compito per tre volte in sequenza. Nella prima prova, di controllo, non
viene indotta alcuna alterazione. Prima dell’esecuzione del compito per la seconda prova,
al soggetto viene indotto uno stato di umore triste. Prima della terza prova al soggetto
viene indotto uno stato di umore allegro. Si vuole sapere se le prestazioni dei soggetti
variano in funzione dell’umore.
1. Si importino i dati in R.
> X <- read.table(paste(datadir,"mood.dat",sep=""),header=TRUE)

2. Si rappresenti graficamente la distribuzione dei punteggi nelle tre condizioni speri-


mentali (t0, t1, t2) con tre boxplot.
25
20
15
10
5
0

t0 t1 t2

3. Si aggiunga al grafico ottenuto al punto 2 la linea di tendenza delle medie. Quali


considerazioni è possibile trarre dalla lettura di questo grafico?
7 REGRESSIONE LINEARE MULTILIVELLO 173

25
20
15
10
5
0

t0 t1 t2

4. Si calcolino la matrice di covarianza e di correlazione tra i punteggi nelle tre condi-


zioni.
> cov(X[,-1])

t0 t1 t2
t0 29.101 11.09 -1.667
t1 11.087 15.07 2.000
t2 -1.667 2.00 14.058

> cor(X[,-1])

t0 t1 t2
t0 1.0000 0.5294 -0.0824
t1 0.5294 1.0000 0.1374
t2 -0.0824 0.1374 1.0000

5. Si stimino i parametri della retta di regressione considerando la condizione nei tre


momenti come predittore del punteggio.
> Y <- stack(X[,c("t0","t1","t2")])
> Y$subj <- X$subj
> (fit <- lm(values~ind,data=Y))

Call:
lm(formula = values ~ ind, data = Y)

Coefficients:
(Intercept) indt1 indt2
5.333 0.542 1.333

6. Si aggiunga al modello definito nel punto precedente la variabile subj come effetto
random per valutare se le intercette dei soggetti siano equivalenti.
> m1 <- lmer(values~ind+(1|subj),data=Y)

7. Si rappresentino graficamente le informazioni relative alle intercette dei soggetti.


7 REGRESSIONE LINEARE MULTILIVELLO 174

(Intercept)
n
w
m
l
g
x
q
v
s
t
p
h
a
k
u
b
d
i
c
f
r
j
e
o

-4 -2 0 2 4 6

8. Si testi l’ipotesi di uguaglianza delle intercette.


> library(RLRsim)
> exactLRT(m1,fit)

simulated finite sample distribution of LRT. (p-value based on 10000 simulated


values)

data:
LRT = 2.5, p-value = 0.05

Esercizio 7.5

In relazione ai dati dell’esercizio 5.6 si considerino le seguenti ipotesi: 1) la grandezza


dei numeri target influisce sulla grandezza degli scarti indicati dai bambini; 2) la rela-
zione definita nell’ipotesi 1 varia in funzione dell’età dei bambini; 3) la relazione definita
nell’ipotesi 1 varia in funzione del tipo di SNA.

1. Si individuino le variabili delle tre ipotesi e si identifichino i modelli opportuni per


valutarle.
2. Si ristrutturi il file SNA1.rda nella forma lunga (osservazioni × variabili) più oppor-
tuna per poter testare le ipotesi deifinite al punto 1.
> Y <- stack(SNA1[,paste("n",1:9,sep="")])
> Y$sogg <- 1:nrow(SNA1)
> Y$gruppo.eta <- SNA1$gruppo.eta
> Y$sna <- SNA1$sna
> Y$numero <- as.numeric(Y$ind)

3. Si testi l’ipotesi 1 considerando i soggetti come effetto random.


> m0 <- lmer(values~(1|sogg),data=Y) # modello nullo
> m1 <- lmer(values~numero+(1|sogg),data=Y)
> anova(m0,m1)
7 REGRESSIONE LINEARE MULTILIVELLO 175

Data: Y
Models:
m0: values ~ (1 | sogg)
m1: values ~ numero + (1 | sogg)
Df AIC BIC logLik deviance Chisq Chi Df Pr(>Chisq)
m0 3 2526 2539 -1260 2520
m1 4 2043 2061 -1018 2035 485 1 <2e-16 ***
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

4. Si aggiungano al modello testato al punto 3 gli effetti di età e tipo di SNA e se ne


valuti la significatività statistica.
> m2 <- lmer(values~numero+gruppo.eta+(1|sogg),data=Y)
> m3 <- lmer(values~numero+gruppo.eta+sna+(1|sogg),data=Y)
> anova(m0,m1,m2,m3)

Data: Y
Models:
m0: values ~ (1 | sogg)
m1: values ~ numero + (1 | sogg)
m2: values ~ numero + gruppo.eta + (1 | sogg)
m3: values ~ numero + gruppo.eta + sna + (1 | sogg)
Df AIC BIC logLik deviance Chisq Chi Df Pr(>Chisq)
m0 3 2526 2539 -1260 2520
m1 4 2043 2061 -1018 2035 484.61 1 < 2e-16 ***
m2 9 2045 2086 -1014 2027 7.94 5 0.16
m3 11 2026 2076 -1002 2004 22.76 2 1.1e-05 ***
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

5. Si analizzino graficamente gli effetti del modello con i tre predittori considerati e se
ne interpreti il significato.

2.0 1.1
0.9
1.0
1.5
0.8 0.9
1.0
0.8
0.7
0.5 0.7

0.6 0.6
0.0
0.5
0.5
-0.5
0.4

2 3 4 5 6 7 8 1 2 3 4 5 6 no-sna sna1 sna2

numero gruppo.eta sna

6. Si analizzino i residui dello stesso modello per valutare se abbiano una distribuzione
approssimativamente normale.
7 REGRESSIONE LINEARE MULTILIVELLO 176

Standardized residuals
2

-1

-2

-3

-2 0 2

Standard normal quantiles

Esercizio 7.6

Si riprendano in esame i dati ed il modello finale dell’esercizio 5.7 al fine di considerare


anche le eventuali differenze tra le classi.
1. Si modifichi il modello aggiungendo le intercette variabili per le classi. Si stimino e
si individuino i valori dei parametri stimati.
> (mx1 <- lmer(math~anno*docente+(1|classe),data=mathschool))

Linear mixed model fit by REML ['lmerMod']


Formula: math ~ anno * docente + (1 | classe)
Data: mathschool
REML criterion at convergence: 6665
Random effects:
Groups Name Std.Dev.
classe (Intercept) 6.37
Residual 7.17
Number of obs: 980, groups: classe, 7
Fixed Effects:
(Intercept) anno docenteprof2 anno:docenteprof2
19.796 10.244 -0.254 -6.858

2. Si valutino graficamente le differenze tra intercette nelle classi, interpretando il


risultato.
classe

(Intercept)
101

104

106

105

103

107

102

-10 -5 0 5
7 REGRESSIONE LINEARE MULTILIVELLO 177

3. Si modifichi il modello del punto 1 aggiungendo anche le pendenze variabili. Si


stimino e si individuino i valori dei parametri stimati.
> (mx2 <- lmer(math~anno*docente+(anno|classe),data=mathschool))

Linear mixed model fit by REML ['lmerMod']


Formula: math ~ anno * docente + (anno | classe)
Data: mathschool
REML criterion at convergence: 6532
Random effects:
Groups Name Std.Dev. Corr
classe (Intercept) 0.123
anno 2.087 1.00
Residual 6.694
Number of obs: 980, groups: classe, 7
Fixed Effects:
(Intercept) anno docenteprof2 anno:docenteprof2
19.046 10.493 -0.121 -6.900

4. Si valutino graficamente le differenze tra pendenze nelle classi, interpretando il


risultato.
classe

(Intercept) anno
101

104

106

105

103

107

102

-0.2 -0.1 0.0 0.1 -3 -2 -1 0 1 2

5. Si individui con un opportuno confronto, quale tra i due modelli definiti ai punti 1
e 3 risulti migliore.
> anova(mx1,mx2)

refitting model(s) with ML (instead of REML)

Data: mathschool
Models:
mx1: math ~ anno * docente + (1 | classe)
mx2: math ~ anno * docente + (anno | classe)
Df AIC BIC logLik deviance Chisq Chi Df Pr(>Chisq)
mx1 6 6683 6712 -3335 6671
mx2 8 6554 6593 -3269 6538 133 2 <2e-16 ***
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Esercizio 7.7

Si ripeta l’esercizio 7.6 utilizzando i soggetti come effetto random al posto della classe, per
valutare le differenze individuali.
7 REGRESSIONE LINEARE MULTILIVELLO 178

> # modello ad intercette variabili


> (mx1 <- lmer(math~anno*docente+(1|subj),data=mathschool))

Linear mixed model fit by REML ['lmerMod']


Formula: math ~ anno * docente + (1 | subj)
Data: mathschool
REML criterion at convergence: 6402
Random effects:
Groups Name Std.Dev.
subj (Intercept) 7.65
Residual 4.89
Number of obs: 980, groups: subj, 200
Fixed Effects:
(Intercept) anno docenteprof2 anno:docenteprof2
19.264 10.200 -0.453 -6.810

subj

1023
1152
(Intercept)
1048
1111
1163
1120
1095
1124
1131
1092
1028
1183
1093
1097
1151
1020
1192
1186
1142
1011
1084
1062
1069
1072
1068
1133
1161
1096
1112
1041
1035
1024
1044
1115
1103
1123
1108
1033
1014
1181
1063
1031
1178
1107
1077
1064
1156
1130
1059
1018
1058
1050
1008
1104
1057
1188
1021
1200
1099
1166
1065
1169
1087
1194
1006
1144
1061
1012
1113
1091
1117
1049
1148
1004
1180
1184
1022
1182
1179
1160
1086
1076
1145
1137
1051
1187
1129
1005
1052
1026
1118
1083
1079
1158
1199
1088
1042
1165
1197
1126
1046
1171
1040
1191
1015
1039
1081
1174
1149
1055
1105
1054
1017
1016
1141
1089
1090
1190
1038
1001
1047
1010
1074
1176
1134
1138
1150
1116
1066
1153
1009
1070
1034
1098
1032
1168
1195
1071
1140
1073
1196
1102
1173
1154
1080
1030
1007
1132
1177
1078
1037
1170
1067
1002
1013
1193
1003
1029
1027
1185
1135
1101
1127
1125
1043
1025
1019
1159
1155
1128
1146
1060
1045
1162
1056
1143
1036
1114
1082
1110
1198
1053
1122
1119
1100
1175
1139
1147
1172
1157
1109
1085
1167
1121
1164
1094
1136
1075
1106
1189

-20 -10 0 10 20

> # modello ad intercette e pendenze variabili


> (mx2 <- lmer(math~anno*docente+(anno|subj),data=mathschool))

Linear mixed model fit by REML ['lmerMod']


Formula: math ~ anno * docente + (anno | subj)
Data: mathschool
REML criterion at convergence: 5447
Random effects:
Groups Name Std.Dev. Corr
subj (Intercept) 0.117
anno 2.680 -1.00
Residual 2.587
Number of obs: 980, groups: subj, 200
Fixed Effects:
(Intercept) anno docenteprof2 anno:docenteprof2
19.0581 10.2628 -0.0315 -6.9577
7 REGRESSIONE LINEARE MULTILIVELLO 179

subj

1106
1189
(Intercept) anno
1075
1094
1136
1164
1167
1121
1109
1085
1036
1172
1119
1157
1147
1110
1139
1082
1175
1100
1122
1198
1162
1143
1114
1019
1056
1060
1045
1125
1043
1034
1159
1128
1025
1193
1053
1003
1146
1029
1155
1135
1027
1127
1067
1013
1185
1002
1101
1070
1009
1037
1007
1170
1030
1078
1132
1177
1150
1154
1195
1140
1073
1173
1196
1102
1168
1080
1066
1071
1134
1098
1153
1032
1176
1074
1116
1138
1190
1010
1054
1089
1001
1047
1017
1090
1038
1055
1141
1016
1015
1105
1149
1039
1191
1081
1040
1126
1042
1174
1199
1118
1197
1165
1046
1171
1187
1079
1088
1005
1086
1158
1083
1145
1051
1026
1052
1180
1160
1076
1129
1179
1137
1022
1091
1184
1049
1113
1117
1148
1144
1182
1012
1087
1004
1169
1194
1099
1006
1061
1200
1065
1166
1021
1057
1104
1050
1058
1188
1018
1008
1077
1059
1031
1130
1064
1156
1063
1181
1033
1107
1035
1178
1044
1108
1014
1103
1024
1041
1115
1123
1096
1011
1161
1133
1112
1062
1142
1072
1069
1186
1084
1192
1020
1093
1151
1183
1097
1028
1111
1092
1131
1095
1124
1120
1163
1068
1048
1152
1023

-0.3 -0.2 -0.1 0.0 0.1 0.2 -5 0 5

> # confronto tra i modelli


> anova(mx1,mx2)

refitting model(s) with ML (instead of REML)

Data: mathschool
Models:
mx1: math ~ anno * docente + (1 | subj)
mx2: math ~ anno * docente + (anno | subj)
Df AIC BIC logLik deviance Chisq Chi Df Pr(>Chisq)
mx1 6 6413 6443 -3201 6401
mx2 8 5460 5500 -2722 5444 957 2 <2e-16 ***
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Esercizio 7.8

Si riconsiderino i dati dell’esercizio 1.4; in particolare si vuole sapere se le conoscenze


di matematica (rilevate nella variabile mathquiz) siano predittive dei punteggi al test di
statistica (variabile statquiz) tenendo conto di eventuali differenze legate al tipo di laurea
triennale conseguita (variabile major).

1. Si importino i dati in R.
> X <- read.spss(paste(datadir,"Sara_dataset.sav",sep=""),to.data.frame=TRUE)

2. Si rappresentino graficamente i punteggi del test di statistica in funzione del pun-


teggio in matematica.
7 REGRESSIONE LINEARE MULTILIVELLO 180

10
8
statquiz

6
4
2

10 20 30 40 50

mathquiz

3. Si stimino i parametri del modello di regressione in cui il punteggio di matematica è


predittore del punteggio di statistica.
> (lm1 <- lm(statquiz~mathquiz,data=X))

Call:
lm(formula = statquiz ~ mathquiz, data = X)

Coefficients:
(Intercept) mathquiz
4.144 0.093

4. Si modifichi il modello del punto precedente per determinare se vi sia un effetto del
tipo di laurea, valutando se tale effetto risulti statisticamente significativo.
> lm2 <- lm(statquiz~mathquiz+major,data=X)
> anova(lm2)

Analysis of Variance Table

Response: statquiz
Df Sum Sq Mean Sq F value Pr(>F)
mathquiz 1 65.3 65.3 28.49 8.8e-07 ***
major 4 6.8 1.7 0.74 0.57
Residuals 79 181.0 2.3
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

5. Si calcolino i Bayes Factor relativi ai modelli dei punti 3 e 4 e si determini quale tra
i due risulti migliore.
> BF1 <- lmBF(statquiz~mathquiz,data=na.omit(X))
> BF2 <- lmBF(statquiz~mathquiz+major,data=na.omit(X))
> BF2/BF1

Bayes factor analysis


--------------
[1] mathquiz + major : 0.1344 ±1.66%

Against denominator:
statquiz ~ mathquiz
---
Bayes factor type: BFlinearModel, JZS
7 REGRESSIONE LINEARE MULTILIVELLO 181

6. Si modifichi il modello del punto 4 considerando la variabile major come effetto


casuale, per valutare la variabilità delle intercette e delle pendenze. Si stimino i
parametri del modello.
> mx2 <- lmer(statquiz~mathquiz+(mathquiz|major),data=X)
> summary(mx2)

Linear mixed model fit by REML ['lmerMod']


Formula: statquiz ~ mathquiz + (mathquiz | major)
Data: X

REML criterion at convergence: 316.3

Scaled residuals:
Min 1Q Median 3Q Max
-3.191 -0.595 0.147 0.703 1.854

Random effects:
Groups Name Variance Std.Dev. Corr
major (Intercept) 0.219593 0.4686
mathquiz 0.000474 0.0218 -1.00
Residual 2.207582 1.4858
Number of obs: 85, groups: major, 5

Fixed effects:
Estimate Std. Error t value
(Intercept) 4.1141 0.5654 7.28
mathquiz 0.0932 0.0198 4.71

Correlation of Fixed Effects:


(Intr)
mathquiz -0.951

7. Si rappresentino graficamente gli effetti random del modello e si interpreti il risultato.

-1.0 -0.5 0.0 0.5 1.0

(Intercept) mathquiz

Bio

Pre-Med

Soc

Econ

Psych

-1.0 -0.5 0.0 0.5 1.0

8. Si calcolino gli intervalli di confidenza dei parametri del modello del punto 6.
> confint(mx2) # error

Esercizio 7.9

Si riprendano in considerazione i dati dell’esercizio 6.15.


7 REGRESSIONE LINEARE MULTILIVELLO 182

1. Si importino i dati in R
> load(paste(datadir,"crimi.rda",sep=""))

2. Si analizzino le distribuzioni univariate delle variabli nel data-set.


Preg Paura Strat Extra

80

100
60

100
40
30

40

0 40
0

0
20 60 100 0 20 40 60 10 30 1 3 5
DisFis DisSoc Vitt Quartiere

80
50

100
40

40
20
0

0
0 10 20 5 15 25 0 1 2 3 4 A B C D

3. Si analizzino le relazioni bivariate delle variabili nel data-set.

10 40 1 3 5 5 15 25

Preg

20
10 60

Paura

Strat
10
Extra
1 4

DisFis
5
25

DisSoc
5

Vitt
0

20 60 10 30 5 15 0 2 4

4. Si utilizzi il Bayes Factor per determinare quali siano (escluse le variabili strategia e
quartiere) i due migliori predittori della paura della criminalità.
> BF <- generalTestBF(Paura~Preg+Extra+DisFis+DisSoc+Vitt,data=crimi)
> sort(BF)

Bayes factor analysis


--------------
[11] Vitt : 0.1191 ±0%
[12] DisFis : 0.12 ±0%
[13] DisSoc : 0.1217 ±0%
7 REGRESSIONE LINEARE MULTILIVELLO 183

[15] Extra : 0.261 ±0%


[24] Preg : 9.025e+14 ±0%

Against denominator:
Intercept only
---

5. Si testino i parametri del modello con i due predittori individuati, valutandone anche
l’eventuale interazione.
> LM1 <- lm(Paura~Preg+Extra,data=crimi)
> LM2 <- lm(Paura~Preg*Extra,data=crimi)
> anova(LM1,LM2)

Analysis of Variance Table

Model 1: Paura ~ Preg + Extra


Model 2: Paura ~ Preg * Extra
Res.Df RSS Df Sum of Sq F Pr(>F)
1 347 29379
2 346 29182 1 197 2.34 0.13

6. Sulla base del migliore modello individuato al punto precedente, si aggiunga nel
modello la variabile Quartiere per valutare la variabilità delle intercette rispetto a
quest’ultima.
> (ML1 <- lmer(Paura~Preg+Extra+(1|Quartiere),data=crimi))

Linear mixed model fit by REML ['lmerMod']


Formula: Paura ~ Preg + Extra + (1 | Quartiere)
Data: crimi
REML criterion at convergence: 2162
Random effects:
Groups Name Std.Dev.
Quartiere (Intercept) 8.96
Residual 5.16
Number of obs: 350, groups: Quartiere, 4
Fixed Effects:
(Intercept) Preg Extra
13.525 0.192 -0.380

7. Si stimino gli intervalli di confidenza dei parametri del modello considerato al punto
precedente.
> confint(ML1)

Computing profile confidence intervals ...

2.5 % 97.5 %
.sig01 4.3722 19.0068
.sigma 4.7824 5.5514
(Intercept) 3.1408 23.8332
Preg 0.1688 0.2153
Extra -1.5590 0.7814

8. Si modifichi il modello definito al punto 6 aggiungendo la stima del parametro relativo


alla variabilità delle pendenze. Si confronti questo nuovo modello con quello del
punto 6.
> ML2 <- lmer(Paura~Preg+Extra+(Preg+Extra|Quartiere),data=crimi)
> anova(ML1,ML2)
7 REGRESSIONE LINEARE MULTILIVELLO 184

refitting model(s) with ML (instead of REML)

Data: crimi
Models:
ML1: Paura ~ Preg + Extra + (1 | Quartiere)
ML2: Paura ~ Preg + Extra + (Preg + Extra | Quartiere)
Df AIC BIC logLik deviance Chisq Chi Df Pr(>Chisq)
ML1 5 2171 2190 -1080 2161
ML2 10 1671 1710 -826 1651 509 5 <2e-16 ***
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

9. Si rappresentino graficamente gli effetti fissi del modello migliore tra quelli confron-
tati al punto 8.
Preg effect plot Extra effect plot

50 30

40 25
Paura

Paura

30 20

20 15

10

20 30 40 50 60 70 80 90 100 1 2 3 4 5 6

Preg Extra

10. Si rappresentino graficamente gli effetti random del modello migliore tra quelli
confrontati al punto 8.
Quartiere

(Intercept) Preg Extra

-4 -2 0 2 4 -0.3 -0.2 -0.1 0.0 0.1 0.2 0.3 -1.0 -0.5 0.0 0.5 1.0
Elenco funzioni suggerite per le soluzioni:

[1] "abline" "aggregate" "AIC" "allEffects"


[5] "anova" "apply" "as.numeric" "attach"
[9] "axis" "barchart" "barplot" "bartlett.test"
[13] "BIC" "binom.test" "box" "boxplot"
[17] "c" "campionaria.media" "cbind" "choose"
[21] "CI.mean" "coef" "colnames" "confint"
[25] "cor" "cov" "cumsum" "curve"
[29] "cut" "data" "data.frame" "dbinom"
[33] "density" "densityplot" "describe" "detach"
[37] "dnorm" "dotplot" "dt" "ecdf"
[41] "errbar" "etasq" "exactLRT" "exp"
[45] "expand.grid" "factor" "file.choose" "fitted"
[49] "generalTestBF" "gsub" "hist" "inspect"
[53] "ks.test" "legend" "length" "levels"
[57] "library" "lines" "lm" "lmBF"
[61] "lmer" "load" "matrix" "max"
[65] "mean" "median" "min" "moda"
[69] "names" "nrow" "ordered" "pairs"
[73] "par" "partial.eta2" "paste" "permutations"
[77] "plot" "plotmeans" "pnorm" "points"
[81] "print" "profile" "qbinom" "qqline"
[85] "qqmath" "qqnorm" "qt" "quantile"
[89] "ranef" "range" "rbind" "read.csv2"
[93] "read.spss" "read.table" "read.xls" "rep"
[97] "resid" "residuals" "rm" "rnorm"
[101] "round" "rownames" "rstandard" "sample"
[105] "save" "scan" "sd" "segments"
[109] "sem" "semPaths" "seq" "shapiro.test"
[113] "sigma2" "sink" "sort" "sqrt"
[117] "stack" "str" "subset" "sum"
[121] "summary" "table" "tapply" "TCD"
[125] "t.test" "unique" "var"

Il presente elenco contiene alcune tra le molte funzioni di R; in particolare si tratta


di comandi che possono risultare utili nella soluzione degli esercizi proposti. Per vedere i
dettagli sull’uso di queste funzioni si consulti il relativo help.
Indice dei data-set
anova1.dat, 81 Sara dataset.sav, 6, 179
anova2.dat, 105 Sara dataset.txt, 6
anova4.dat, 91 Sara dataset.xls, 6
auto.sav, 113 school, 168
autor.dat, 53 sciatori.sav, 17, 165
Sewell.rda, 148
crimi.rda, 156, 181 SNA1.rda, 117, 174
studenti.dat, 72
donne.dat, 95
testingresso.sav, 107, 137
esame.txt, 29, 42
extra.dat, 68 vaes2015.rda, 121, 158
eysenck.dat, 111

Finn.dat, 135
firstaid.dat, 75

gestazioni.dat, 78
Glodberger.dat, 133
gothic.rda, 125

healdrug.dat, 13
Hooker.dat, 54

impiegati.sav, 101

Kerchoff.rda, 149, 151


Kluegel.dat, 141

mathschool.rda, 118, 176, 177


memory.dat, 99
metodo.sav, 109
MetS.dat, 61
MFTP.dat, 43
MMPI.dat, 86
mmse.dat, 63
mood.dat, 172

orevoti.csv, 97

parenting.rda, 128, 161


pazienti.xls, 9, 10, 12
precision.dat, 83

radar.csv, 93
radon.rda, 166
redditi.dat, 15
relbambini.dat, 88
Romney.rda, 153, 154
Roth.rda, 144

Potrebbero piacerti anche