ESERCITAZIONI R 1. Gestione dati 1 – Caricamento dati > Dati str(Dati) 'data.frame': 42 obs.

99
ESERCITAZIONI R 1

Transcript of ESERCITAZIONI R 1. Gestione dati 1 – Caricamento dati > Dati str(Dati) 'data.frame': 42 obs.

Page 1: ESERCITAZIONI R 1. Gestione dati 1 – Caricamento dati > Dati str(Dati) 'data.frame': 42 obs.

ESERCITAZIONI R

1

Page 2: ESERCITAZIONI R 1. Gestione dati 1 – Caricamento dati > Dati str(Dati) 'data.frame': 42 obs.

Gestione dati 1 – Caricamento dati

> Dati<-read.table("Dataset_220311.csv", header=TRUE, sep=";")

> str(Dati)'data.frame': 42 obs. of 6 variables:$ SESSO: int 2 1 2 2 2 2 1 1 1 2 ... $ ETA : int 26 29 30 28 37 51 24 35 43 17 ...$ REG : int 1 1 1 1 2 2 2 3 3 3 ...$ TIT : int 3 3 4 3 3 3 4 3 2 2 ...$ GV : int 10 14 14 7 14 21 14 16 20 15 ...$ RED : int 900 1200 1200 1000 1400 2000 800 2300 1700 0

...

2

Page 3: ESERCITAZIONI R 1. Gestione dati 1 – Caricamento dati > Dati str(Dati) 'data.frame': 42 obs.

Gestione dati 2 – Conversione variabili quantitative in fattori

> Dati$SESSO<-factor(Dati$SESSO, labels=c("M","F"))

> str(Dati)'data.frame': 42 obs. of 6 variables: $ SESSO: Factor w/ 2 levels "M","F": 2 1 2 2 2 2 1 1 1 2 ... $ ETA : int 26 29 30 28 37 51 24 35 43 17 ... $ REG : int 1 1 1 1 2 2 2 3 3 3 ... $ TIT : int 3 3 4 3 3 3 4 3 2 2 ... $ GV : int 10 14 14 7 14 21 14 16 20 15 ... $ RED : int 900 1200 1200 1000 1400 2000 800 2300 1700

0 ...

3

Page 4: ESERCITAZIONI R 1. Gestione dati 1 – Caricamento dati > Dati str(Dati) 'data.frame': 42 obs.

Gestione dati 3 – Conversione variabili quantitative in fattori

> library(Rcmdr)……….> str(Dati)'data.frame': 42 obs. of 6 variables: $ SESSO: Factor w/ 2 levels "M","F": 2 1 2 2 2 2 1 1 1 2 ... $ ETA : int 26 29 30 28 37 51 24 35 43 17 ... $ REG : Factor w/ 5 levels "Lazio","Campania",..: 1 1 1 1 2 2 2

3 3 3 ... $ TIT : Factor w/ 4 levels "L. elementare",..: 3 3 4 3 3 3 4 3 2

2 ... $ GV : int 10 14 14 7 14 21 14 16 20 15 ... $ RED : int 900 1200 1200 1000 1400 2000 800 2300 1700

0 ...

4

Page 5: ESERCITAZIONI R 1. Gestione dati 1 – Caricamento dati > Dati str(Dati) 'data.frame': 42 obs.

Gestione dati 4 – Rinominare una variabile e salvare il file di dati attivo

> names(Dati)[1] "SESSO" "ETA" "REG" "TIT" "GV" "RED"

> names(Dati)[c(5)]<-c("GI_VAC")

> str(Dati)'data.frame': 42 obs. of 6 variables: $ SESSO : Factor w/ 2 levels "M","F": 2 1 2 2 2 2 1 1 1 2 ... $ ETA : int 26 29 30 28 37 51 24 35 43 17 ... $ REG : Factor w/ 5 levels "Lazio","Campania",..: 1 1 1 1 2 2 2 3

3 3 ... $ TIT : Factor w/ 4 levels "Lic. elementare",..: 3 3 4 3 3 3 4 3 2

2 ... $ GI_VAC: int 10 14 14 7 14 21 14 16 20 15 ... $ RED : int 900 1200 1200 1000 1400 2000 800 2300 1700 0 ...

> save("Dati", file="C:/Users/Mario/Documents/Dati.rda")

(> load("C:/Users/Mario/Documents/Dati.rda"))5

Page 6: ESERCITAZIONI R 1. Gestione dati 1 – Caricamento dati > Dati str(Dati) 'data.frame': 42 obs.

Analisi monovariata 1 – Distribuzioni di frequenza

attach(Dati)

> table(REG)

REG Lazio Campania Toscana Sicilia Lombardia 11 8 8 7 8

> table(REG)/length(REG)

REG Lazio Campania Toscana Sicilia Lombardia 0.2619048 0.1904762 0.1904762 0.1666667 0.1904762

6

Page 7: ESERCITAZIONI R 1. Gestione dati 1 – Caricamento dati > Dati str(Dati) 'data.frame': 42 obs.

Analisi monovariata 2 – Distribuzioni di frequenza e rappresentazioni grafiche

> (table(REG)/length(REG))*100REG Lazio Campania Toscana Sicilia Lombardia 26.19048 19.04762 19.04762 16.66667 19.04762

> pie(table(REG))

7

Page 8: ESERCITAZIONI R 1. Gestione dati 1 – Caricamento dati > Dati str(Dati) 'data.frame': 42 obs.

Analisi monovariata 3 – Rappresentazioni grafiche

> colori=c("red","blue","yellow","green","orange")

> pie(table(REG), col=colori, main="Diagramma a torta delle regioni di provenienza")

8

Page 9: ESERCITAZIONI R 1. Gestione dati 1 – Caricamento dati > Dati str(Dati) 'data.frame': 42 obs.

Analisi monovariata 4 – Rappresentazioni grafiche

> slices<-c(26,19,19,17,19)

> lbs<-c("Lazio","Campania","Toscana","Sicilia","Lombardia")

> lbs<-paste(lbs,slices)

> lbs<-paste(lbs,"%",sep="")

> pie(slices, labels=lbs, col=colori,main="Diagramma a torta delle regioni di provenienza")

9

Page 10: ESERCITAZIONI R 1. Gestione dati 1 – Caricamento dati > Dati str(Dati) 'data.frame': 42 obs.

Analisi monovariata 5 – Rappresentazioni grafiche

10

Page 11: ESERCITAZIONI R 1. Gestione dati 1 – Caricamento dati > Dati str(Dati) 'data.frame': 42 obs.

Analisi monovariata 6 – Rappresentazioni grafiche

> library(plotrix)

> pie3D(slices,labels=lbs, col=colori, main="Diagramma a torta delle regioni di provenienza")

11

Page 12: ESERCITAZIONI R 1. Gestione dati 1 – Caricamento dati > Dati str(Dati) 'data.frame': 42 obs.

Analisi monovariata 7 – Rappresentazioni grafiche

> plot(REG)

12

> plot(REG, col="dark blue", ylim=c(0,12), main="Grafico a barre delle regioni di provenienza")

Page 13: ESERCITAZIONI R 1. Gestione dati 1 – Caricamento dati > Dati str(Dati) 'data.frame': 42 obs.

Analisi monovariata 8 – Variabili quantitative

> summary(GI_VAC) Min. 1st Qu. Median Mean 3rd Qu. Max. 3.00 12.00 14.00 15.21 19.75 30.00

> mean(GI_VAC)[1] 15.21429

> median(GI_VAC)[1] 14

> min(GI_VAC)[1] 3

13

Page 14: ESERCITAZIONI R 1. Gestione dati 1 – Caricamento dati > Dati str(Dati) 'data.frame': 42 obs.

Analisi monovariata 9 – Variabili quantitative

> max(GI_VAC)[1] 30

> range(GI_VAC)[1] 3 30

> quantile(GI_VAC) 0% 25% 50% 75% 100% 3.00 12.00 14.00 19.75 30.00

14

Page 15: ESERCITAZIONI R 1. Gestione dati 1 – Caricamento dati > Dati str(Dati) 'data.frame': 42 obs.

Analisi monovariata 10 – Variabili quantitative

> var(GI_VAC)[1] 32.70906

> sd(GI_VAC)[1] 5.719183

> cv(GI_VAC) #richiede il pacchetto labstatR[1] 0.3714067

15

Page 16: ESERCITAZIONI R 1. Gestione dati 1 – Caricamento dati > Dati str(Dati) 'data.frame': 42 obs.

Analisi monovariata 11 – Variabili quantitative Boxplot

> boxplot(GI_VAC, main="Boxplot distribuzione giorni vacanza")

16

Page 17: ESERCITAZIONI R 1. Gestione dati 1 – Caricamento dati > Dati str(Dati) 'data.frame': 42 obs.

Analisi monovariata 12 – Variabili quantitative: aggregazione delle modalità in classi

