19
2. Analisi descrittive Enrico Properzi - [email protected] A.A. 2010/2011

2. Analisi descrittive Enrico Properzi - [email protected]@unibo.it A.A. 2010/2011

Embed Size (px)

Citation preview

Page 1: 2. Analisi descrittive Enrico Properzi - enrico.properzi3@unibo.itenrico.properzi3@unibo.it A.A. 2010/2011

2. Analisi descrittive

Enrico Properzi - [email protected] A.A. 2010/2011

Page 2: 2. Analisi descrittive Enrico Properzi - enrico.properzi3@unibo.itenrico.properzi3@unibo.it A.A. 2010/2011

Dopo aver importato i dati da un file di testoo e aver assegnato un nome al data frame corrispondente è sempre opportuno controllare la tipologia delle variabili attraverso il comando str()

L’output del comando ci dà informazioni sulla tipologia delle variabili del dataframe. A volte può essere necessario riqualificare le variabili.

Funzioni di conversione:as.factor(), as.matrix(), as.vector(), as.array(), as data.frame(), as numeric(), as characters(), as logical(),as complex()

> consumi <- read.table("consumi-reddito.txt", header=T)> studenti <- read.table("studenti.txt", header=T)

Page 3: 2. Analisi descrittive Enrico Properzi - enrico.properzi3@unibo.itenrico.properzi3@unibo.it A.A. 2010/2011

Analisi preliminari di un data frame:

•length (x) numero di elementi

• max(x) massimo

• min(x) minimo

• range(x) campo di variabilità

• sum(x) somma dei valori in x

• prod(x) prodotto dei valori in x

• mean (x) media aritmetica

• median (x) mediana

• quantile (x,p) p-esimo quantile

• var (x) varianza corretta

• sd(x) deviazione standard

• cov (x,y) covarianza tra x e y

• cor (x,y) correlazione tra x e y

• dist (x) matrice di distanze

Page 4: 2. Analisi descrittive Enrico Properzi - enrico.properzi3@unibo.itenrico.properzi3@unibo.it A.A. 2010/2011

Le funzioni cov() e cor() se applicate a più variabili quantitativelcolano risopettivamente la matrice di varianze e covararianze e quella di correlazione

> consumi <- read.table("consumi-reddito.txt", header=T)> str(consumi)'data.frame': 13 obs. of 3 variables: $ ETA : int 28 27 35 48 22 36 24 29 44 55 ... $ REDDITO: int 1045 1020 1450 1824 1250 2250 980 1660 1360... $ CONSUMI: int 560 750 1110 1540 890 1845 450 950 1200 1790 ...

> cov(consumi) ETA REDDITO CONSUMIETA 94.1923 3677.397 3633.654REDDITO 3677.3974 268170.077 238466.635CONSUMI 3633.6538 238466.635 239043.590

> cor(consumi) ETA REDDITO CONSUMIETA 1.0000000 0.7316910 0.7657681REDDITO 0.7316910 1.0000000 0.9418547CONSUMI 0.7657681 0.9418547 1.0000000

N.B. il comando cov() calcola la varianza corretta!!

Page 5: 2. Analisi descrittive Enrico Properzi - enrico.properzi3@unibo.itenrico.properzi3@unibo.it A.A. 2010/2011

> cov(studenti[,c("MAT","STAT","ECON","DIR")]) MAT STAT ECON DIRMAT 14.416975 2.0383395 1.4611317 7.2860920STAT 2.038340 8.3704389 -0.9783184 -0.0306716ECON 1.461132 -0.9783184 6.8482285 1.8704389DIR 7.286092 -0.0306716 1.8704389 6.0465362

> cor(studenti[,c("MAT","STAT","ECON","DIR")]) MAT STAT ECON DIRMAT 1.0000000 0.185551868 0.1470494 0.780376616STAT 0.1855519 1.000000000 -0.1292162 -0.004311308ECON 0.1470494 -0.129216200 1.0000000 0.290670583DIR 0.7803766 -0.004311308 0.2906706 1.000000000

Page 6: 2. Analisi descrittive Enrico Properzi - enrico.properzi3@unibo.itenrico.properzi3@unibo.it A.A. 2010/2011

Il comando dist() permette di costruire la matrice di distanza o dissimilarità.

Nel primo caso, essendo calcolata per una sola variabile, non rappresenta altro che le differenze dei valori della variabile tra le singole unità

Nel secondo caso sono state considerate due variabili ed è stat calcolata la distanza euclidea

