---
title: "Analisi Descrittiva"
author: "Stefano Bussolon"
date: "febbraio 2019"
nooutput:
  html_document: default
  md_document:
    variant: markdown_github
  pdf_document: default
output:
  xaringan::moon_reader:
    lib_dir: libs
    nature:
      highlightStyle: github
      highlightLines: true
      countIncrementalSlides: false


---

```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
```

# L'analisi descrittiva

---

## Finalità

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 desc_nominale_1}
# creiamo una variabile nominale con 3 livelli
nominale <- factor(
	sample (c("rosso","bianco","verde"), 100,replace = TRUE))
# la tabella delle frequenze
(frequenze<-table(nominale))
# calcoliamo la moda
moda<-which(frequenze == max(frequenze))
names(frequenze)[moda]
```
---

```{r desc_nominale_2}

# il grafico a barre
barplot(frequenze)
```

---

## 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 desc_ordinale_1}
# 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)
```

---

```{r desc_ordinale_2}
# summary mi da anche la media, che non ha senso
summary(as.integer(ordinale))
# meglio usare quantile
# calcolare i quartili sul vettore sottostante
quantile(as.integer(ordinale))
```
---

## 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 a `boxplot`, si usa `hist` per rappresentare l'istogramma delle frequenze

---

```{r desc_intervalli_1}
# 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
sd(intervalli) # ~ 2
```

---

```{r desc_intervalli_2}
boxplot(intervalli)
```

---

```{r desc_intervalli_3}
hist(intervalli)
```

---

## 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 desc_contingenza}
(contingenza <- table(nominale, ordinale))
```

---

```{r desc_mosaicplot}

mosaicplot(contingenza)
```

---

## Una variabile categoriale, una numerica

### By

`by()` è una funzione della famiglia di `apply`. La logica di `by` è di separare le righe di 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 desc_by}
by(intervalli,ordinale,mean)
```

---

### Boxplot

Boxplot può essere usato per confrontare una variabile ad intervalli su una variabile categoriale (nominale o ordinale).

```{r desc_boxplot_intervalli_ordinale}
boxplot(intervalli ~ ordinale)
```

---

## 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 desc_intervalli2}
# 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)

```

---

## 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)