> table(ETA)ETA10 17 18 19 21 23 24 25 26 27 28 29 30 31 32 34 35 37 39 41

43 44 45 49 51 52 55 59 65 66 74 1 1 1 1 1 2 1 1 1 2 3 1 1 1 1 1 1 3 1 1 2 2 1 1 1

2 1 2 2 1 1

> table(cut(ETA,breaks=c(0,20,40,60,80)))  (0,20] (20,40] (40,60] (60,80] 4 21 13 4

> table(cut(ETA,breaks=c(0,20,40,60,80),right=FALSE))  [0,20) [20,40) [40,60) [60,80) 4 21 13 4

17

Page 18: ESERCITAZIONI R 1. Gestione dati 1 – Caricamento dati > Dati str(Dati) 'data.frame': 42 obs.

Analisi monovariata 13 – Variabili quantitative rappresentazioni grafiche

> hist(ETA)

> hist(ETA,xlab="Età",col="orange", main="Istogramma delle età")

18

Page 19: ESERCITAZIONI R 1. Gestione dati 1 – Caricamento dati > Dati str(Dati) 'data.frame': 42 obs.

Analisi monovariata 14 – Rappresentazioni grafiche

> hist(ETA,c(10,20,30,50,80),xlab="Età",col="orange", main="Istogramma delle età")

19

Page 20: ESERCITAZIONI R 1. Gestione dati 1 – Caricamento dati > Dati str(Dati) 'data.frame': 42 obs.

Analisi monovariata 15 – Variabili quantitative: rappresentazioni grafiche

Nella precedente espressione, di default le classi sono aperte a sinistra: (a,b] ad eccezione della prima

Aggiungendo il parametro right impostato a FALSE le classi sono invece aperte a destra: [a,b)

Il comando diventerebbe:

> hist(ETA,c(10,20,30,50,80),right=FALSE, xlab="Età",col="orange", main="Istogramma delle età")

20

Page 21: ESERCITAZIONI R 1. Gestione dati 1 – Caricamento dati > Dati str(Dati) 'data.frame': 42 obs.

Analisi monovariata 16 – Variabili quantitative: concentrazione di caratteri trasferibili

> table(RED)RED 0 600 800 900 1000 1200 1300 1400 1500 1600 1700 1800 1900 2000 2100 2300

2600 3000 5 1 1 2 5 5 2 3 1 5 3 1 1 3 1 1 1 1

> gini(RED) #richiede il pacchetto labstatR

 $R

[1] 0.2827435

……

 

21

Page 22: ESERCITAZIONI R 1. Gestione dati 1 – Caricamento dati > Dati str(Dati) 'data.frame': 42 obs.

Analisi monovariata 17 – Variabili quantitative: concentrazione di caratteri trasferibili

22

Page 23: ESERCITAZIONI R 1. Gestione dati 1 – Caricamento dati > Dati str(Dati) 'data.frame': 42 obs.

Analisi bivariata 1 – Tabelle di contingenza

>tab1<-table(SESSO, REG)

> tab1 REGSESSO Lazio Campania Toscana Sicilia Lombardia M 4 4 6 3 4 F 7 4 2 4 4

23

Page 24: ESERCITAZIONI R 1. Gestione dati 1 – Caricamento dati > Dati str(Dati) 'data.frame': 42 obs.

Analisi bivariata 2 – Tabelle di contingenza

> margin.table(tab1, margin=1)SESSO M F 21 21

> margin.table(tab1, margin=2)REG Lazio Campania Toscana Sicilia Lombardia 11 8 8 7 8

> margin.table(tab1)[1] 42

24

Page 25: ESERCITAZIONI R 1. Gestione dati 1 – Caricamento dati > Dati str(Dati) 'data.frame': 42 obs.

Analisi bivariata 3 – Tabelle di contingenza – rappresentazione grafica

> barplot(tab1,ylab="Sesso", beside=T, col=c("dark red", "orange"),main="Distribuzione per sesso e per regione di provenienza")

> legend("topright",c("M","F"),fill=c("dark red", "orange"))

25

Page 26: ESERCITAZIONI R 1. Gestione dati 1 – Caricamento dati > Dati str(Dati) 'data.frame': 42 obs.

Analisi bivariata 4 – Tabelle di contingenza rappresentazione grafica

> barplot(tab1,ylab="Sesso", col=c("dark red", "orange"),main="Distribuzione per sesso e per regione di provenienza")

> legend("topright",c("M","F"),fill=c("dark red", "orange"))

26

Page 27: ESERCITAZIONI R 1. Gestione dati 1 – Caricamento dati > Dati str(Dati) 'data.frame': 42 obs.

Analisi bivariata 5 – Misure di asociazione tra due variabili nominali

Se il campione è non probabilistico si può utilizzare l’ndice chi quadrato (e le sue misure derivate) per verificare se esiste dipendenza tra due caratteri tipicamente qualitativi nominali, ma anche ordinali o quantitativi divisi in classi

> chi2(REG,TIT)[1] 0.1121711

> phi2<-chi2(REG,TIT)/42> phi2[1] 0.002670741

> V<-sqrt(phi2/3)> V[1] 0.02983701

27

Page 28: ESERCITAZIONI R 1. Gestione dati 1 – Caricamento dati > Dati str(Dati) 'data.frame': 42 obs.

Analisi bivariata 6 – Misure di asociazione tra due variabili nominali

Se invece il campione è probabilistico e si può fare inferenza, è utile calcolare il test del chi quadrato

> chisq.test(tab3)

Pearson's Chi-squared test

data: tab3 X-squared = 14.1336, df = 12, p-value = 0.2923

28

Page 29: ESERCITAZIONI R 1. Gestione dati 1 – Caricamento dati > Dati str(Dati) 'data.frame': 42 obs.

Analisi bivariata 7 – Misure di asociazione tra due variabili quantitative

La correlazione misura quale direzione e quanto intenso è il legame lineare esistente tra due variabili quantitative. Si utilizza di solito il coefficiente di correlazione lineare di Pearson

ρ=σxy/σxσy

> cor(ETA,RED)[1] 0.6339968

29

Page 30: ESERCITAZIONI R 1. Gestione dati 1 – Caricamento dati > Dati str(Dati) 'data.frame': 42 obs.

Analisi bivariata 8 –Variabili quantitative rappresentazione grafica

> plot(ETA,RED,xlab="Età",ylab="Reddito mensile", main="Grafico a dispersione del reddito e dell'età")

30

Page 31: ESERCITAZIONI R 1. Gestione dati 1 – Caricamento dati > Dati str(Dati) 'data.frame': 42 obs.

31

Regressione Lineare

Page 32: ESERCITAZIONI R 1. Gestione dati 1 – Caricamento dati > Dati str(Dati) 'data.frame': 42 obs.

32

Page 33: ESERCITAZIONI R 1. Gestione dati 1 – Caricamento dati > Dati str(Dati) 'data.frame': 42 obs.

33

Page 34: ESERCITAZIONI R 1. Gestione dati 1 – Caricamento dati > Dati str(Dati) 'data.frame': 42 obs.

34

In R si avrà:

Il coefficiente dell’intercetta (239,512) costituisce il valore α dell’equazione della retta (ovvero l’intersezione tra la retta e l’asse delle ordinate, il coefficiente di RED (28,417) costituisce il valore β, ovvero il coefficiente angolare della retta. Dunque:

RED=239,512 + 28,417*ETA

Page 35: ESERCITAZIONI R 1. Gestione dati 1 – Caricamento dati > Dati str(Dati) 'data.frame': 42 obs.

35

I valori stimati di reddito in funzione dell’età mediante la retta di regressione si ottengono come segue:

Il significato del coefficiente di regressione è il seguente: per ogni incremento unitario della variabile indipendente, la variabile dipendente cresce di 28,417 unità.

Page 36: ESERCITAZIONI R 1. Gestione dati 1 – Caricamento dati > Dati str(Dati) 'data.frame': 42 obs.

36

La retta può essere rappresentata all’interno del diagramma a dispersione delle due variabili nel modo seguente:

10 20 30 40 50 60 70

05

00

10

00

15

00

20

00

25

00

30

00

Grafico a dispersione del reddito e dell'età

Età

Re

dd

ito m

en

sile

Page 37: ESERCITAZIONI R 1. Gestione dati 1 – Caricamento dati > Dati str(Dati) 'data.frame': 42 obs.

37

Una retta di regressione multipla si ottiene semplicemente inserendo più di una variabile indipendente:

Page 38: ESERCITAZIONI R 1. Gestione dati 1 – Caricamento dati > Dati str(Dati) 'data.frame': 42 obs.

38

In questo caso il significato dei coefficienti di regressione, ad esempio di quello dell’età è il seguente: per ogni incremento unitario dell’età, mantendo costanti le altre variabili indipendenti (ovvero in questo caso la sola variabile GI_VAC) , la variabile dipendente cresce di 30,936 unità.

Page 39: ESERCITAZIONI R 1. Gestione dati 1 – Caricamento dati > Dati str(Dati) 'data.frame': 42 obs.

Regressione Logistica

39

Page 40: ESERCITAZIONI R 1. Gestione dati 1 – Caricamento dati > Dati str(Dati) 'data.frame': 42 obs.

Il modello di regressione logistica viene utilizzato quando si è interessati a studiare o analizzare la relazione causale tra una variabile dipendente dicotomica e una o più variabili indipendenti. Nella regressione logistica la variabile dipendente, essendo dicotomica, definisce l’appartenenza a un gruppo (o all’altro).

Consideriamo ad esempio il seguente dataset:

La variabile dipendente sarà viaggio, che assume la modalità viaggio_si se il rispondente al questionario ha fatto almeno un viaggio con la propria famiglia negli ultimi 4 mesi e viaggi_no altrimenti. La variabile bipartisce quindi il campione in due gruppi, e ciò che interessa non è il valore atteso (o predetto), come nella regressione lineare, ma la probabilità che un dato soggetto appartenga a meno a uno dei due gruppi. 40

Page 41: ESERCITAZIONI R 1. Gestione dati 1 – Caricamento dati > Dati str(Dati) 'data.frame': 42 obs.

Occorre introdurre alcune grandezze- Dovrebbe essere abbastanza noto il concetto di probabilità. La probabilità di un evento è pari al rapporto tra il numero di eventi favorevoli e il numero di eventi complessivi. Essendo:

Risulta che, preso a caso un individuo nel campione, la probabilità che abbia fatto almeno un viaggio con la famiglia negli ultimi 4 mesi è pari a 0,32.Meno noto è l’odds, un modo di esprimere la probabilità mediante un rapporto. Si calcola facendo il rapporto tra le frequenze osservate in un livello con le frequenze osservate nell’altro, ovvero, numero di eventi favorevoli diviso numero di eventi contrari. Il valore dell’odds esprime il rapporto tra due categorie.Nel caso specifico:

Mediante l’odds vediamo che la relazione tra chi ha fatto almeno un viaggio e chi non lo ha fatto è pari a 0,48. 41

Page 42: ESERCITAZIONI R 1. Gestione dati 1 – Caricamento dati > Dati str(Dati) 'data.frame': 42 obs.

La “lettura dell’odds si fa con riferimento al denominatore: in altre parole, per ogni individuo che non ha fatto il viaggio ci sono 0,48 individui che lo hanno fatto.Ovviamente un valore dell’odds pari a 1 indica uguale frequenza tra eventi favorevoli e contrari, un valore maggiore di 1 indica che ci sono più eventi favorevoli e un valore minore di 1, come nell’esempio, indica che cii sono più eventi sfavorevoli.

Per esprimere la relazione tra due categorie in funzione di un’altra variabile (valutare cioè l’associazione tra due variabili) è possibile utilizzare un altro indice chiamato odds ratio o rapporto tra gli odds. Tale indice si ottiene facendo un rapporto tra gli odds di una data variabile (ad esempio, la variabile Y) ottenuti per ciascun livello della seconda variabile (ad esempio, la variabile X).

Supponiamo ad esempio di voler esprimere l’odds della variabile viaggio alla luce di un’altra variabile del dataset, ad esempio la variabile pos che suddivide ulteriormente il campione tra le professioni insegnanti ed ingegneri.

La domanda che possiamo porci è la seguente: il rapporto (odds) tra coloro che hanno fatto almeno un viggio con la famiglia negli ultimi 4 mesi e coloro che non lo hanno fatto è uguale nei differenti lavori?

42

Page 43: ESERCITAZIONI R 1. Gestione dati 1 – Caricamento dati > Dati str(Dati) 'data.frame': 42 obs.

Per descrivere la diversa distribuzione delle categorie della variabile sesso nelle categorie della variabile lavoro mediante una statistica unica possiamo utilizzare l’odds ratio, che come detto precedentemente corrisponde al rapporto tra i rapporti tra le categorie. Essendo:

Risulta:

OR=(6019/12840)/(4783/7359)=0,72

Per l’interpretazione degli odds ratio si procede nel seguente modo: valori diversi da 1 indicano un’associazione tra le variabili. In questo caso, poiché il valore è diverso da 1, si può dire che esiste un’associazione tra le variabili viaggio e pos. In particolare, si osserva che la proporzione di coloro che hanno viaggiato tra gli insegnanti è 0,72 volte la stessa proporzione tra gli ingegneri. In altre parole, per ogni ingegnere che ha viaggiato con la famiglia (piuttosto che non farlo) ci sono 0,72 insegnanti che hanno viaggiato con la famiglia (piuttosto che non farlo); gli ingegneri viaggiano relativamente di più.

43

Page 44: ESERCITAZIONI R 1. Gestione dati 1 – Caricamento dati > Dati str(Dati) 'data.frame': 42 obs.

Tornando alla regressione logistica, per esprimere la relazione tra la variabile indipendente e la variabile dipendente in termini lineari possiamo partire dalla seguente formulazione in cui il valore atteso della variabile dipendente è la probabilità, per cui la probabilità di Y = 1 come funzione lineare di X diventa:

P(Y =1) =α + βX Questo modello non è adeguato, dal momento che i valori della probabilità sono compresi tra 0 e 1, mentre il termine α + βX può assumere valori che vanno da – ∞ a + ∞. Allora, per provare a risolvere il problema possiamo applicare la trasformazione esponenziale al termine di destra della funzione che diventa: P(Y = 1) = eα +βX Anche questa trasformazione, seppure consente di restringere i valori dell’equazione entro il range 0 + ∞, non risolve completamente il problema.

Ovviamente se scegliamo come riferimento gli insegnanti si avrà:

OR=(4783/7359)/(6019/12840)= 1,3865

Per cui per ogni insegnante che ha viaggiato con la famiglia (piuttosto che non farlo) ci sono 1,39 ingegneri che hanno viaggiato con la famiglia (piuttosto che non farlo).

44

Page 45: ESERCITAZIONI R 1. Gestione dati 1 – Caricamento dati > Dati str(Dati) 'data.frame': 42 obs.

A partire dalla precedente equazione con opportuni passaggi matematici si perviene alla formula:

E l’equazione della retta diviene:

45

Page 46: ESERCITAZIONI R 1. Gestione dati 1 – Caricamento dati > Dati str(Dati) 'data.frame': 42 obs.

Per ottenere una regressione logistica con R si digita il comando:

Avendo cura, dentro la parentesi, di inserire prima la variabile dipendente e poi, dopo la tilde, la variabile indipendente. Base è il dataset cje contiene le variabili, mentre family=binomial è un input fisso per ottenere la regressione logistica.Si ottiene:

46

Page 47: ESERCITAZIONI R 1. Gestione dati 1 – Caricamento dati > Dati str(Dati) 'data.frame': 42 obs.

Come si vede, l’output è praticamente identico a quello della regressione lineare.I punti più importanti è il coefficiente di regressione (tra l’altro significativo, in questo esempio, come si vede dalle stellette a destra) calcolato, come si vede, prendendo come riferimento gli insegnanti. Se si applica a tale coefficiente l’operatore matematico esponenziale (l’opposto del logaritmo) si ottiene:

Pari all’odds ratio che abbiamo trovato “a mano” in precedenza, e, ovviamente con la stessa interpretazione.

Naturalmente, in una regressione logistica possono essere inserite più variabili indipendenti. Se queste variabili sono dicotomiche, sono già “pronte” per essere inserite nella regressione. Se invece esse presentano più di due modalità, la via più semplice è quella di creare delle variabili cosiddette dummy, composte di soli 0 e 1, per ciascuna modalità tranne che per una scelta come riferimento.Nel nostro dataset di esempio, esisteva una variabile “provenienza geografica” a 3 modalità: nord, centro e sud. A partire da essa sono state costruite due variabili dummy nord e sud. Le variabili dummy nord sono state costruita a partire da quella “provenienza geografica (pg)” nel modo seguente:

47

Page 48: ESERCITAZIONI R 1. Gestione dati 1 – Caricamento dati > Dati str(Dati) 'data.frame': 42 obs.

nord=1 se pg=nord, nord=0 altrimenti

sud=1 se pg=sud, sud=0 altrimenti

La modalità esclusa, centro, diventa automaticamente il riferimento, nel senso che andremo a valutare l’effetto di nord e sud sulla variabile dipendente viaggi confrontandole con il centro. Si avrà:

48

Page 49: ESERCITAZIONI R 1. Gestione dati 1 – Caricamento dati > Dati str(Dati) 'data.frame': 42 obs.

Per cui:

•Per ogni insegnante che ha viaggiato con la famiglia negli ultimi 4 mesi ci sono 1,41 ingegneri che lo hanno fatto;

•Per ogni individuo proveniente dal centro che ha viaggiato con la famiglia negli ultimi 4 mesi ci sono 1,03 individui provenienti dal nord che lo hanno fatto;

•Per ogni individuo proveniente dal centro che ha viaggiato con la famiglia negli ultimi 4 mesi ci sono 0,66 individui provenienti dal sud che lo hanno fatto;

In termini di modalità dunque, essere ingegnere piuttosto che insegnante ha un effetto favorevole sulla variabile dipendente, provenire dal nord piuttosto che dal centro ha un leggerissimo effetto favorevole, mentre provenire dal sud piuttosto che dal centro ha un effetto sfavorevole. 49

Page 50: ESERCITAZIONI R 1. Gestione dati 1 – Caricamento dati > Dati str(Dati) 'data.frame': 42 obs.

Analisi delle Componenti Principali

50

Page 51: ESERCITAZIONI R 1. Gestione dati 1 – Caricamento dati > Dati str(Dati) 'data.frame': 42 obs.

Esempio: Analisi di 15 tipi di gelato

51

Page 52: ESERCITAZIONI R 1. Gestione dati 1 – Caricamento dati > Dati str(Dati) 'data.frame': 42 obs.

Quando le p variabili tutte quantitative sono numerose e molto difficile riuscire a cogliere le strutture esistenti nei dati. Si pone quindi il PROBLEMA: è possibile sostituire le p variabili originarie con un numero minore di variabili “artificiali” (k<<p), dette COMPONENTI PRINCIPALI, che garantiscono la SINTESI con la MINOR PERDITA DI INFORMAZIONE POSSIBILE? Ossia, in termini geometrici, è possibile rappresentare le osservazioni, anziché nello spazio originario a p dimensioni, in uno spazio di dimensioni ridotte (1, 2, 3,……), con una perdita limitata d’informazione?

L’ ANALISI IN COMPONENTI PRINCIPALI è un metodo statistico multivariato che permette la riduzione delle dimensioni con la minore perdita di informazione.

Obiettivo: sintetizzare l’insieme di informazioni costituito dalla matrice dei dati in uno spazio di dimensioni ridotte

Applicazione dell’ANALISI DELLE COMPONENTI PRINCIPALI

52

Page 53: ESERCITAZIONI R 1. Gestione dati 1 – Caricamento dati > Dati str(Dati) 'data.frame': 42 obs.

Nel caso dei gelati il numero delle variabili non è particolarmente elevato, ma l’applicazione dell’ACP è comunque utile ….

Una volta caricato il pacchetto FactoMineR, che useremo per l’acp, si lancia il comando:

La sintassi è la seguente:Si crea un nuovo oggetto in R il cui nome – come si vede – è assolutamente ininfluente e a discrezione, e si fornisce come input alla funzione PCA il dataset oggetto di studio. Essendo le variabili tutte quantitative, le utilizziamo tutte e quindi non c’è bisogno di specificare nulla.

Si ottengono i due grafici seguenti:

53

Page 54: ESERCITAZIONI R 1. Gestione dati 1 – Caricamento dati > Dati str(Dati) 'data.frame': 42 obs.

-1.0 -0.5 0.0 0.5 1.0

-1.0

-0.5

0.0

0.5

1.0

Variables factor map (PCA)

Dim 1 (76.93%)

Dim

2 (

16

.83

%)

kcalproteine

carboidrati

grassi

fibre

peso

Come noto, le componenti principali sono in numero esattamente pari a quello delle variabili originarie, quindi nel caso specifico sono pari a 6. Si tratta di:a)Scegliere il numero di componenti che intendiamo utilizzare;b)Interpretare tali componenti, ovvero dargli un significato. 54

