Capitolo 3 Richiami di statistica descrittiva

Qualunque esperimento include una serie di rilievi, al termine dei quali ci troviamo con una o più variabili, che costituiscono un ‘dataset.’ Il nostro primo compito è quello di comprendere e descrivere le caratteristiche fondamentali di ogni variabile, utilizzando opportune statistiche descrittive, che cambiano al cambiare del tipo di variabile.

3.1 Dati quantitativi

Se i dati sono stati ottenuti con un processo di misurazione e rappresentano una quantità, come, ad esempio, il peso, l’altezza, la concentrazione e così via, abbiamo una variabile quantitativa, le cui caratteristiche fondamentali sono almeno due:

  1. tendenza centrale
  2. dispersione

La tendenza centrale di una variabile quantitativa è un valore, intorno al quale si collocano tutte le osservazioni, mentre la dispersione misura, in qualche modo, la distanza delle osservazioni tra di loro. Esistono diverse statistiche di tendenza centrale e dispersione; di seguito, descriveremo le più importanti.

3.1.1 Indicatori di tendenza centrale

L’indicatore di tendenza centrale più diffuso è la media aritmetica, che non necessita di particolari spiegazioni: si tratta della somma dei dati (\(x\)) divisa per il loro numero (\(n\)):

\[\mu = \frac{\sum\limits_{i = 1}^n x}{n}\]

Per esempio, consideriamo il seguente dataset, che elenca le altezze di quattro piante di mais \(d = [178, 175, 158, 153]\)

Il calcolo della media è banale:

\[\mu = \frac{178 + 175 + 158 + 153}{4} = 166\]

Un altro indicatore di tendenza centrale è la mediana, cioè il valore che bipartisce i dati in modo da lasciarne metà a sinistra e metà a destra, così da risultare superiore a quello del 50% degli individui. Per calcolare la mediana, basta ordinare i soggetti in ordine crescente: se il numero di individui è dispari, la mediana è data dal valore dall’individuo che occupa il posto centrale o, se gli individui sono in numero pari, dalla media delle due osservazioni centrali. Nel nostro dataset relativo alle altezze, i dati sono in numero pari, quindi dopo averli ordinati, prendiamo il secondo e il terzo valore e calcoliamo la loro media, pari a \((158 + 175)/2 = 166.5\).

La mediana è un indicatore più robusto della media: infatti, supponiamo di avere i cinque valori: 1 - 4 - 7 - 9 - 10. La media è pari a 6.2, mentre la mediana è pari a 7 (valore centrale). Se cambiano il numero più alto in questo modo, sostituendolo con 100, la media diventa 24.2, mentre la mediana rimane pari a 7, mostrando come essa non sia per nulla influenzata dai valori estremi (outliers).

3.1.2 Indicatori di dispersione

Gli indicatori di tendenza centrale, da soli, non ci informano su come le unità sperimentali tendono a differire l’una dall’altra: ad esempio una media pari a 100 può essere ottenuta con tre individui che misurano 99, 100 e 101 rispettivamente o con tre individui che misurano 1, 100 e 199. E’ evidente che in questo secondo gruppo gli individui sono molto più differenti tra loro (dispersi) che nel primo gruppo.

Pertanto, i risultati di un processo di misurazione non possono essere descritti solo con la media, ma è necessario anche calcolare un indice di variabilità. Tra essi, il più semplice è il campo di variazione, che è la differenza tra la misura più bassa e la misura più alta. In realtà, non si tratta di un vero e proprio indice di variabilità, in quanto dipende solo dai termini estremi della distribuzione e non necessariamente cresce al crescere della variabilità degli individui. Per questo motivo, si preferisce utilizzare indicatori più affidabili, come la devianza, la varianza, la deviazione standard ed il coefficiente di variabilità, tutti collegati da relazioni algebriche ben definite.

La devianza (generalmente nota come SS, cioè somma dei quadrati, sum of squares) è data da:

\[SS = \sum\limits_{i = 1}^n {(x_i - \bar x)^2 }\]

Si tratta di un indicatore caratterizzato da un significato geometrico molto preciso, collegabile alla somma dei quadrati delle distanze euclidee di ogni osservazione rispetto alla media. Per le altezze che abbiamo utilizzato in precedenza, la devianza si calcola:

