La statistica è l'arte sottile che consente di ricavare informazione dai dati. Vediamo come ciò sia possibile impiegando anche semplici grafici di dispersione ma in questo caso separati per fattore.
Il punto di partenza è un grafico xy della distribuzione dei valori di concentrazione nel sangue dei globuli rossi (in ascisse) e dell'emoglobina (in ordinate) misurati in 202 atleti australiani di entrambi i sessi che praticano dieci differenti sport e contenuti nel set di dati ais.
# SCATTERPLOT semplice con ggplot
#
library (DAAG) # carica il pacchetto che include il set di dati ais
library(ggplot2) # carica il pacchetto per la grafica
#
# scatterplot semplice
ggplot(ais, aes(x=rcc, y=hg, color=sport)) + geom_point()
#
Le prime due righe servono a caricare i due pacchetti necessari, che devono essere preventivamente scaricati dal CRAN, e il primo dei quali contiene il set di dati [1].
Per realizzare il grafico viene impiegata la funzione ggplot() che prevede come argomenti:
→ il nome della tabella che contiene i dati (ais);
→ la funzione aes() che specifica la variabile da riportare in ascisse (rcc) e la variabile da riportare in ordinate (hg), che sono rispettivamente la concentrazione degli eritrociti (o globuli rossi) nel sangue espressa in milioni per microlitro di sangue (10^6/µL) e la concentrazione di emoglobina espressa in grammi per decilitro di sangue (g/dL);
→ il colore dei punti (color) separato per ciascuno degli sport praticati e codificati nella variabile sport.
Alla funzione ggplot() viene quindi collegata con il segno più [+] la funzione geom_point() che realizza il grafico impiegando i valori previsti di default e individuando gli sport praticati con un colore.
Visto il grado di sovrapposizione dei dati, vogliamo provare a separarli generando dieci scatterplot, uno per ciascuno degli sport. Ecco lo script necessario e i grafici risultanti.
# SCATTERPLOT separati per fattore
#
library (DAAG) # carica il pacchetto che include il set di dati ais
library(ggplot2) # carica il pacchetto per la grafica
#
# scatterplot separati per il fattore sport
ggplot(ais, aes(x=rcc, y=hg, color=sport)) + geom_point() + facet_wrap(~sport)
#
Quindi per scomporre i dati nei dieci sottoinsiemi rappresentativi di ciascuno sport è stato sufficiente, al codice necessario per il grafico di dispersione che riporta tutti i dati, aggiungere (+) la funzione facet_wrap() specificando che i dati devono essere suddivisi per sport (~sport).
Possiamo anche migliorare il grafico come segue.
# SCATTERPLOT riorganizzati per righe
#
library (DAAG) # carica il pacchetto che include il set di dati ais
library(ggplot2) # carica il pacchetto per la grafica
#
# scatterplot riorganizzati per righe
ggplot(ais, aes(x=rcc, y=hg, color=sport)) + geom_point(show.legend=FALSE) + facet_wrap(~sport, nrow=2)
#
In questo caso, visto che la rappresentazione fornita contiene già le etichette che individuano i dati, è stata eliminata la legenda (show.legend=FALSE) e i grafici sono stati riorganizzati su due righe con nrow=2, con questo risultato.
Dei nostri dati abbiamo quindi realizzato una grafica sintetica (primo script) e poi abbiamo visto come realizzare una grafica analitica: ma che dire se potessimo visualizzarle contemporaneamente entrambe? Ecco come è possibile farlo con due brevi aggiunte allo script precedente.
# SCATTERPLOT sovrapposti ai dati globali
#
library (DAAG) # carica il pacchetto che include il set di dati ais
library(ggplot2) # carica il pacchetto per la grafica
#
# scatterplot separati sovrapposti alla distribuzione globale dei dati
ggplot(ais, aes(x=rcc, y=hg, color=sport)) + geom_point(data=transform(ais, sport=NULL), colour="grey82") + geom_point(show.legend = FALSE) + facet_wrap(~sport, nrow=2, strip.position="bottom")
#
Nota: i grafici mettono in rilievo l'informazione che la distribuzione dei valori non è omogenea in tutti gli sport – ad esempio gli atleti che praticano lo sport Netball hanno concentrazioni di eritrociti ed emoglobina relativamente basse e all'estremo opposto di quelle relativamente alte che si riscontrano negli atleti che praticano pallanuoto (W_Polo).
In questo caso viene aggiunta una nuova funzione geom_point() che elimina dai dati la variabile sport (sport=NULL) mediante la funzione transform() per riportarli tutti nel grafico – in colore grigio (colour="grey82") – prima che ad essi con le successive funzioni geom_point() e facet_wrap() siano sovrapposti separatamente i dati dei singoli sport.
Da notare che la funzione facet_wrap() prevede:
→ l'argomento strip.position che consente di personalizzare la posizione delle etichette, con il valore predefinito "top", che può essere cambiato in "bottom" (come in questo caso), "left" o "right";
→ l'argomento scales che consente di specificare il tipo di scale impiegate, con il valore predefinito "fixed" che assume scale degli assi x e y uguali in tutti i grafici, e con i valori "free", "free_x" o "free_y" da impiegare qualora siano previste scale differenti degli assi.
Completiamo l'analisi grafica dei dati per sport praticato ripetendola anche per il sesso degli atleti sostituendo sport con sex, il nome della variabile fattore che contiene l'indicazione del sesso dell'atleta: al bisogno una informazione completa sulla struttura del set di dati si può avere digitando str(ais).
# SCATTERPLOT sovrapposti ai dati globali
#
library (DAAG) # carica il pacchetto che include il set di dati ais
library(ggplot2) # carica il pacchetto per la grafica
#
# scatterplot separati sovrapposti alla distribuzione globale dei dati
ggplot(ais, aes(x=rcc, y=hg, color=sex)) + geom_point(data=transform(ais, sex=NULL), colour="grey82") + geom_point(show.legend=FALSE) + facet_wrap(~sex, nrow=2, strip.position="bottom")
#
In questo caso il grafico mette in evidenza che la distribuzione del valori non è omogenea nei due sessi, un fatto che rispecchia i differenti "valori normali" dei globuli rossi e dell'emoglobina nelle donne e negli uomini (valori che sono fisiologicamente mediamente inferiori nelle prime rispetto ai secondi).
Conclusione: opportunamente impiegati i grafici xy consentono di ricavare dai dati informazioni che vanno al di la della semplice relazione tra due variabili.
---------
[1] Vedere il post Il set di dati ais nel quale trovate anche come caricare i dati senza impiegare il pacchetto DAAG.