Page 55: ESERCITAZIONI R 1. Gestione dati 1 – Caricamento dati > Dati str(Dati) 'data.frame': 42 obs.

Il grafico precedente, detto cerchio delle correlazioni, ci aiuta per entrambe le operazioni. Esso rappresenta il piano formato dalle prime due componenti principali, e le percentuali accanto agli assi indicano la percentuale di informazione associata a ciascuno di essi. Il primo asse (ovvero la prima componente principale) che è quello orizzontale “spiega” il 77% circa dell’informazione contenuta nella matrice dei dati, il secondo, quello verticale, ne spiega il 17% circa.Dunque le prime due CP riassumono in maniera molto soddisfacente le informazioni delle 6 variabili di partenza (il 94% circa: la perdita è uguale solo al 6,246% della varianza totale) e possono essere assolutamente sufficienti a rappresentare i dati originari, con l’ulteriore vantaggio che due sole variabili individuano un unico piano e quindi permettono una comoda rappresentazine grafica bidimensionale.

Per vedere comunque le percentuali di informazione associate a ciascuna componente principale basta digitare il comando:

55

Page 56: ESERCITAZIONI R 1. Gestione dati 1 – Caricamento dati > Dati str(Dati) 'data.frame': 42 obs.

Dunque possiamo pertanto considerare solo le prime due CP. Ma quale significato va attribuito a ciascuna di queste due variabili sintetiche?La risposta è data dalla relazione tra le due CP e le variabili originarie, mostrata ancora nel cerchio delle correlazioni.

Nel grafico ciascuna variabile è rappresentata da una freccia.Una variabile è tanto più correlata con un asse quanto più è grande la sua proiezione sull’asse stesso, e questo dipende dalla lunghezza della freccia ( più è lunga più è grande la proiezione) e dall’angolo formato dalla freccia con l’asse (più l’angolo è piccolo, maggiore sarà la proiezione).

Nell’ingrandimento, la linea verde scuro rappresenta la proiezione della variabile carboidrati sul primo asse, quella celeste la proiezione sul secondo asse. Tale variabile risulta evidentemente maggiormente associata con il primo asse.Questa analisi va ripetuta variabile per variabile.

56

Page 57: ESERCITAZIONI R 1. Gestione dati 1 – Caricamento dati > Dati str(Dati) 'data.frame': 42 obs.

In base a quanto detto, la prima CP presenta una relazione diretta molto forte con le variabili nutrizionali e più debole con il peso, mentre la seconda CP mostra una relazione diretta abbastanza elevata solo con il peso. Dunque:

-la prima CP può interpretarsi come un INDICATORE SINTETICO DELLE CARATTERISTICHE NUTRIZIONALI;

-la SECONDA CP è connessa al PESO DELLA SINGOLA PORZIONE DI GELATO.

Questo è dunque il significato delle prime due componenti principali. Praticamente tutta l’informazione contenuta nella matrice iniziale dei dati, contenuta in 6 variabili, è riassumibile utilizzandone solamente due.

Il secondo grafico mostra la disposizione delle singole unità statistiche nel piano formato dalle prime due componenti principali.

57

Page 58: ESERCITAZIONI R 1. Gestione dati 1 – Caricamento dati > Dati str(Dati) 'data.frame': 42 obs.

-4 -2 0 2 4 6

-2-1

01

23

Individuals factor map (PCA)

Dim 1 (76.93%)

Dim

2 (

16

.83

%)

CORNETTO MAGNUM

CUCCIOLONESOLERO

CARTE D_OR

VIENNETTA

LIUK

CROCCANTE

CREMINO

PASSION

COPPAMUSIC

MAGNIFICO

FIORDIFRAGOLA

LEMONISSIMO

CALIPPO

Sulla base del significato attribuito alle CP, nella parte del grafico verso destra si collocano i gelati con i valori più elevati delle variabili nutrizionali e verso l’alto quelli di peso maggiore.

In prossimità dell’origine degli assi si posizionano i gelati con valori prossimi alla media per entrambi gli aspetti riassunti dalle prime 2 CP.

58

Page 59: ESERCITAZIONI R 1. Gestione dati 1 – Caricamento dati > Dati str(Dati) 'data.frame': 42 obs.

Vediamo una seconda applicazione su un dataset più complesso.

59

Page 60: ESERCITAZIONI R 1. Gestione dati 1 – Caricamento dati > Dati str(Dati) 'data.frame': 42 obs.

Le prime 12 variabili contengono le temperature medie per i dodici mesi dell’anno per 23 capitali europee. Le variabili Annual e Amplitude rappresentano rispettivamente le temperature medie annuali e la maggiore escursione termica (differenza tra la maggior temperatura media mensile e quella minore). Infine ci sono le due variabili posizionali longitudine e latitudine.Tutte le prime 16 variabili sono quantitative; l’ultima è una variabile qualitativa che indica la posizione geografica della città in Europa.

Obiettivo dell’indagine è quello di studiare le temperature delle capitali europee. Come visto, la matrice dei dati è composta da 17 variabili.

Trattandosi di variabili quantitative operiamo una pca allo scopo di vedere se è possibile ridurre il numero delle variabili mantenendo un alto contenuto informativo.

In questo caso distingueremo tra variabili attive e variabili illustrative; solo le prime concorrono a “costruire” le variabili artificiali che chiamiamo componenti principali, mentre delle seconde studiamo l’associazione con le componenti principali.