\[SS = \left(178 - 166 \right)^2 + \left(175 - 166 \right)^2 + \left(158 - 166 \right)^2 + \left(153 - 166 \right)^2= 458\]

La devianza è molto utile in alcuni contesti che vedremo, ma per la semplice descrizione della variabilità dei dati ha due problemi: in primo luogo, proprio perché è una somma, il valore finale dipende dal numero di addendi e quindi non lo si può utilizzare per confrontare la variabilità di collettivi diversamente numerosi. Inoltre, l’unità di misura della devianza è al quadrato rispetto all’unità di misura originale dei dati; ad esempio se le osservazioni sono espresse in centimetri (come in questo caso), la devianza è espressa in centimetri quadrati, il che rende più difficoltosa l’interpretazione di questa statistica.

Oltre dalla devianza, si può calcolare la varianza (o meglio, varianza campionaria), definita come segue:

\[\sigma^2 = \frac{SS}{n - 1}\]

Nel nostro caso:

\[\sigma^2 = \frac{458}{3} = 152.67\]

La varianza permette di confrontare la variabilità di collettivi diversamente numerosi, anche se permane il problema che questo indicatore è espresso in un’unità di misura al quadrato, rispetto a quella delle osservazioni originali. Per eliminare questo problema si ricorre alla radice quadrata della varianza, cioè la deviazione standard, che si indica con \(\sigma\). La deviazione standard è espressa nella stessa unità di misura dei dati originari ed è quindi molto informativa sulla banda di oscillazione dei dati rispetto alla media. Viene frequentemente utilizzata per descrivere l’incertezza assoluta di una misura ripetuta più volte. Nel nostro caso, risulta che:

\[\sigma = \sqrt{152.67} = 12.36\]

e questo valore ci fa capire che, ‘mediamente,’ la distanza euclidea tra le osservazioni e la media è 12.36 centimetri. Media e deviazione standard sono spesso riportate contemporaneamente, utilizzando un intervallo \(l\) definito come:

\[l = \mu \pm \sigma\]

In assenza della media, \(\sigma\) non riesce a dare informazioni facilmente comprensibili: se in un collettivo la deviazione standard è 12.36 come è questo collettivo? Molto o poco variabile? Non possiamo dirlo: potrebbe essere molto disperso se la media fosse bassa (ad esempio 16), oppure poco disperso, se la media fosse alta (esempio 1600). Per questo, se dobbiamo descrivere la variabilità dei dati indipendentemente dalla media, utilizziamo il coefficiente di variabilità (CV):

\[CV = \frac{\sigma }{\mu } \times 100\]

che è un numero puro e non dipende dall’unità di misura e dall’ampiezza del collettivo, sicché è molto adatto ad esprimere, ad esempio, l’errore degli strumenti di misura e delle apparecchiature di analisi (incertezza relativa). Nel nostro caso, abbiamo:

\[CV = \frac{12.36}{166} \times 100 = 7.45 \%\]

Come la media, anche la devianza, varianza e deviazione standard sono sensibili agli outliers. Pertanto, in presenza di queste osservazioni aberranti, possiamo estendere il concetto di mediana, calcolando i cosiddetti percentili, che bipartiscono la popolazione di partenza in modo da lasciare una certa quantità di termini alla sua sinistra e la restante quantità alla sua destra. Ad esempio, il primo percentile bipartisce la popolazione in modo da lasciare a sinistra l’ 1% dei valori e alla destra il restante 99%. Allo stesso modo l’ottantesimo percentile bipartisce la popolazione in modo da lasciare a sinistra l’80% dei termini e alla destra il restante 20%, mentre la mediana rappresenta il 50-esimo percentile.

I percentili più utilizzati per descrivere la dispersione di un collettivo sono il 25-esimo e il 75-esimo: se questi sono molto vicini, significa che il 50% dei soggetti è compreso in un intervallo piccolo e quindi la variabilità della popolazione è bassa. Calcolare i percentili a mano non è banale e, di conseguenza, lo faremo nei paragrafi successivi utilizzando R.

3.1.3 Incertezza delle misure derivate

