class: center, middle, inverse, title-slide # Analisi Descrittiva ### Stefano Bussolon ### febbraio 2019 --- # L'analisi descrittiva --- ## Finalità Come è stato detto nel capitolo di introduzione metodologica, le statistiche descrittive sono finalizzate a: * avere una prima visione, qualitativa, delle variabili raccolte; * controllare la presenza di errori, ad esempio di data-entry; * far emergere outliers e anomalie; * valutare qualitativamente ipotesi e assunti, determinare qualitativamente le relazioni fra le variabili; * identificare l’entità e la direzione delle relazioni fra le variabili; * selezionare i modelli statistici appropriati; --- Sappiamo inoltre che si usano indicatori e strumenti diversi in base alla tipologia delle variabili (categoriali, ordinali, quantitative) ed in base al numero di variabili prese in considerazione (univariate, bivariate, multivariate). Analizziamo ora le funzioni più comuni nell'analisi descrittiva. --- ## Variabili categoriali ### Tabelle di contingenza Le tabelle di contingenza permettono di rappresentare la distribuzione di frequenza di variabili categoriali e di fattori. In R, si usa la funzione `table(variabile)` per la rappresentazione univariata, e `table(variabile1, variabile2)` per la rappresentazione bivariata. --- ### Barplot Un metodo grafico per visualizzare la distribuzione di frequenza di una variabile categoriale o ordinale è il barplot, usando la forma `barplot(table(variabile))`. ### La moda In R non esiste una funzione per calcolare la moda, ovvero la categoria (o il valore, in caso di variabili numeriche) con la frequenza più alta. Per calcolarla, si identifica il valore più alto della tabella delle frequenze. --- ```r # creiamo una variabile nominale con 3 livelli nominale <- factor( sample (c("rosso","bianco","verde"), 100,replace = TRUE)) # la tabella delle frequenze (frequenze<-table(nominale)) ``` ``` ## nominale ## bianco rosso verde ## 27 32 41 ``` ```r # calcoliamo la moda moda<-which(frequenze == max(frequenze)) names(frequenze)[moda] ``` ``` ## [1] "verde" ``` --- ```r # il grafico a barre barplot(frequenze) ``` ![](descrittiva_files/figure-html/desc_nominale_2-1.png)<!-- --> --- ## Variabili ordinali Gli indici che si possono calcolare con le variabii ordinali sono, oltre al numero di livelli e la moda, anche il minimo, il massimo, la mediana, i quartili ed il range interquantile. Come abbiamo visto nel capitolo dedicato alle tipologie di dati, in R le variabili ordinali vanno rappresentate come fattori ordinati. La funzione `summary()` però, se applicata ad un fattore, non restituisce questi dati, perché non vede il fattore come variabile numerica. Per aggirare l'ostacolo, è necessario utilizzare il vettore numerico sottostante, attraverso la chiamata alla funzione `as.integer()`. --- ```r # creiamo una variabile ordinale con 5 livelli cat_ord <- c("A","B","C","D", "E") ordinale <- factor( sample (cat_ord, 100,replace = TRUE), levels = cat_ord, ordered = TRUE ) # summary su ordinale summary(ordinale) ``` ``` ## A B C D E ## 16 25 20 17 22 ``` --- ```r # summary mi da anche la media, che non ha senso summary(as.integer(ordinale)) ``` ``` ## Min. 1st Qu. Median Mean 3rd Qu. Max. ## 1.00 2.00 3.00 3.04 4.00 5.00 ``` ```r # meglio usare quantile # calcolare i quartili sul vettore sottostante quantile(as.integer(ordinale)) ``` ``` ## 0% 25% 50% 75% 100% ## 1 2 3 4 5 ``` --- ## Variabili a intervalli Oltre a moda, mediana, minimo, massimo e quartili, per le variabili ad intervalli si calcolano la media e la varianza / deviazione standard. Dal punto di vista grafico, oltre al `boxplot`, si usa `hist` per rappresentare l'istogramma delle frequenze --- ```r # generiamo una variabile numerica con distribuzione normale # rnorm = numeri Random con distribuzione NORMale # 100 osservazioni, media=10, ds=2 intervalli <- rnorm(100, mean=10, sd=2) summary(intervalli) # ~ 100 ``` ``` ## Min. 1st Qu. Median Mean 3rd Qu. Max. ## 5.280 8.846 10.234 10.179 11.679 14.238 ``` ```r sd(intervalli) # ~ 2 ``` ``` ## [1] 1.966647 ``` --- ```r boxplot(intervalli) ``` ![](descrittiva_files/figure-html/desc_intervalli_2-1.png)<!-- --> --- ```r hist(intervalli) ``` ![](descrittiva_files/figure-html/desc_intervalli_3-1.png)<!-- --> --- ## Due variabili categoriali Il rapporto fra due variabili categoriali (nominali o ordinali) può essere rappresentato attraverso la tabella di contingenza a due vie. Graficamente, il rapporto può essere rappresentato attraverso il grafico `mosaicplot`. --- ```r (contingenza <- table(nominale, ordinale)) ``` ``` ## ordinale ## nominale A B C D E ## bianco 2 6 8 6 5 ## rosso 5 10 3 7 7 ## verde 9 9 9 4 10 ``` --- ```r mosaicplot(contingenza) ``` ![](descrittiva_files/figure-html/desc_mosaicplot-1.png)<!-- --> --- ## Una variabile categoriale, una numerica ### By `by()` è una funzione della famiglia di `apply`. La logica di `by` è di separare le righe un data frame, una matrice o un vettore in base ad un fattore. Ad esempio, la funzione `by(intervalli,ordinale,mean)` divide la variabile `intervalli` in cinque gruppi, in base al fattore `ordinale`, e per ogni gruppo applica la media. --- ```r by(intervalli,ordinale,mean) ``` ``` ## ordinale: A ## [1] 9.631198 ## -------------------------------------------------------- ## ordinale: B ## [1] 10.69033 ## -------------------------------------------------------- ## ordinale: C ## [1] 9.753332 ## -------------------------------------------------------- ## ordinale: D ## [1] 10.70221 ## -------------------------------------------------------- ## ordinale: E ## [1] 9.978475 ``` --- ### Boxplot Boxplot può essere usato per confrontare una variabile ad intervalli su una variabile categoriale (nominale o ordinale). ```r boxplot(intervalli ~ ordinale) ``` ![](descrittiva_files/figure-html/unnamed-chunk-1-1.png)<!-- --> --- ## Due variabili numeriche In caso di due variabili numeriche, la rappresentazione grafica è il grafico di dispersione. Se dal grafico appare che vi sia una correlazione, può essere utile calcolare la regressione lineare, con la funzione `lm(y ~ x)` e disegnare la retta di regressione, con la funzione `abline()`. --- ```r # creo una seconda variabile ad intervalli # che *correla* con la prima intervalli2 <- intervalli + rnorm(100, mean=2, sd=3) # calcolo la regressione lineare lineare <- lm(intervalli2 ~ intervalli) # il grafico di dispersione plot(intervalli,intervalli2) # disegno la retta di regressione abline(lineare) ``` ![](descrittiva_files/figure-html/unnamed-chunk-2-1.png)<!-- --> --- ## Risorse * [Exploratory Data Analysis Using R – Datazar Blog](https://blog.datazar.com/exploratory-data-analysis-using-r-part-i-17e4e8e03961) * [The Personality Project's Guide to R](https://personality-project.org/r/#descriptive) * [Exploratory Data Analysis with R](https://bookdown.org/rdpeng/exdata/exploratory-graphs.html) * [visualising data - psyr.org](https://psyr.org/visualising-data.html)