In questo caso considereremo attive le prime 12 variabili, ovvero le temperature medie mensili, mentre le altre saranno illustrative: 4 quantitative e l’ultima, la posizione geografica, qualitativa.

60

Page 61: ESERCITAZIONI R 1. Gestione dati 1 – Caricamento dati > Dati str(Dati) 'data.frame': 42 obs.

La sintassi del comando è la seguente:

In cui indichiamo alla funzione che ci sono variabili illustrative e le distinguiamo in quantitative (quanti.sup) e qualitative (quali.sup). Le variabili illustrative vengono indicate sempre seguendo l’ordine in cui esse compaiono nell’outptu del comando str(temperature). Siccome in questo dataset esse sono consecutive, possiamo indicarle con l’espressione 13.16, ad indicare che dalla 13° alla 16° sono appunto illustrative quantitative. Altrimenti avremmo potuto usare la sintassi :

Del tutto equivalente.

Si ottiene il cerchio delle correlazioni:

61

Page 62: ESERCITAZIONI R 1. Gestione dati 1 – Caricamento dati > Dati str(Dati) 'data.frame': 42 obs.

-1.0 -0.5 0.0 0.5 1.0

-1.0

-0.5

0.0

0.5

1.0

Variables factor map (PCA)

Dim 1 (82.9%)

Dim

2 (

15

.4%

)

JanuaryFebruary

March

April

MayJuneJuly

August

September

October

November

December

Annual

Amplitude

Latitude

Longitude

In cui sono anche rappresentate le variabili illustrative quantitative (in blu).L’interpretazione delle prime due componenti principali (sufficienti ai nostri scopi in quanto restituenti oltre il 98% dell’informazione complessiva) avviene comunque sulla base delle variabili attive. 62

Page 63: ESERCITAZIONI R 1. Gestione dati 1 – Caricamento dati > Dati str(Dati) 'data.frame': 42 obs.

La prima CP presenta una relazione diretta molto forte con tutte le variabili riportanti le temperature medie mensili. Essa può quindi essere interpretata come una misura media complessiva, ovvero come una temperatura media annuale. Questa interpretazione è supportata dall’osservazione che la variabile illustrativa annual, avente lo stesso significato, è praticamente coincidente con il primo asse. Osservndo le direzioni delle frecce, si può pertanto concludere che il primo asse distingue le capitali con una bassa temperatura media annua (a sinistra) da quelle che hanno un’alta temperatura media annua (a destra).

La seconda CP sembra distinguere i mesi di maggio, giugno, luglio e agosto in alto, dai mesi di dicembre, gennaio e febbraio in basso. Tenendo conto che si tratta rispettivamente dei mesi più caldi e più freddi si può concludere che il secondo asse distingue la bella stagione (in alto) da quella brutta (in basso). Questa opposizione riflette il fatto che, per una data temperatura media annua (ovvero, fissato un punto dell’asse orizzontale), alcune città sono piuttosto calde in estate rispetto a tale temperatura, altre sono relativamente fredde.

63

Page 64: ESERCITAZIONI R 1. Gestione dati 1 – Caricamento dati > Dati str(Dati) 'data.frame': 42 obs.

-5 0 5

-3-2

-10

12

3Individuals factor map (PCA)

Dim 1 (82.9%)

Dim

2 (

15

.4%

)

Amsterdam

Athens

Berlin

Brussels

Budapest

Copenhagen

Dublin

Elsinki

Kiev

Krakow

Lisbon London

Madrid

Minsk

Moscow

Oslo

Paris

Prague

Reykjavik

Rome Sarajevo

Sofia

Stockholm

East

North

South

West

Il secondo grafico, che riporta la collocazione delle città nel piano formato dalle prime due componenti principali, aiuta a capire meglio soprattutto l’interpretazione dell’asse verticale.Città come Kiev, Mosca o Budapest hanno temperature piuttosto alte durante l’estate, e temperature piuttosto basse durante il resto dell’anno. 64

Page 65: ESERCITAZIONI R 1. Gestione dati 1 – Caricamento dati > Dati str(Dati) 'data.frame': 42 obs.

D’altra parte, città come Dublino e Reykjavic hanno temperature piuttosto basse durante l’estate e meno rigide durante l’inverno. Si distinguono in questo modo città costiere (come queste ultime) , con una bassa escursione termica, da città continentali (come le altre dette in precedenza) con una escursione termica più forte. Quest’ultimo fatto è anche desumibile dal rapporto che esiste tra la seconda componente principale e la variabile illustrativa amplitude.

Infine, sul grafico è riportata la distribuzione delle modalità della variabile qualitativa area, in cui ovviamente trovano la corretta collocazione le varie città.

65

Page 66: ESERCITAZIONI R 1. Gestione dati 1 – Caricamento dati > Dati str(Dati) 'data.frame': 42 obs.

Analisi delle Corrispondenze Multiple

66

Page 67: ESERCITAZIONI R 1. Gestione dati 1 – Caricamento dati > Dati str(Dati) 'data.frame': 42 obs.

L’analisi delle corrispondenze multiple è una tecnica che produce risultati piuttosto simili a quelli dell’analisi in componenti principali ma lavora su variabili qualitative.

In realtà l’algoritmo matematico su cui si basa è profondamente diverso da quello dell’acp, per cui bisogna avere molta cautela nel portare avanti questa analogia.

L’ output dell’mca è, in genere, prettamente grafico: obiettivo di questa analisi è la rappresentazione grafica delle associazioni esistenti tra le variabili qualitative oggetto di studio e le loro modalità, allo scopo di cogliere andamenti sottostanti e collegamenti che non è possibile cogliere nella matrice dei dati originale.

Questo è uno dei motivi, tra l’altro, per cui spesso la percentuale complessiva di informazione associata agli assi individuati è sensibilmente più bassa di quella che in genere si ottiene in una acp. La perdita di informazione è “compensata” dalla rappresentabilità grafica.

67

Page 68: ESERCITAZIONI R 1. Gestione dati 1 – Caricamento dati > Dati str(Dati) 'data.frame': 42 obs.

Caricato il pacchetto FactoMineR:

Il comando da digitare è il seguente:68

Page 69: ESERCITAZIONI R 1. Gestione dati 1 – Caricamento dati > Dati str(Dati) 'data.frame': 42 obs.

Vediamo i singoli elementi di questo comando:

• a sinistra del simbolo di assegnazione, il nome da dare all’oggetto R che andiamo a creare; tale nome è assolutamente ininfluente –come si vede dalla scelta fatta.

•Tra parentesi, i vari input che vanno forniti al comando MCA:

1.Tea_survey2: il nome del dataset su cui si opera;

2.Ncp=2: Il numero di fattori da estrarre (teoricamente, tanti quante sono le variabili attive; in realtà molto spesso l’obiettivo di una mca è quello di ottenere un grafico, per cui in questo caso diciamo alla funzione di estrarne 2 per avere un grafico bidimensionale. Se non si indica nulla di default vengono estratti 5 fattori).

3.Quali.sup=c(1,6,15): qui vanno indicate le variabili illustrative qualitative. Nella parentesi vanno indicate le loro posizioni nell’output del comando str(tea_survey2). Le illustrative considerate sono età, frequenza e sesso e le cui posizioni - nella slide precedente- sono appunto rispettivamente 1,6 e 15.

4.Altri eventuali input che possono essere forniti alla funzione MCA sono reperibili nella guida di R, digitando ?MCA e premendo invio.

69

Page 70: ESERCITAZIONI R 1. Gestione dati 1 – Caricamento dati > Dati str(Dati) 'data.frame': 42 obs.

Si ottengono i tre grafici seguenti:

0.0 0.2 0.4 0.6 0.8 1.0

0.0

0.2

0.4

0.6

0.8

1.0

Variables representation

Dim 1 (9.885%)

Dim

2 (

8.1

03

%)

alwaysbreakfastdinner

evening friendshome

how

Howlunch

price

pubresto

sugar

Tea

tea.time tearoom

where

workage_Q

frequencysex

In questo grafico sono rappresentate le v. attive in rosso e quelle illustrative in verde. Interessano le prime: variabili poste più a destra sono maggiormente legate con il primo asse fattoriale, quello orizzontale.Variabili poste più in alto sono maggiormente legate con il secondo asse fattoriale, quello verticale.Le percentuali tra parentesi accanto agli assi indicano la percentuale di informazione (variabilità) restituita da ciascun asse; in questo caso quindi, i due assi restituiscono complessivamente il 18% circa dell’informazione originaria.

70

Page 71: ESERCITAZIONI R 1. Gestione dati 1 – Caricamento dati > Dati str(Dati) 'data.frame': 42 obs.

-1.0 -0.5 0.0 0.5 1.0 1.5

-0.5

0.0

0.5

1.0

MCA factor map

Dim 1 (9.885%)

Dim

2 (

8.1

03

%)