A volte noi misuriamo due quantità e poi le combiniamo, per ottenere una misura derivata. La combinazione più semplice è la somma, ad esempio quando determiniamo separatamente il peso di due specie infestanti in un vaso e poi sommiamo questi due valori per ottenere il peso totale della biomassa infestante. In questo caso, l’incertezza assoluta di una somma o di una differenza è sempre uguale alla radice quadrata della somma dei quadrati delle incertezze assolute degli addendi. Ad esempio, se abbiamo le due quantità \(22 \pm 2\) e \(14 \pm 3\), la somma sarà \(36 \pm \sqrt{4 + 9}\) e la differenza sarà \(8 \pm 3.6\).

3.1.4 Relazioni tra variabili quantitative: correlazione

Se su ogni soggetto abbiamo rilevato due caratteri quantitativi (ad esempio il peso e l’altezza, oppure la produzione e il contenuto di proteina della granella), è possibile verificare se esiste una relazione tra la coppia di variabili ottenuta, cioè se al variare di una cambia anche il valore dell’altra, in modo congiunto.

Per questo fine, si utilizza il coefficiente di correlazione di Péearson costituito dal rapporto tra la codevianza (o somma dei prodotti) delle due variabili e la radice quadrata del prodotto delle loro devianze. Il coefficiente di correlazione varia tra \(-1\) e \(+1\): un valore pari a \(+1\) indica concordanza perfetta (quando aumenta una variabile, aumenta anche l’altra in modo proporzionale), mentre un valore pari a \(-1\) indica discordanza perfetta (quando aumenta una variabile, diminuisce l’altra in modo inversamente proporzionale). Un valore pari a \(0\) indica assenza di qualunque grado di variazione congiunta tra le due variabili (assenza di correlazione). Valori intermedi tra quelli anzidetti indicano correlazione positiva (se positivi) e negativa (se negativi).

Proviamo a considerare questo esempio: il contenuto di olio di 9 lotti di acheni di girasole è stato misurato con due metodi diversi ed è riportato più sotto.

A <- c(45, 47, 49, 51, 44, 37, 48, 44, 53)
B <- c(44, 44, 49, 53, 48, 34, 47, 46, 51)

Valutare la correlazione tra i risultati dei due metodi di analisi. Manualmente dobbiamo eseguire alcune operazioni:

  1. calcolare la devianza di A
  2. calcolare la devianza di B
  3. calcolare la loro codevianza

In primo luogo, vediamo che le due medie sono, rispettivamente 46.44 e 46.22. A questo punto possiamo calcolare gli scarti, come differenze tra ogni dato e la sua media e calcolare i loro quadrati, nonché i loro prodotti, riportando il tutto in una tabella, come indicato qui di seguito.

A questo punto possiamo calcolare la somma dei quadrati degli scarti, ottenendo le devianze di \(A\) e \(B\) (rispettivamente 176.22 e 239.56) nonché le somme dei prodotti degli scarti, ottenendo la codevianza (pari a 184.11).

Il coefficiente di correlazione è quindi:

\[r = \frac{184.11}{\sqrt{176.22 \times 239.56}} = 0.896\]

Vediamo che il coefficiente di correlazione è abbastanza vicino ad 1 e quindi possiamo concludere che i due metodi di analisi danno risultati ben concordanti.

3.2 Dati qualitativi

Nel capitolo 2 abbiamo visto che le variabili qualitative sono ottenute assegnando un soggetta ad una classe scelta tra due o più possibili opzioni. La descrizione di queste variabili di solito è effettuata calcolando le frequenza assolute, cioè il numero di individui assegnato ad ogni classe. Ad esempio, se abbiamo esaminato 500 insetti rilevando l’ordine a cui appartengono, le frequenze assolute potrebbero essere: 100 ditteri, 200 imenotteri e 150 ortotteri.

Oltre alle frequenze assolute, possiamo calcolare anche le frequenze relative, dividendo le frequenze assolute per il numero totale degli individui del collettivo. Nel caso prima accennato, la frequenza relativa dei ditteri è pari a \(100/500 = 0.2\).