> dist(studenti$STAT[1:10], method="euclidean", diag=T, upper=F) 1 2 3 4 5 6 7 8 9 101 0 2 6 0 3 1 7 0 4 0 6 1 0 5 4 2 5 4 0 6 0 6 1 0 4 0 7 6 0 7 6 2 6 0 8 1 7 0 1 5 1 7 0 9 0 6 1 0 4 0 6 1 0 10 4 2 5 4 0 4 2 5 4 0

> dist(studenti[1:8,c("STAT","ECON")], method="euclidean", diag=T, upper=F) 1 2 3 4 5 6 7 81 0.000000 2 7.810250 0.000000 3 2.236068 7.615773 0.000000 4 3.000000 6.324555 1.414214 0.000000 5 4.472136 3.605551 5.000000 4.123106 0.000000 6 0.000000 7.810250 2.236068 3.000000 4.472136 0.000000 7 7.810250 0.000000 7.615773 6.324555 3.605551 7.810250 0.000000 8 2.236068 7.615773 0.000000 1.414214 5.000000 2.236068 7.615773 0.000000

Page 7: 2. Analisi descrittive Enrico Properzi - enrico.properzi3@unibo.itenrico.properzi3@unibo.it A.A. 2010/2011

La funzione summary permette di ottenere le principali statistiche di una variabile o di un dataframe:

> summary (studenti)

Sesso Eta Indirizzo Prov MAT

F:33 Min. :22.00 Altro : 7 BO:13 Min. :20.00 M:29 1st Qu.:23.00 Amministrativo:15 FC:10 1st Qu.:24.25 Median :24.00 Aziendale :19 FE:10 Median :30.00 Mean :23.82 Finanziario :10 RA:15 Mean :27.47 3rd Qu.:25.00 Politico :11 RN:14 3rd Qu.:30.00 Max. :27.00 Max. :30.00 STAT ECON DIR Min. :20.00 Min. :18.00 Min. :18.00 1st Qu.:24.00 1st Qu.:27.00 1st Qu.:27.00 Median :28.00 Median :27.00 Median :28.00 Mean :25.92 Mean :27.06 Mean :27.23 3rd Qu.:28.00 3rd Qu.:28.00 3rd Qu.:28.75

Max. :30.00 Max. :30.00 Max. :30.00

Per le variabili sconnesse l’output riguarda il numero dei livelli e le rispettive frequenze.

Page 8: 2. Analisi descrittive Enrico Properzi - enrico.properzi3@unibo.itenrico.properzi3@unibo.it A.A. 2010/2011

Per classificare le unità rilevate secondo le modalità di uno o più caratteri di un data frame è possibile utilizzare il comando table():

> table (studenti$Indirizzo)

Altro Amministrativo Aziendale Finanziario Politico 7 15 19 10 11

> table(studenti$Indirizzo, studenti$Sesso) F M Altro 5 2 Amministrativo 13 2 Aziendale 3 16 Finanziario 2 8 Politico 10 1

Page 9: 2. Analisi descrittive Enrico Properzi - enrico.properzi3@unibo.itenrico.properzi3@unibo.it A.A. 2010/2011

Altra funzione che può essere utilizzata per la costruzione di tabelle è apply()

In generale apply(X, MARGIN, FUN) è utilizzabile per applicare una funzione alle righe o colonne di una matrice o in generale di un array (anche di un data-frame se è trasformabile in matrice)

Ad esempio per calcolare la media dei voti in statistica, economia e diritto del data frame “studenti” si può usare il seguente comando:

> apply(studenti[,c("STAT", "ECON", "DIR")],2,mean) STAT ECON DIR

25.91935 27.06452 27.22581

L’argomento MARGIN specifica se applicare la funzione alle colonne (MARGIN=2) o alle righe (MARGIN=1)

Page 10: 2. Analisi descrittive Enrico Properzi - enrico.properzi3@unibo.itenrico.properzi3@unibo.it A.A. 2010/2011

Per un vettore numerico, come l’età o il voto, può risultare utile suddividere i valori in classi:

> c1STAT <- cut(studenti$STAT, breaks=c(18,20,24,27,30), include.lowest=T, right=T)

> table(c1STAT)

c1STAT[18,20] (20,24] (24,27] (27,30] 1 25 3 33

Il vettore breaks consente di definire le soglie rispetto a cui dividere il vettore, mentre l’argomento di right è di tipo logico: metteremo TRUE se vogliamo intervalli chiusi a dx, FALSE per intervalli chiusi a sx.