12

3

4

5

6

7

8

9

10

1112

13

14

15

16

17

18

19

20 21

2223 2425

26

27

28

29

30

31

3233

34

35

36

3738

39

40

41

42

43

4445

46

47

48

49

50

51

52

53

54

55 5657

58

59

60 61

62

63 6465

66

6768

69

7071 7273

74

75

76 7778

79

80

81

8283

8485

86

87

88

8990

9192

93

94

95

96

9798

99

100

101

102

103

104105

106107 108

109

110

111

112

113

114115116117

118

119

120

121

122

123124

125

126

127128

129130

131132

133

134135136

137 138139140

141142

143144

145

146147

148

149

150

151

152

153

154

155

156

157

158

159

160

161

162

163164

165

166

167

168

169

170

171

172

173

174175176177

178

179

180

181

182

183

184185

186

187188189

190

191

192193 194

195

196

197198

199

200 201

202

203

204

205

206

207

208

209

210

211

212

213

214

215216

217

218

219

220

221

222

223

224

225226

227

228

229

230

231

232233 234

235

236

237

238

239

240241

242

243244

245

246247

248249

250251

252253

254

255

256257258 259260

261

262

263 264265

266

267

268

269

270

271

272

273

274

275

276

277

278

279280

281282

283

284

285 286

287

288

289290

291

292

293294

295296

297

298

299

300

Questo grafico mostra la “nuvola dei punti”, ovvero la disposizione degli individui (le righe della matrice originaria) nel piano fattoriale generato dalle variabili attive.

71

Page 72: ESERCITAZIONI R 1. Gestione dati 1 – Caricamento dati > Dati str(Dati) 'data.frame': 42 obs.

-1 0 1 2

-10

12

MCA factor map

Dim 1 (9.885%)

Dim

2 (

8.1

03

%)

alwaysNot.alwaysbreakfast

Not.breakfast

dinner

Not.dinnereveningNot.eveningfriends

Not.friendshomeNot.home

tea bag

tea bag+unpackaged

unpackaged

alone

lemon

milk

other

lunch

Not.lunch

p_brandedp_cheap

p_private label

p_unknown

p_upscale

p_variable

Not.pubpub

Not.resto

resto

No.sugar

sugar

black

Earl Grey

green

Not.tea timetea timeNot.tearoom

tearoom

chain store

chain store+tea shop

tea shop

Not.work

work15-24

25-3435-4445-59

+60

1/day1 to 2/week+2/day3 to 6/week

F

M

Questo grafico mostra la disposizione delle modalità delle v. attive (in rosso) e delle modalità delle v. illustrative (in verde) nel piano fattoriale.Siccome il passo successivo consiste nell’interpretazione di ciascun asse fattoriale, conviene eliminare dal grafico le v. illustrative e cercare di rendere più chiare le etichette delle varie modalità.A tale scopo si può digitare il comando:

72

Page 73: ESERCITAZIONI R 1. Gestione dati 1 – Caricamento dati > Dati str(Dati) 'data.frame': 42 obs.

1.pippo: il nome dell’oggetto R creato in precedenza, contenente tutti gli output dell’mca.

2.Invisible=c(“ind”, “quali.sup”): si dice alla funzione di eliminare dal grafico gli individui (“ind”) e le modalità delle v. illustrative (“quali.sup”), senza indicare le v. attive (“var”).

3.Cex=0.7: parametro grafico con cui si ottengono caratteri più piccoli e quindi etichette più leggibili-1 0 1 2

-10

12

MCA factor map

Dim 1 (9.885%)

Dim

2 (

8.1

03

%)

alw aysNot.alw aysbreakfast

Not.breakfast

dinner

Not.dinnereveningNot.evening

friends

Not.friends

homeNot.home

tea bag

tea bag+unpackaged

unpackaged

alone

lemon

milk

other

lunch

Not.lunch

p_brandedp_cheap

p_private label

p_unknow n

p_upscale

p_variable

Not.pub

pub

Not.resto

resto

No.sugar

sugar

black

Earl Grey

green

Not.tea time

tea timeNot.tearoom

tearoom

chain store

chain store+tea shop

tea shop

Not.w ork

w ork

73

Page 74: ESERCITAZIONI R 1. Gestione dati 1 – Caricamento dati > Dati str(Dati) 'data.frame': 42 obs.

L’interpretazione degli assi si basa sull’analisi della disposizione delle modalità in orizzontale (primo asse fattoriale) e in verticale (secondo asse fattoriale).

Nel primo caso a destra dell’origine troviamo modalità quali pub, tearoom, lunch, breakfast, work, friends, always, mentre a sinistra troviamo le corrispondenti negazioni (not pub, not tearoom, etc). Il primo asse si basa sulla tipologia di consumatori e distingue i consumatori abituali a destra dai consumatori occasionali a sinistra.

Nel caso dell’asse verticale, in alto troviamo modalità quali tea shop, unpackaged, price_upscale, cui si contrappongono in basso tea_bag, price-unknown, price_cheap, etc.Il secondo asse si basa sulla qualità del tè consumato e distingue tra un consumo di alta qualità in alto e un consumo di bassa qualità in basso.

A fronte delle 18 variabili attive che avevamo considerato, l’output precedente ci dice che tenendo conto di questi due aspetti si considera quasi il 20% di tutto il contenuto informativo contenuto nella matrice dei dati originale.

Questi due aspetti sono comunque i più importanti, tenendo conto che la portata del contenuto informativo di ciascun asse fattoriale è decrescente.

74

Page 75: ESERCITAZIONI R 1. Gestione dati 1 – Caricamento dati > Dati str(Dati) 'data.frame': 42 obs.

Per studiare le v. illustrative basta lanciare il comando:

ottenendo:

-0.4 -0.2 0.0 0.2 0.4

-0.4

-0.2

0.0

0.2

0.4

MCA factor map

Dim 1 (9.885%)

Dim

2 (

8.1

03

%)

15-24

25-34 35-4445-59

+60

1/day

1 to 2/w eek

+2/day

3 to 6/w eek

F

M

Da cui si evince ad esempio che le donne consumano più tè degli uomini (sono a destra sull’asse orizzontale) ma questi ultimi bevono un tè migliore (sono più in alto sull’asse verticale), oppure che a consumare il tè migliore sono soprattutto persone di una certa età (+60, in alto) rispetto ai giovani che bevono un tè di qualità inferiore (15-24, in basso)

75

Page 76: ESERCITAZIONI R 1. Gestione dati 1 – Caricamento dati > Dati str(Dati) 'data.frame': 42 obs.

76

Le variabili illustrative possono essere ovviamente anche di natura quantitativa. A tale scopo consideriamo il seguente dataset:

Che è analogo al precedente con la sola differenza che la variabile età è quantitativa a tutti gli effetti, e non quantitativa suddivisa in classi e quindi qualitativa come in precedenza.

Page 77: ESERCITAZIONI R 1. Gestione dati 1 – Caricamento dati > Dati str(Dati) 'data.frame': 42 obs.

77

Il comando da lanciare è il seguente:

I due assi fattoriali sono esattamente identici a quelli trovati prima, perché le variabili attive che li producono sono rimaste inalterate.Nell’output della funzione c’è però un grafico aggiuntivo:

-1.0 -0.5 0.0 0.5 1.0

-1.0

-0.5

0.0

0.5

1.0

Supplementary variables on the MCA factor map

Dim 1 (9.885%)

Dim

2 (

8.1

03

%)

age

Page 78: ESERCITAZIONI R 1. Gestione dati 1 – Caricamento dati > Dati str(Dati) 'data.frame': 42 obs.

78

Ovvero un cerchio delle correlazioni in cui possiamo leggere che la variabile illustrativa quantitativa age risulta legata quasi esclusivamente al secondo asse ed è concorde con l’asse. Questo risultato non è sorprendente, pensando a come si disponevano in precedenza le modalità della variabile suddivisa in classi.

-0.4 -0.2 0.0 0.2 0.4

-0.4

-0.2

0.0

0.2

0.4

MCA factor map

Dim 1 (9.885%)

Dim

2 (

8.1

03

%)

15-24

25-34 35-4445-59

+60

1/day

1 to 2/w eek

+2/day

3 to 6/w eek

F

M

Esse infatti si muovevano dal basso verso l’alto, come mostra il “vecchio” grafico al quale è stata aggiunta la spezzata rossa per evidenziarne l’andamento

Page 79: ESERCITAZIONI R 1. Gestione dati 1 – Caricamento dati > Dati str(Dati) 'data.frame': 42 obs.

79

-0.4 -0.2 0.0 0.2 0.4

-0.3

-0.2

-0.1

0.0

0.1

0.2

0.3

MCA factor map

Dim 1 (9.885%)

Dim

2 (

8.1

03

%)

1/day

1 to 2/w eek

+2/day

3 to 6/w eek

F

M