Se le classi possono essere logicamente ordinate, oltre alle frequenze assolute e relative, possiamo calcolare anche le cosiddette frequenze cumulate, che si ottengono cumulando le frequenze relative di una classe con quelle di tutte le classi precedenti.

3.2.1 Distribuzioni di frequenze e classamento

Quando rappresentiamo, in un grafico o in una tabella, le frequenze (assolute, relative o cumulate) per tutte le classi e tutti gli individui del collettivo, otteniamo una distribuzione di frequenze.

Ad esempio, se consideriamo il famoso database ‘mtcars,’ relativo alle 32 auto storiche censite dalla rivista Motor Trends nel 1974, e analizziamo il numero delle marce, otteniamo la seguente distribuzione di frequenze assolute, relative e cumulate.

Marce Freq.Ass Freq.Rel Freq.Cum
3 15 0.47 0.47
4 12 0.38 0.84
5 5 0.16 1.00

Una distribuzione di frequenze può essere rappresentata con un grafico a torte, come vedremo tra poco. Inoltre, precisiamo anche che le distribuzioni di frequenze possono essere costruite anche per le variabili quantitative, tramite un’operazione di classamento, che consiste nel creare classi con intervalli opportuni e contare i soggetti in ogni classe. In questo modo, se le osservazioni sono molto numerose, la lettura delle informazioni risulta più semplice e più completa che non elencando tutti i valori o, d’altra parte, riportando solo la media e la deviazione standard. Daremo un esempio di questa tecnica in un paragrafo successivo.

3.2.2 Statistiche descrittive per le distribuzioni di frequenze

Per una distribuzione di frequenze, il più semplice indicatore di tendenza centrale è la moda, cioè il valore della classe che presenta la maggior frequenza. Ovviamente, se la variabile è quantitativa ed è stata sottoposta a classamento, si considera come moda il punto centrale della classe con maggior frequenza. L’individuazione della moda è banale e non richiede calcoli di sorta.

In alcune condizioni (distribuzioni di frequenze per caratteri qualitativi ordinabili o quantitativi sottoposti a classamento), oltre alla moda possiamo calcolare la mediana e gli altri percentili, nonché la media e le altre statistiche descrittive indicate per i caratteri quantitativi. Tuttavia, si tratta di una situazione più tipica delle scienze economiche e sociali che non delle scienze agrarie e biologiche e, per questo motivo, non la prenderemo in ulteriore considerazione.

3.2.3 Distribuzioni di frequenza bivariate: le tabelle di contingenze

In alcuni casi, in ciascuna unità sperimentale del collettivo vengono studiati due (o più) caratteri qualitativi e, di conseguenza, si ha a che fare con distribuzioni di frequenze bivariate (o multivariate), rappresentabili con tabelle di contingenze. Si tratta di tabelle a due entrate, nelle quali ogni numero rappresenta la frequenza assoluta per una particolare combinazione delle due variabili.

Ad esempio, se per un gruppo di bacche di pomodoro abbiamo rilevato, bacca per bacca, la varietà (nelle due classi SANREMO e FANO) e la forma (nelle tre classi LUNGO, TONDO ed OVALE) potremo definire la tabella di contingenze sotto riportata.

LUNGO TONDO OVALE
SANREMO 37 32 61
FANO 45 74 59

Ogni riga della tabella sovrastante costituisce una distribuzione di frequenze per la forma del frutto, data una certa classe di varietà (distribuzione di frequenze condizionate). Allo stesso modo si può dire che ogni colonna rapresenta una distribuzione di frequenze condizionate per una certa classe di forma.

3.2.4 Connessione

Se guardiamo le due distribuzioni condizionate per SANREMO e FANO possiamo notare che esiste una certa differenza. Potremmo chiederci quindi se il presentarsi di una data modalità del carattere varietà (SANREMO o FANO) influenza il presentarsi di una particolare modalità del carattere forma del frutto. In altre parole, potremmo chiederci se le baccke della varietà SANREMO sono più frequentemente ovali, mentre quelle della varietà FANO sono più frequentemente tonde. Se fosse così, si potrebbe parlare di dipendenza o connessione, mentre, nel caso contrario, si dovrebbe parlare di indipendenza dei caratteri.