Page 11: 2. Analisi descrittive Enrico Properzi - enrico.properzi3@unibo.itenrico.properzi3@unibo.it A.A. 2010/2011

Con R è possibile creare molte tipologie di rapresentazioni grafiche. Fondamentalmente i comandi per la creazione di grafici possono essere divisi in 3 gruppi:

1. Funzioni di alto livello: creano un nuovo grafico nella apposita finestra

2. Funzioni di basso livello: aggiungono parti a un grafico già esistente

3. Funzioni per grafici interattivi: consentono di aggiungere o estrarre interattivamente informazioni da un grafico esistente

Page 12: 2. Analisi descrittive Enrico Properzi - enrico.properzi3@unibo.itenrico.properzi3@unibo.it A.A. 2010/2011

La principale funzione di alto livello è plot()

Ogni volta che si utilizza plot() si apre una nuova finestra grafica che sostituisce quella precedentemente aperta.

plot (x,y,… type = tipo di grafico pch = tipo di punto lty = tipo di linea lwd = spessore della linea col = colore degli elementi del grafico axes = indica la presenza degli assi xlab= , ylab= etichette per gli assi xlim= , ylim= range per gli assi main= , sub= titolo e sottotitolo

Page 13: 2. Analisi descrittive Enrico Properzi - enrico.properzi3@unibo.itenrico.properzi3@unibo.it A.A. 2010/2011

plot(studenti$STAT, studenti$ECON, main="Grafico confronto voti statistica ed economia")

Page 14: 2. Analisi descrittive Enrico Properzi - enrico.properzi3@unibo.itenrico.properzi3@unibo.it A.A. 2010/2011

plot(studenti$STAT, studenti$ECON, pch=c(1,22)[studenti$Sesso], col=c(10,20)[studenti$Sesso], xlab="Voto Statistica", ylab="Voto Economia", main="Grafico confronto voti statistica ed economia")

Page 15: 2. Analisi descrittive Enrico Properzi - enrico.properzi3@unibo.itenrico.properzi3@unibo.it A.A. 2010/2011

Quando la variabile che si vuole graficare è un fattore (variabile qualitativa o discreta) il comando plot origina un diagramma a barre delle frequenze relative ai livelli del fattore

> plot (studenti$Prov)

Page 16: 2. Analisi descrittive Enrico Properzi - enrico.properzi3@unibo.itenrico.properzi3@unibo.it A.A. 2010/2011

Il comando attach() mi permette di accedere direttamente agli oggetti del data frame selezionato (senza dover utilizzare il comando “$”)

Il comando plot(f,x,..) dove f è un fattore e x un vettore numerico produce un boxplot della variabile x in corrispondenza dei diversi livelli del fattore f.

>attach(studenti)> plot(Indirizzo, STAT)

Nel boxplot sono riportati il massimo e il minimo con due linee orizzontali, mentre le due basi del rettangolo rappresentano il primo e il terzo quantile e la linea all’interno corrisponde alla mediana.

Page 17: 2. Analisi descrittive Enrico Properzi - enrico.properzi3@unibo.itenrico.properzi3@unibo.it A.A. 2010/2011

In base alla tipologia dei dati presenti nel data frame si possono impiegare funzioni di alto livello più specifiche:

• hist()• barplot()• pie()• boxplot()• coplot()

Per analizzare la distribuzione di una variabile quantitativa occorre utilizzare il comando hist() per creare un istogramma

> hist(STAT)

Page 18: 2. Analisi descrittive Enrico Properzi - enrico.properzi3@unibo.itenrico.properzi3@unibo.it A.A. 2010/2011

> stat <- hist(STAT)> stat

$breaks[1] 20 22 24 26 28 30

$counts[1] 14 12 3 20 13

$intensities[1] 0.11290320 0.09677419 0.02419355 0.16129032 0.10483871

$density[1] 0.11290320 0.09677419 0.02419355 0.16129032 0.10483871

$mids[1] 21 23 25 27 29

$xname[1] "STAT"

$equidist[1] TRUE

attr(,"class")[1] "histogram“

Nell’oggetto creato col comando hist() sono riportati gli intervalli rispetto a cui sono state costruite le classi (breaks), le frequenze assolute (counts), le densità di frequenza (density), i valori centrali delle classi (mids) e se le classi sono equidistribuite

Page 19: 2. Analisi descrittive Enrico Properzi - enrico.properzi3@unibo.itenrico.properzi3@unibo.it A.A. 2010/2011

Il comando pie() permette la costruzione di grafici a torta da utilizzare per dati di tipo qualitativo

> pie(table(Indirizzo))