Tutti gli altri grafici risultano identici a quelli già visti tranne quello recante la disposizione delle variabili illustrative qualitative nel piano fattoriale, in cui ovviamente non c’è più la variabile age.

Page 80: ESERCITAZIONI R 1. Gestione dati 1 – Caricamento dati > Dati str(Dati) 'data.frame': 42 obs.

Cluster Analysis

80

Page 81: ESERCITAZIONI R 1. Gestione dati 1 – Caricamento dati > Dati str(Dati) 'data.frame': 42 obs.

Si consideri il seguente dataset

Costituito da un insieme di 6 variabili legate al fenomeno turistico registrate sulle 20 regioni italiane. L’obiettivo è quello di trovare dei gruppi di regioni che, rispetto alle variabili in esame, presentino un comportamento simile al loro interno e dissimile tra gruppi diversi.

81

Page 82: ESERCITAZIONI R 1. Gestione dati 1 – Caricamento dati > Dati str(Dati) 'data.frame': 42 obs.

Per operare una classificazione gerarchica, calcoliamo innanzitutto la matrice delle distanze euclidee:

Poi ci calcoliamo il dendrogramma e lo rappresentiamo:

Lo

mb

ard

iaS

icili

aC

am

pa

nia

Lig

uri

aE

mili

a_

Ro

ma

gn

aT

ren

tino

_A

lto_

Ad

ige

La

zio

Ve

ne

toT

osc

an

aF

riu

li_V

en

ezi

a_

Giu

liaU

mb

ria

Ab

ruzz

oV

alle

_d

_A

ost

aP

iem

on

teS

ard

eg

na

Mo

lise

Ma

rch

eP

ug

liaB

asi

lica

taC

ala

bri

a

05

01

00

15

02

00

Cluster Dendrogram

hclust (*, "ward")matdist

He

igh

t

82

Page 83: ESERCITAZIONI R 1. Gestione dati 1 – Caricamento dati > Dati str(Dati) 'data.frame': 42 obs.

Tenendo conto che le classificazioni migliori si ottengono “tagliando” il dendrogramma in corrispondenza dei rami più alti, potreemo avere una classificazione a 2, 3 o al limite a 5 gruppi.Scegliendo quella da tre si ha:

Per cui Piemonte, Abruzzo, Puglia, Valle d’Aosta, Marche, Molise, Basilicata, Sardegna e Calabria stanno tutte insieme e appartengono al gruppo 1, etc.I gruppi ottenuti andranno poi caratterizzati studiando le caratteristiche comuni dei loro elementi.

83

Page 84: ESERCITAZIONI R 1. Gestione dati 1 – Caricamento dati > Dati str(Dati) 'data.frame': 42 obs.

Volendo operare una classificazione su base partizionale si procede con il comando:

A questo riguardo vale la pena osservare che:

a)Nel caso dei cluster partizionali, il numero di gruppi va indicato a priori, senza alcun ausilio grafico (per cui spesso si va per tentativi);

b)La classificazione è venuta identica a quella precedente (in quanto il dataset è molto piccolo e contiene poche variabili); in generale non è così perche gli algoritmi utilizzati sono molto diversi. 84

Page 85: ESERCITAZIONI R 1. Gestione dati 1 – Caricamento dati > Dati str(Dati) 'data.frame': 42 obs.

Un’altra classificazione su base partizionale, tramite un ulteriore diverso algoritmo, si ottiene con il comando:

In questo caso, con l’opzione medoids, si ottengono anche i “centri” dei 3 cluster, ovvero le unità statistiche che meglio rappresentano ciascun gruppo. Questo può essere un valido ausilio per la caratterizzazione dei gruppi ottenuti.

85

Page 86: ESERCITAZIONI R 1. Gestione dati 1 – Caricamento dati > Dati str(Dati) 'data.frame': 42 obs.

Spesso, soprattutto nel caso di grandi dataset con molte variabili, invece di classificare i dati originali si ricorre ad una precedente analisi fattoriale per ridurre le dimensioni, e si opera la cluster analysis sulle coordinate fattoriali.

Il pacchetto FactoMineR permette di operare una cluster analysis gerarchica (metodo di ward) direttamente sugli assi fattoriali e non sui dati originali. Lavorando per continuità di esempio sul dataset turismo_08 (sebbene le sue dimensioni rendano assolutamente superfluo il ricorso all’analisi fattoriale), si procederà calcolandone le componenti principali e poi digitando il comando:

(dove prendiamo solo le prime due componenti principali perché il dataset è piccolo) che restituisce il dendrogramma rappresentante la successione delle classificazioni e una riga scura rappresentante un suggerimento di “taglio” in base alla massimizzazione di un opportuno indice di validazione.

86

Page 87: ESERCITAZIONI R 1. Gestione dati 1 – Caricamento dati > Dati str(Dati) 'data.frame': 42 obs.

Non c’è motivo per non accettare il suggerimento (che prevede dunque la scelta di 3 gruppi) per cui cliccando in corrispondenza della riga scura si ottiene:

87

Page 88: ESERCITAZIONI R 1. Gestione dati 1 – Caricamento dati > Dati str(Dati) 'data.frame': 42 obs.

0.0

0.5

1.0

1.5

Hierarchical Clustering

inertia gain

Friu

li_V

enez

ia_G

iulia

Um

bria

Tos

cana

Ven

eto

Mar

che

Mol

ise

Pug

lia

Abr

uzzo

Sar

degn

a

Pie

mon

te

Bas

ilicat

a

Cal

abria

Ligu

ria

Val

le_d

_Aos

ta

Cam

pani

a

Em

ilia_R

omag

na

Sic

ilia

Lom

bard

ia

Tre

ntin

o_A

lto_A

dige

Lazi

o

0.0

0.5

1.0

1.5

Click to cut the tree

-3 -2 -1 0 1 2 3 4

0.0

0.5

1.0

1.5

2.0

-3

-2

-1

0

1

2

3

Dim 1 (42.1%)

Dim

2 (

26

.76

%)

he

igh

t

cluster 1 cluster 2 cluster 3

Friuli_Venezia_Giulia

MarcheMolisePuglia

Basilicata

Umbria

AbruzzoSardegna

Calabria

Veneto

Toscana

PiemonteLiguriaValle_d_AostaCampania

Emilia_RomagnaSicilia

Lombardia

Trentino_Alto_Adige

Lazio

Hierarchical clustering on the factor map

88

Page 89: ESERCITAZIONI R 1. Gestione dati 1 – Caricamento dati > Dati str(Dati) 'data.frame': 42 obs.

E soprattutto:

-2 0 2 4

-3-2

-10

12

3

Factor map

Dim 1 (42.1%)

Dim

2 (

26

.76

%)

Friuli_Venezia_Giulia

MarcheMolisePuglia

Basilicata

Umbria

AbruzzoSardegna

Calabria

Veneto

Toscana

PiemonteLiguriaValle_d_Aosta

Campania

Emilia_RomagnaSicilia

Lombardia

Trentino_Alto_Adige

Lazio

cluster 1 cluster 2 cluster 3

89

Page 90: ESERCITAZIONI R 1. Gestione dati 1 – Caricamento dati > Dati str(Dati) 'data.frame': 42 obs.

Sui dati fattoriali si può anche operare una classificazione con metodo partizionale, ad esempio con il metodo delle k medie.Tale operazione però non può essere svolta direttamente da funzioni del pacchetto FactoMineR, per cui bisogna “estrarre” le coordinate fattoriali.Il comando:

Crea un nuovo oggetto R contenente le 20 coppie di coordinate fattoriali, una coppia per ogni regione del dataset originario. Su di esso potremo lanciare il comando kmeans:

Che produrrà, ad esempio, la seguente classificazione:

90

Page 91: ESERCITAZIONI R 1. Gestione dati 1 – Caricamento dati > Dati str(Dati) 'data.frame': 42 obs.

O ancora, tramite l’algoritmo pam:

In cui, ad esempio, è cambiato il “centro” del primo cluster.

91

Page 92: ESERCITAZIONI R 1. Gestione dati 1 – Caricamento dati > Dati str(Dati) 'data.frame': 42 obs.

Analogo discorso può essere fatto, nel caso di variabili qualitative, per i risultati di una mca.Tornando all’esempio del tè, in cui pippo era l’oggetto R contenente l’output dell’mca,, va digitato il comando:

Che restituisce come in precedenza il dendrogramma rappresentante la successione delle classificazioni e una riga scura rappresentante un suggerimento di “taglio” in base alla massimizzazione di un opportuno indice di validazione.

Non c’è motivo per non accettare il suggerimento (che prevede dunque la scelta di 3 gruppi) per cui cliccando in corrispondenza della riga scura si ottiene:

92

Page 93: ESERCITAZIONI R 1. Gestione dati 1 – Caricamento dati > Dati str(Dati) 'data.frame': 42 obs.

0.00

0.04

0.08

Hierarchical Clustering

inertia gain