Come si fa a stabilire se i caratteri sono indipendenti o connessi? Bisogna pensare che, in caso di indipendenza, le distribuzioni condizionate di una variabile, ad esempio la forma, dovrebbero essere uguali per entrambe le varietà. Se consideriamo la classe LUNGO, la frequenza relativa marginale è pari ad \(82/308 = 0.266\) (82 è il numero totale di pomodori di forma allungata, mentre 308 è il numero totale dei pomodori); in caso di indipendenza, questa frequenza dovrebbe essere la stessa, sia per SANREMO che per FANO. In cifre, la frequenza assoluta per la combinazione LUNGO|SANREMO dovrebbe essere pari a \(130 \times 0.266 =34.6\). mentre per la combinazione LUNGO|FANO dovrebbe essere pari a \(178 \times 0.266=47.4\). Procedendo allo stesso modo, possiamo costruire la tabella delle frequenze assolute attese, nell’ipotesi di indipendenza completa tra i due caratteri.

LUNGO TONDO OVALE
SANREMO 34.6 44.7 50.6
FANO 47.4 61.3 69.4

A questo punto è logico costruire un indice statistico di connessione, detto \(\chi^2\), che misuri lo scostamento tra le frequenze osservate e quelle attese nell’ipotesi di indipendenza perfetta:

\[\chi ^2 = \sum \left[ \frac{\left( {f_o - f_a } \right)^2 }{f_a } \right]\]

dove \(f_o\) sta per frequenza osservata ed \(f_a\) sta per frequenza attesa nel caso indipendenza. Questo indice assume valore pari a zero nel caso di indipendenza completa (le frequenze osservate sono uguali a quelle attese) ed assume un valore positivo tanto più alto quanto maggiore è la connessione tra i due caratteri, fino ad un valore massimo dato dal prodotto del numero degli individui per il valore minimo tra il numero di righe meno una e il numero di colonne meno una:

\[\max \chi ^2 = n \cdot \min (r - 1,\,c - 1)\]

Nel nostro caso, il chi quadro è:

\[\chi ^2 = \frac{\left( {37 - 34.6 } \right)^2 }{34.6 } + \frac{\left( {32 - 44.7 } \right)^2 }{44.7 } + ... + \frac{\left( {59 - 69.4 } \right)^2 }{69.4 } = 10.22\]

Il valore massimo ammissibile sarebbe pari a 308, cioè il numero totale di bacche moltiplicato per uno, che è il valore minimo tra 2 (numero di colonne menu una) e 1 (numero di righe meno una). Il valore osservato è quindi il 3% circa di quello massimo possibile (\(10.22/308=0.033\)) e si può concludere che la connessione tra i due caratteri esiste, ma non è molto forte.

3.3 Statistiche descrittive con R

Le statistiche descrittive si calcolano facilmente con R. Per esercizio, utilizziamo il dataset ‘heights.csv,’ che è disponibile in una repository online. Il box sottostante mostra come caricare il dataset, del quale utilizzeremo la colonna ‘height’ che riporta le altezze di venti piante di mais.

filePath <- "https://www.casaonofri.it/_datasets/heights.csv"
dataset <- read.csv(filePath, header = T)
dataset$height
##  [1] 172 154 150 188 162 145 157 178 175 158 153 191 174 141 165 163
## [17] 148 152 169 185

La media si calcola con la funzione mean(), mentre la mediana si calcola con la funzione median().

mean(dataset$height)
## [1] 164
median(dataset$height)
## [1] 162.5

Per la devianza, non esiste una funzione dedicata e, di conseguenza, si deve utilizzare l’equazione fornita più sopra:

sum( (dataset$height - mean(dataset$height))^2 )
## [1] 4050

Varianza e deviazione standard sono molto facili da calcolare, grazie alle funzioni apposite, mentre il coefficiente di variabilità si può calcolare con la formula data più sopra:

var(dataset$height)
## [1] 213.1579
sd(dataset$height)
## [1] 14.59993
sd(dataset$height)/mean(dataset$height) * 100
## [1] 8.902395

Per calcolare i percentili si usa la funzione quantile(), fornendo le proporzioni di soggetti da lasciare sulla sinistra con l’argomento ‘probs.’ Ad esempio, per il 25-esimo percentile utilizzeremo 0.25, mentre per il 75-esimo utilizzeremo 0.75:

quantile(dataset$height, probs = c(0.25, 0.75))
##    25%    75% 
## 152.75 174.25

La correlazione si calcola invece con la funzione cor(), come indicato più sotto.

cor(A, B)
## [1] 0.8960795

3.3.1 Descrizione dei sottogruppi

In biometria è molto comune che il gruppo di soggetti sia divisibile in più sottogruppi, corrispondenti, ad esempio, ai diversi trattamenti sperimentali. In questa comune situazione siamo soliti calcolare, per ogni gruppo, le statistiche descrittive già viste in precedenza, utilizzando la funzione tapply() in R, come mostrata più sotto.

m <- tapply(dataset$height, dataset$var, mean)
s <- tapply(dataset$height, dataset$var, sd)
descript <- data.frame(Media = m, SD = s)
descript
##    Media       SD
## C 165.00 14.36431
## N 164.00 16.19877
## S 160.00 12.16553
## V 165.25 19.51709

Nel codice sovrastante, height è la variabile che contiene i valori da mediare, var è la variabile che contiene la codifica di gruppo, mean è la funzione che dobbiamo calcolare. Ovviamente mean può essere sostituito da qualunque altra funzione ammissibile in R, come ad esempio la deviazione standard; successivamente, nel codice sovrastante abbiamo utilizzato la funzione data.frame() per creare un nuovo dataset con le medie e le deviazioni standard.

Oltre che in una tabella, i risultati possono anche essere riportati in un grafico a barre, con l’indicazione della variabilità dei dati. Possiamo utilizzare la funzione barplot() alla quale passeremo come argomenti l’altezza delle barre, data dalle medie dei diversi gruppi, i nomi dei gruppi medesimi e, opzionalmente, la scala dell’asse delle ordinate. La funzione barplot(), oltre che creare il grafico, restituisce le ascisse del centro di ogni barra, che possiamo utilizzare per creare dei segmenti verticali corrispondenti alle deviazioni standard di ogni gruppo, attraverso la funzione arrows().

Se, per ogni gruppo, le ascisse sono nel vettore ‘coord,’ i segmenti di variabilità avranno un punto di partenza con ascissa ‘coord’ e ordinata uguale al valore medio dell’altezza meno la deviazione standard e un punto di arrivo con ascissa sempre uguale a ‘coord’ e ordinata uguale all’altezza media più la deviazione standard. Gli altri argomenti della funzione arrows() servono per specificare il tipo di segmento che vogliamo tracciare; il codice sottostante produce l’output mostrato in Figura 3.1.

coord <- barplot(descript$Media, names.arg = row.names(descript), 
                 ylim = c(0, 200))
arrows(coord, descript$Media - descript$SD, 
       coord, descript$Media + descript$SD, 
       length = 0.05, angle = 90, code = 3)
Esempio di boxplot in R

Figure 3.1: Esempio di boxplot in R

Il grafico non è bellissimo; per ora ci accontenteremo, ma, con un po’ di esercizio, è possibile ottenere grafici di alto livello.

Quando abbiamo a che fare con gruppi molto numerosi, con un certo numero di outliers, è bene sostituire la mediana alla media, in associazione con il 25-esimo e 75-esimo percentile, come indicazioni di variabilità. Da un punto di vista grafico, possiamo utilizzare un boxplot (grafico Box-Whisker). Si tratta di una scatola (box) che ha per estremi il 25-esimo e il 75-esimo percentile ed è tagliata da una linea centrale in corrispondenza della mediana. Dalla scatola partono due linee verticali (baffi = whiskers) che identificano il valore massimo e il minimo. Se il massimo (o il minimo) distano dalla mediana più di 1.5 volte la differenza tra la mediana stessa e il 75-esimo (o 25-esimo) percentile, allora le linee verticali si fermano ad un valore pari ad 1.5 volte il 75-esimo (o il 25-esimo) percentile ed i dati più estremi vengono raffigurati come outliers. In basso abbiamo create tre gruppi con una funzione di estrazione di numeri casuali e li abbiamo rappresentati nel boxplot mostrato in Figura 3.2.

