Questa volta vediamo come con ggplot2 sia possibile, impiegando una sola riga di codice, ottenere rappresentazioni multiple di una statistica (come ad esempio la media) con le corrispondenti barre dell'errore, che tecnicamente definiscono i limiti di confidenza della statistica.
Nel primo dei due esempi che seguono sottraiamo e sommiamo alla media di una variabile 1.96 volte la sua deviazione standard ottenendo i limiti di confidenza al 95% della distribuzione campionaria.
Copiate e incollate nella Console di R questo script e premete ↵ Invio.
# BARRE DELL'ERRORE E LIMITI DI CONFIDENZA della distribuzione campionaria
#
library (DAAG) # carica il pacchetto che include il set di dati ais
library(dplyr) # carica il pacchetto per i calcoli
library(ggplot2) # carica il pacchetto per la grafica
#
# calcola media e deviazione standard separatamente per sport e per sesso
#
ais_stat <- ais %>% group_by(sport, sex) %>% summarise(mean_hg=mean(hg), sd_hg=sd(hg)) %>% ungroup()
#
# crea il grafico ma alcuni dati risultano sovrapposti
#
ggplot(ais_stat, aes(x=sport, y=mean_hg, color=sex)) + geom_point(size=3) + geom_errorbar(aes(ymin=mean_hg-1.96*sd_hg, ymax=mean_hg+1.96*sd_hg), width=0.2) + labs(x="Sport praticato", y="Emoglobina in g/dL", color="Sesso dell'atleta") + theme_minimal() + theme(legend.position="top")
#
Le prime tre righe servono a caricare i pacchetti necessari, che devono essere preventivamente scaricati dal CRAN, il primo dei quali contiene il set di dati ais impiegato come esempio [1].
La quarta riga di codice serve per preparare i dati impiegando l'operatore pipe (%>%) che trasferisce i dati da una funzione alla successiva in questo modo:
→ i dati (ais) sono trasferiti (%>%) alla funzione group_by();
→ la funzione group_by() raggruppa i dati in sottoinsiemi per sport praticato (sport) e per sesso dell'atleta (sex) e il risultato di questa suddivisione viene trasferito (%>%) alla funzione summarise();
→ la funzione summarise() calcola la media mean() e deviazione standard sd() della variabile hg che è la concentrazione nel sangue dell'emoglobina (espressa in g/dL, grammi per decilitro di sangue) dei 202 atleti australiani [1] suddivisi per sport e per sesso, e il risultato viene salvato (<-) nella tabella ais_stat;
→ i risultati sono trasferiti (%>%) alla funzione ungroup() che rimuove dalla tabella ais_stat una serie di valori impiegati provvisoriamente per generarla.
L'ultima riga di codice realizza un grafico:
→ impiegando le statistiche salvate nella variabile ais_stat;
→ riportando in ascisse lo sport praticato (sport), in ordinate la media dell'emoglobina (mean_hg), assegnando colori diversi in base al sesso (sex);
→ riportando un grafico a punti (geom_point) dei dati;
→ aggiungendo con geom_errorbar() le barre che indicano l'errore che nel nostro caso è rappresentato da 1.96 volte la deviazione standard (sd_hg);
→ aggiungendo con labs() le opportune etichette;
→ impiegando con theme_minimal() una rappresentazione semplice;
→ posizionando infine la legenda in alto (legend.position="top").
Questo è il grafico.
Poiché le barre dell'errore nei due sessi risultano sovrapposte, riducendo la chiarezza del grafico, riprendiamo lo stesso codice con una piccola modifica. Copiate e incollate nella Console di R questo script e premete ↵ Invio.
# BARRE DELL'ERRORE E LIMITI DI CONFIDENZA della distribuzione campionaria
#
library (DAAG) # carica il pacchetto che include il set di dati ais
library(dplyr) # carica il pacchetto per i calcoli
library(ggplot2) # carica il pacchetto per la grafica
#
# calcola media e deviazione standard separatamente per sport e per sesso
#
ais_stat <- ais %>% group_by(sport, sex) %>% summarise(mean_hg=mean(hg), sd_hg=sd(hg)) %>% ungroup()
#
# crea il grafico evitando la sovrapposizione dei dati
ggplot(ais_stat, aes(x=sport, y=mean_hg, color=sex)) + geom_point(size=3, position=position_dodge(width=0.5)) + geom_errorbar(aes(ymin=mean_hg-1.96*sd_hg, ymax=mean_hg+1.96*sd_hg), width=0.2, position=position_dodge(width=0.5)) + labs(x="Sport praticato", y="Emoglobina in g/dL", color="Sesso dell'atleta") + theme_minimal() + theme(legend.position="top")
#
L'unica differenza è che aggiungiamo alla funzione geom_point() e alla funzione geom_errorbar() l'argomento position=position_dodge(width=0.5): questo consente di eliminare la sovrapposizione delle barre dell'errore.
Si può ora notare meglio che le distribuzioni delle concentrazioni di emoglobina nei due sessi si sovrappongono, ma che le medie appaiono differire in modo abbastanza consistente.
Se digitate ais_stat nella Console di R potete visualizzare le medie (mean_hg) e le deviazioni standard (sd_hg), suddivise per ciascuno sport (sport) e per ciascun sesso (sex), calcolate e impiegate per realizzare i grafici.
> ais_stat
# A tibble: 17 × 4
sport sex mean_hg sd_hg
<fct> <fct> <dbl> <dbl>
1 B_Ball f 13.1 0.878
2 B_Ball m 15.1 0.922
3 Field f 14.6 0.682
4 Field m 16.0 0.805
5 Gym f 13.6 0.860
6 Netball f 12.8 0.567
7 Row f 14.0 0.740
8 Row m 15.4 0.711
9 Swim f 13.6 0.583
10 Swim m 15.5 0.655
11 T_400m f 13.8 1.04
12 T_400m m 15.3 0.824
13 T_Sprnt f 14.2 0.556
14 T_Sprnt m 16.2 1.49
15 Tennis f 13.5 1.10
16 Tennis m 15.6 1.48
17 W_Polo m 15.5 0.718
Completiamo quindi l'analisi dei dati: sottraiamo e sommiamo alla media della variabile 1.96 volte il suo errore standard ottenendo i limiti di confidenza al 95% della media campionaria.
Copiate e incollate nella Console di R questo script e premete ↵ Invio.
# BARRE DELL'ERRORE E LIMITI DI CONFIDENZA della media campionaria
#
library (DAAG) # carica il pacchetto che include il set di dati ais
library(dplyr) # carica il pacchetto per i calcoli
library(ggplot2) # carica il pacchetto per la grafica
library(plotrix) # carica il pacchetto per il calcolo dell'errore standard
#
# calcola media e deviazione standard separatamente per sport e per sesso
#
ais_stat <- ais %>% group_by(sport, sex) %>% summarise(mean_hg=mean(hg), es_hg=std.error(hg)) %>% ungroup()
#
# crea il grafico evitando la sovrapposizione dei dati
#
ggplot(ais_stat, aes(x=sport, y=mean_hg, color=sex)) + geom_point(size=3, position=position_dodge(width=0.5)) + geom_errorbar(aes(ymin=mean_hg-1.96*es_hg, ymax=mean_hg+1.96*es_hg), width=0.2, position=position_dodge(width=0.5)) + labs(x="Sport praticato", y="Emoglobina in g/dL", color="Sesso dell'atleta") + theme_minimal() + theme(legend.position="top")
#
Da notare che deve essere installato anche il pacchetto plotrix che viene impiegato per calcolare l'errore standard della media. Per il resto viene impiegato esattamente lo stesso codice dello script precedente, semplicemente sostituendo la deviazione standard dell'emoglobina con l'errore standard della media (es_hg) calcolato con la funzione std.error(). Questo è il risultato.
Come si può rilevare dal grafico, a parte il caso del tennis (Tennis), all'interno di ciascuno sport i limiti di confidenza al 95% delle medie dell'emoglobina negli atleti dei due sessi non si sovrappongono.
Se digitate ais_stat nella Console di R potete ora visualizzare la tabella che contiene media (mean_hg) ed errore standard (es_hg) calcolati per ciascuno sport (sport) e per ciascun sesso (sex).
> ais_stat
# A tibble: 17 × 4
sport sex mean_hg es_hg
<fct> <fct> <dbl> <dbl>
1 B_Ball f 13.1 0.243
2 B_Ball m 15.1 0.266
3 Field f 14.6 0.258
4 Field m 16.0 0.232
5 Gym f 13.6 0.430
6 Netball f 12.8 0.118
7 Row f 14.0 0.158
8 Row m 15.4 0.184
9 Swim f 13.6 0.194
10 Swim m 15.5 0.182
11 T_400m f 13.8 0.312
12 T_400m m 15.3 0.194
13 T_Sprnt f 14.2 0.278
14 T_Sprnt m 16.2 0.450
15 Tennis f 13.5 0.414
16 Tennis m 15.6 0.741
17 W_Polo m 15.5 0.174
Conclusione:
→ il termine barra dell'errore o errorbar indica semplicemente l'espediente grafico impiegato per rappresentare attorno al valore di una statistica i limiti di confidenza della statistica al livello di probabilità desiderato. In genere si impiega il livello di probabilità del 95% in modo che la probabilità che il valore della statistica – stimato mediante i dati campionari – possa uscire dai limiti di confidenza così calcolati sia "solamente" del 5%;
→ i limiti di confidenza al 95% della distribuzione campionaria – calcolati come media±1.96 ∙ ds (deviazione standard) – sono i limiti all'interno dei quali cade il 95% dei valori osservati nel campione esaminato, quindi la probabilità che un nuovo dato risulti al di fuori di questi limiti è del 5%;
→ i limiti di confidenza al 95% della media – calcolati come media±1.96 ∙ es (errore standard) – sono i limiti all'interno dei quali abbiamo il 95% di probabilità che cada la media, stante l'informazione contenuta nel nostro campione. Questi limiti forniscono un test di significatività della differenza tra le medie: quando i limiti di confidenza al 95% di due medie non si sovrappongono, possiamo affermare che tra le due medie esiste una differenza statisticamente significativa. Quindi nel nostro caso possiamo concludere che all'interno di ciascuno degli sport praticati da entrambi i sessi, con una sola eccezione, la concentrazione media dell'emoglobina nelle atlete è significativamente inferiore a quella degli atleti e che la probabilità che questa conclusione sia errata è del 5% o meno;
→ il risultato di una statistica dovrebbe essere fornito riportando anche la sua incertezza, espressa in termini dei suoi limiti di confidenza (opportunamente specificati, e.g.: limiti di confidenza al 90%, limiti di confidenza al 95%, media±ds, media±es, eccetera).
----------
[1] Vedere il post Il set di dati ais nel quale trovate anche come caricare i dati senza impiegare il pacchetto DAAG.
Nessun commento:
Posta un commento