187

200 6 38 262

205

188

167 4 55 223

193

154

197

134 34 162

156

186

102

180

163

189

226

213

231 23 164 37 153 81 54 209

217

149

161

113

191 15 159

300 1

237 76 97 219 47 152

166

183 2

169 63 139

140

228

155

285 36 184 85 176

115

232

124

146

158 14 263 70 258

257

123

116

117

256

144

111

194 41 141

145

181

157

293

177

254

230

150

126

118

250

216 12 77 175

137 11 105

104

142

245

296

275 8 20 5 45 119

121

218

132

292 29 151 42 291

178 24 79 83 40 82 266

198 57 243 21 33 201

255 93 48 112

128

235

280

160

233

253 18 214 30 49 7 192

298

170 71 19 147

242 84 138

174 43 106

107

114

179 73 131

276 92 143 78 129

247 96 109

260 65 284 13 204 3 27 91 282

281 89 90 80 185 58 290

294 86 125

210

289 98 130

215

236 88 227

195

182

211 31 212

165

199

222

249 74 95 229

100 53 168

208

190

202

297

248

220 16 206

261

299

272

148

288

203 25 9 241

196

238

173 94 62 171 10 120

110 52 271

277

287 60 286 39 69 101

274

239 28 221 46 75 108 26 279 64 51 246

135 32 244 56 172

136 72 103

264

133 68 234 17 224

240

269 59 225 22 207 50 35 278 66 251 99 267

270 67 265

259 61 122 44 252

127

283

295

268 87 2730.

000.

020.

040.

060.

080.

10

Click to cut the tree

-1.0 -0.5 0.0 0.5 1.0 1.5

0.00

0.02

0.04

0.06

0.08

0.10

-1.0

-0.5

0.0

0.5

1.0

1.5

Dim 1 (9.88%)

Dim

2 (

8.1

%)

he

igh

t

cluster 1 cluster 2 cluster 3

18720062623820518855167193422330076972191237

154186102197

227

153

47

212

134162

165

34152166156155180

195

285

54163232

81

183124146158169361841463

199

85176189

13914021322262312637011525822825711612341141177117

20923

222

145111

182

256293

194144181254

211

230164

157

31

2961505

275126121118250218216

3745217

8

249

132121752921371041427720

191

119245

15

11105

1491611132921449174

15924

431061077192114151

29883

179170

79

71290

304229119147

74

73242

4084178

168

1695

82

261

138131247276

266148

96284

208

13

288

92109

299

14326065129

206

198

294

20412578

203

190

8632791

25

210

272

579

28228128989255243

241196185

94

9821

9033

229

238

202

9348112

53

130

100

88

2018021558

236

62173120

128110

10

280

171

16023552

253233

297

6018

271

69286392741012795164

220

277

246

17269225

287248

239135

22424417256136

5932

2872221103264

240133

4668108

75

2250

23426251122

20735

9944252

267

66

127283295270

27867259268

6187

265273

Hierarchical clustering on the factor map

93

Page 94: ESERCITAZIONI R 1. Gestione dati 1 – Caricamento dati > Dati str(Dati) 'data.frame': 42 obs.

E soprattutto:

-1.0 -0.5 0.0 0.5 1.0 1.5

-0.5

0.0

0.5

1.0

Factor map

Dim 1 (9.88%)

Dim

2 (

8.1

%)

187200626238

205

18855167

193

4223

3007697219

1237

154

186102197

227

153

47

212

134162

165

34152166156

155

180

195

285

54

163

232

81

183124146158169

361841463

199

85176

189

139140

213

2

226231

2637011525822825711612341141177117

209

23

222

145

111

182

256

293

194144181254

211

230

164

157

31

296

150

5275

126

121

118250218

216

37

45

217

8

249

13212175292137104142

77

20

191

119

245

15

11105

149161113

2921449

174

159

24

43106107

7192

114

151

298

83

179170

79

71

290

3042291

19147

74

73242

40

84

178

168

16

95

82

261

138131247276

266

148

96284

208

13

288

92

109

299

14326065

129

206

198

294

204

125

78

203

190

86

32791

25

210

272

57

9

282281

289

89

255243

241196

185

94

98

21

90

33

229

238

202

9348112

53

130

100

88

201

80215

58

236

62

173120

128

110

10

280

171

160235

52

253

233

297

60

18

271

6928639

274101

2795164

220

277

246

17269

225

287

248

239

135

224

24417256

136

59

32

28

72

221

103264

240

133

46

68

108

75

22

50

234

26

251

122

207

35

99

44252

267

66

127283295

270

278

67

259

268

61

87

265

273

cluster 1 cluster 2 cluster 3

94

Page 95: ESERCITAZIONI R 1. Gestione dati 1 – Caricamento dati > Dati str(Dati) 'data.frame': 42 obs.

Che rappresenta la classificazione degli individui (si tratta evidentemente della stessa “nuvola di punti” ottenuta in precedenza con l’mca) nei 3 gruppi.

Le caratteristiche di ciascun gruppo dipendono dalla posizione del gruppo stesso rispetto agli assi fattoriali.Il gruppo verde ad esempio, per quanto detto sarà caratterizzato principalmente da bevitori abituali di tè.

Attraverso il comando:

Si ottengono comunque delle informazioni più precise in merito. Scorrendo l’output si arriva alla sezione “category”, che in questo caso significa gruppo e che quindi ha una voce per ciascun cluster:

95

Page 96: ESERCITAZIONI R 1. Gestione dati 1 – Caricamento dati > Dati str(Dati) 'data.frame': 42 obs.

96

Page 97: ESERCITAZIONI R 1. Gestione dati 1 – Caricamento dati > Dati str(Dati) 'data.frame': 42 obs.

97

Vengono rappresentate le modalità che, in ciascun cluster, presentano una significativa sovra o sotto presenza rispetto al dato campionario complessivo, e che quindi risultano particolarmente utili per caratterizzare il cluster stesso.In particolare:

Global è la frequenza della modalità nel campione, ovvero nel dataset;

Mod/Cla è la frequenza percentuale della modalità nel gruppo;

Cla/Mod indica la percentuale che gli individui nel gruppo aventi questa modalità rappresentano sul totale.

Nella slide precedente è riportato l’estratto dell’output relativo al primo gruppo. Prendiamo ad esempio la terza riga, ovvero la modalità Not.tearoom della variabile tearoom (ovvero, coloro che non bevono il tè nelle apposite sale).In questo gruppo, il 97% circa degli individui presenta tale modalità a fronte di un valore campionario complessivo pari all’80,6%. Questa modalità caratterizza quindi il primo gruppo, essendo decisamente più frequente nel gruppo rispetto al campione.Il 65% di tutti gli individui che non bevono il tè nella sala da tè si concentra in questo gruppo.La caratterizzazione dei gruppi si fa pertanto analizzando le modalità presentate in questo output.

Page 98: ESERCITAZIONI R 1. Gestione dati 1 – Caricamento dati > Dati str(Dati) 'data.frame': 42 obs.

98

Occorre fare attenzione peraltro a interpretare correttamente i dati riportati nell’output.Le modalità indicate non sono infatti necessariamente quelle più frequenti nel gruppo, ma solo quelle che risultano statisticamente diverse, per eccesso o per difetto, rispetto al dato complessivo campionario.Consideriamo ad esempio la sesta riga, relativa alla modalità Not.friends della variabile friends (ovvero coloro che non bevono il tè con gli amici, contrapposta alla omonima modalità friends che indica coloro che lo fanno).Sebbene sia corretto caratterizzare il cluster in base a tale variabile, la distribuzione della variabile nel gruppo è: friends=52,44%, Not.friends=47,56.In altre parole, all’interno del gruppo sono di più coloro che bevono il tè con gli amici rispetto a coloro che non lo fanno.Ma la percentuale di questi ultimi (appunto, 47,56) risulta comunque maggiore in modo statisticamente significativo rispetto al dato complessivo campionario (pari al 34,66%). Per converso, essendo la variabile friends dicotomica, la modalità friends (27° riga nell’output), pur essendo comunque la più frequente nel gruppo, risulta minore in modo statisticamente significativo rispetto al dato complessivo campionario (pari al 65,33%)

Page 99: ESERCITAZIONI R 1. Gestione dati 1 – Caricamento dati > Dati str(Dati) 'data.frame': 42 obs.

Analogamente, sui dati fattoriali dell’mca si può anche operare una classificazione con metodo partizionale, ad esempio con il metodo delle k medie, operazione non possibile con il pacchetto FactoMineR. Occorre allora estrarre le coordinate fattoriali degli individui. La procedura è analoga a quella vista nel caso delle componenti principali:

Crea un nuovo oggetto R contenente le 300 coppie di coordinate fattoriali, una coppia per ogni individuo del dataset originario. Su di esso potremo lanciare il comando kmeans:

Che produrrà, ad esempio, la seguente classificazione:

99