set.seed(1234)
A <- runif(20)
B <- runif(20)
C <- runif(20)
series <- rep(c("A", "B", "C"), each = 20)
values <- c(A, B, C)
boxplot(values ~ series)
Esempio di boxplot in R

Figure 3.2: Esempio di boxplot in R

3.3.2 Distribuzioni di frequenze e classamento

Utilizziamo il dataset ‘mtcars’ disponibile nell’installazione di base di R, che possiamo caricare utilizzando la funzione data().

data(mtcars)

In questo dataset, la variabile ‘gear’ indica il numero di marce e le frequenze assolute possono essere ottenute con la funzione table().

# Frequenze assolute
table(mtcars$gear)
## 
##  3  4  5 
## 15 12  5

Per le frequenze relative e percentuali, possiamo combinare il codice soprastante con l’impiego della funzione length(), che restituisce il numero di elementi in un vettore.

#Frequenze relative
table(mtcars$gear)/length(mtcars$gear)
## 
##       3       4       5 
## 0.46875 0.37500 0.15625
#Frequenze percentuali
table(mtcars$gear)/length(mtcars$gear) * 100
## 
##      3      4      5 
## 46.875 37.500 15.625

Mostriamo ora l’operazione di classamento di una variabile quantitativa, che tornerà utile nei prossimi capitoli. Prendiamo con R mille valori casuali da una distribuzione uniforme nell’intervallo da 130 a 200 ed esprimiamo questi mille valori tramite una distribuzione di frequenze nelle sei classi: <140, 140-150, 150-160, 160-170, 170-190, >190. Per il classamento si utilizza la funzione cut(), che con l’argomento breaks() consente di specificare gli estremi inferiori delle classi, inclusi per default nella classe precedente (intervalli aperti a destra e chiusi a sinistra).

vals <- runif(1000, min = 130, max = 200)
freq <- table( cut(vals, breaks = c(100, 140,150,160,170,190,200)) )
freq
## 
## (100,140] (140,150] (150,160] (160,170] (170,190] (190,200] 
##       141       135       143       139       282       160

Per le frequenze cumulate si usa invece la funzione cumsum().

cumsum(freq)
## (100,140] (140,150] (150,160] (160,170] (170,190] (190,200] 
##       141       276       419       558       840      1000

Una distribuzione di frequenze può essere rappresentata con un grafico a torta, che, in R, può essere disegnato con le funzioni pie(). Il grafico sottostante è abbastanza banale, in quanto le classi sono più o meno di ampiezza equivalente, dato che abbiamo utilizzato un campionamento da una distribuzione uniforme.

pie(table(freq))
Rappresentazione di una distribuzione di frequenze con un grafico a torta

Figure 3.3: Rappresentazione di una distribuzione di frequenze con un grafico a torta

3.3.3 Connessione

Consideriamo il dataset ‘HairEyeColor,’ disponibile nell’installazione di base di R e relativo al colore degli occhi e dei capelli di 520 studenti di statistica. La tabella delle contingenze, per le femmine, è la seguente:

data(HairEyeColor)
tab <- HairEyeColor[,,2]
tab
##        Eye
## Hair    Brown Blue Hazel Green
##   Black    36    9     5     2
##   Brown    66   34    29    14
##   Red      16    7     7     7
##   Blond     4   64     5     8

Se vogliamo sapere se il colore degli occhi è legato a quello dei capelli, possiamo utilizzare la funzione as.table() per trasformare l’oggetto tab in una tabella di contingenze (in questo caso non sarebbe necessario, visto che ‘tab’ è già una tabella di contingenze) ed applicare la funzione summary(). Oltre al chi quadro, l’output fornisce altre informazioni, che approfondiremo in un prossimo capitolo.

summary(as.table (tab))
## Number of cases in table: 313 
## Number of factors: 2 
## Test for independence of all factors:
##  Chisq = 106.66, df = 9, p-value = 7.014e-19
##  Chi-squared approximation may be incorrect

3.4 Altre letture

  1. F. Crivellari (2006). Analisi statistica dei dati con R. Apogeo, Milano.
  2. G. Leti e L. Cerbara (2009). Elementi di statistica descrittiva. Il Mulino Editore, Bologna.