I grafici di dispersione (scatter plot o scatterplot) sono lo strumento base per visualizzare su un sistema di coordinate cartesiane le coppie di valori x,y di due variabili numeriche nel caso di distribuzioni bivariate.
Prendiamo
come esempio i dati ematologici
relativi agli eritrociti (o globuli rossi), la cui funzione essenziale
come noto è trasportare l'ossigeno dai polmoni a tutti gli altri
organi e tessuti, e per i quali valgono in media i seguenti dati (arrotondati
per semplicità) :
→ gli
eritrociti hanno una concentrazione nel sangue all'incirca di
5·1012/L (ovvero
ve ne sono all'incirca cinquemila miliardi in un litro di sangue);
→ un
eritrocito ha un volume all'incirca di 90 fL (un femtolitro
corrisponde a 10-15 litri quindi un globulo rosso ha un
volume all'incirca di 0.000 000 000 000 090 litri).
Da
questi dati si ricava che la percentuale del volume del sangue
occupata dagli eritrociti (detta valore ematòcrito, e uguale alla
concentrazione degli eritrociti moltiplicata per il volume di un
eritrocito) è il 45% (la restante parte, esclusi i globuli bianchi
e le piastrine, che occupano un volume irrilevante, è liquida ed è
rappresentata dal plasma). Ma non solo. Da questi dati si ricava
anche che il valore ematòcrito dipende in modo lineare dalla
concentrazione degli eritrociti. Possiamo quindi dare un senso al
prossimo script, che traccia i grafici di dispersione di queste due grandezze.
I dati sono contenuti nella tabella ais del pacchetto DAAG - accertatevi di avere installato il pacchetto o in alternativa procedete come indicato in [1].
Copiate lo script e incollatelo nella
Console di R e premete ↵
Invio:
#
GRAFICI DI DISPERSIONE (scatterplot)
#
library(DAAG)
# carica il pacchetto che include il set di dati ais
str(ais)
# struttura di ais
attach(ais)
# consente di impiegare direttamente i nomi delle variabili
#
windows()
# apre e inizializza una nuova finestra grafica
par(mfrow=c(2,2))
# predispone la suddivisione della finestra in quattro quadranti, uno
per grafico
#
plot(rcc,
hc, xlab="Eritrociti (10^12/L)", ylab="Ematòcrito
(%)", main="Grafico di dispersione") #
grafico di dispersione semplice
#
plot(rcc,
hc, pch=2, col="goldenrod", xlab="Eritrociti
(10^12/L)", ylab="Ematòcrito (%)", main="Cambia
simbolo e colore") # cambia simbolo e colore
#
plot(rcc,
hc, pch=1, col="black", abline(lm(hc~rcc), col="red",
lty=1, lwd=1), xlab="Eritrociti (10^12/L)",
ylab="Ematòcrito (%)", main="Retta di regressione")
# grafico con retta di regressione
#
plot(rcc,
hc, xlim=c(3,7), ylim=c(30,70), xaxp=c(3, 7, 4), yaxp=c(30, 70,
4), pch=20, col="black", abline(lm(hc~rcc),
col="black", lty=1, lwd=1), xlab="Eritrociti
(10^12/L)", ylab="Ematòcrito (%)", main="Ridimensiona
gli assi") # ridimensiona gli assi
#
detach(ais) # termina l'impiego diretto dei nomi delle variabili
#
Dopo
avere caricato il pacchetto che include il set di dati ais e dopo averne mostrato la sua struttura con str(ais),
viene impiegata la funzione attach(ais)
al fine di consente, nelle funzioni successive, di impiegare
direttamente i nomi delle variabili incluse nel set di dati.
Per
semplificare la presentazione grafica, con
par(mfrow=c(2,2)) la finestra viene suddivisa in quattro quadranti, uno per ciascuno dei grafici che
verranno preparati.
Il
primo grafico, in alto a sinistra, lascia per la maggior parte degli argomenti della
funzione plot()
i valori di default, specificando solamente quelli essenziali [2]:
→ rcc
la variabile da riportare sull'asse delle ascisse x;
→ hc
la variabile da riportare sull'asse delle ordinate y;
→ xlab=""
l'etichetta da riportare per l'asse delle x;
→ ylab=""
l'etichetta riportata per l'asse delle y;
→ main=""
il titolo del grafico che compare in alto.
Nel
secondo grafico, in alto a destra, sono aggiunti gli argomenti:
→ pch=2
che specifica per i dati l'impiego di un simbolo (triangolo)
differente da quello di default (che è il cerchio) [3];
→ col="goldenrod"
che specifica per il simbolo dei dati l'impiego di un colore diverso
dal nero [4].
Nel
terzo grafico, in basso a sinistra, viene riportata una retta mediante la funzione abline()
che impiega come argomenti:
→ l'equazione
della retta, che altro non è se non la retta di regressione
calcolata con la funzione lm()
che a sua volta impiega come argomenti hc~rcc
per specificare rispettivamente la variabile in ordinate e la
variabile in ascisse;
→ il
colore della retta (col="red");
→ il
tipo di linea da impiegare (lty=1),
uno dei sei possibili con i valori da 1 a 6 [5];
→ lo
spessore della linea (lwd=1)
espresso come multiplo dello spessore di default (1 uguale spessore,
2 spessore doppio, eccetera).
Nel
quarto grafico, in basso a destra, compaiono quattro nuovi argomenti, che consentono di
gestire in
modo personalizzabile a piacere le scale degli assi e la loro
suddivisione:
→ xlim
= c(3,7) indica limite inferiore e limite superiore della
scala applicata all'asse delle ascisse, trattandosi di valori di
concentrazione degli eritrociti espressi in 1012/L questo
significa che l'asse delle ascisse riporterà i valori compresi tra
3·1012/L e
7·1012/L;
→ ylim
= c(30,70) indica limite inferiore e limite
superiore della scala applicata all'asse delle ordinate, che,
trattandosi di valori di percentuale, varieranno quindi tra 30% e
70%;
→ xaxp
= c(3, 7, 4) dice che sull'asse delle ascisse la
scala che va da 3·1012/L
a 7·1012/L deve
essere suddivisa in quattro intervalli, quindi sull'asse delle
ascisse compariranno cinque tacche con i valori 3, 4, 50, 6, 7;
→ yaxp
= c(30,70,4) dice che sull'asse delle ordinate la
scala che va da 30% e 70% deve essere suddivisa in quattro
intervalli, quindi sull'asse delle ordinate compariranno cinque
tacche con i valori 30, 40, 50, 60, 70.
Lo script si chiude con la funzione detach() che pone termine all'impiego diretto dei nomi delle variabili. In altre parole la variabile rcc ora diventa ais$rcc, la variabile hc ora diventa ais$hc e così via.
I grafici di dispersione riportati qui sopra sono interessanti in quanto sono stati realizzati impiegando esclusivamente le funzioni del pacchetto base di R, tuttavia si può fare di meglio come nell'esempio che segue, che per tracciare lo scatterplot impiega le funzioni del pacchetto ggplot2 – altri esempi li potete trovare in un post ad esse dedicato [6].
Copiate lo script e incollatelo nella Console di R e premete ↵ Invio:
# GRAFICO DI DISPERSIONE con ggplot
# colori differenziati in base a un fattore
#
library(DAAG) # carica il pacchetto che include il set di dati ais
library(ggplot2) # carica il pacchetto per la grafica
#
windows() # apre e inizializza una nuova finestra grafica
ggplot(ais, aes(x=rcc, y=hc, color=sport)) + geom_point(size=4) + theme_minimal() # traccia il grafico
#
Ed ecco il grafico, nel quale è interessante notare come la funzione ggplot() consente di attribuire ai punti un differente colore (color=) sulla base dei valori assunti dal fattore (sport) – lo sport praticato – evidenziando così nei dati i corrispondenti sottoinsiemi.
Vediamo ora due grafici di dispersione multipli che aiutano ad illustrare le relazioni tra le variabili riportando tutti i possibili grafici di
dispersione singoli che risultano incrociando i dati ematologici contenuti nelle seguenti variabili del set di dati ais: rcc
(eritrociti), wcc (leucociti), hc
(ematòcrito), hg (emoglobina) e
ferr (ferritina).
I grafici sono realizzati mediante i pacchetti aggiuntivi car e
gclus: se non l'avete già fatto, dovete scaricarli e installarli dal CRAN.
Copiate e
incollate nella Console di R
lo
script e premete ↵
Invio:
#
GRAFICI DI DISPERSIONE MULTIPLI
#
library(DAAG)
# carica il pacchetto che include il set di dati ais
library(car)
# carica il pacchetto per la grafica
windows()
# apre e inizializza una nuova finestra grafica
#
#
grafici di dispersione con istogrammi delle variabili
#
scatterplotMatrix(~rcc+wcc+hc+hg+ferr,
col="black", pch=20, regLine = list(method=lm, lty=1,
lwd=2, col="chartreuse3"), smooth=FALSE,
diagonal=list(method ="histogram", breaks="FD"),
main="Matrice di dispersione con rette di regressione",
data=ais) # mostra il grafico
#
L'argomento
~rcc+wcc+hc+hg+ferr definisce le
variabili da rappresentare, e può essere facilmente riscritto per
cambiare la rappresentazione a piacere. Ad esempio ponendo questo
argomento uguale a ~rcc+wcc+hc+hg+ferr+bmi+ssf+pcBfat+lbm+ht+wt
si possono rappresentare in uno stesso grafico tutte le variabili del
set di dati ais.
Per
la retta di regressione sono impiegati una linea continua (lty=1),
uno spessore doppio (lwd=2) e un
colore (col="chartreuse3")
diverso dal nero, mentre l'argomento smooth=FALSE
fa si che non venga aggiunta ai grafici la rappresentazione della
funzione non lineare prevista di default nel pacchetto car.
Infine
l'argomento diagonal=list()
indica la rappresentazione della variabile riportata nella diagonale,
che qui è l'istogramma (method
="histogram") con il numero di classi
(breaks="FD") calcolato
mediante la regola di Freedman-Diaconis. L'istogramma può essere
sostituito con altri tipi di rappresentazione, l'elenco delle
espressioni che è possibile impiegare in alternativa per questo
argomento (provatele) è:
→ diagonal=list(method="density", bw="nrd0", adjust=1, kernel="gaussian", na.rm=TRUE)
→ diagonal=list(method="boxplot")
→ diagonal=list(method="qqplot")
→ diagonal=list(method="oned")
Copiate
e incollate nella Console di R lo script e premete
↵ Invio:
# GRAFICI DI DISPERSIONE MULTIPLI ordinati in base al valore di r
#
library(DAAG) # carica il pacchetto incluso il set di dati ais
library(gclus)
# carica il pacchetto per la grafica
windows()
# apre e inizializza una nuova finestra grafica
mydata
<- ais[c(1,2,3,4,5)] # tabella con i dati delle
variabili delle colonne 1,2,3,4,5
mydata.r
<- abs(cor(mydata)) # calcola la correlazione
mydata.col
<- dmat.color(mydata.r) # applica i colori
mydata.o
<- order.single(mydata.r) # ordina le variabili, le
meglio correlate più vicine alla diagonale
cpairs(mydata,
mydata.o, panel.colors=mydata.col, gap=.5, main="Variabili
meglio correlate vicine alla diagonale") # mostra il
grafico
#
Viene realizzato un grafico di dispersione multiplo che incrocia
ancora i dati ematologici degli atleti contenuti nelle cinque
variabili rcc (eritrociti), wcc
(leucociti), hc (ematòcrito), hg
(emoglobina) e ferr (ferritina)
ma con due novità.
La
prima è che le variabili ora sono individuate non mediante il loro
nome bensì indicando, con l'espressione ais[c(1,2,3,4,5)], il set di dati che le contiene e il numero
della colonna corrispondente a ciascuna variabile
La
seconda novità è che impiegando la funzione cpairs()
[7] i singoli grafici di dispersione vengono ordinati in base
al valore del coefficiente di correlazione r di Pearson, in
modo che le variabili meglio correlate, quelle per le quali la retta
di regressione pare essere un'approssimazione ragionevole, siano le
più vicine alla diagonale ed evidenziate in colore, aumentando così
la chiarezza della rappresentazione grafica.
Potete riutilizzare facilmente lo script sostituendo all'oggetto ais l'oggetto contenente i vostri dati, opportunamente strutturati, e modificando conseguentemente i nomi della variabili. Per una guida rapida all'importazione dei dati potete consultare i post:
----------
[1] Vedere il post Il set di dati ais nel quale trovate anche come caricare i dati della tabella senza impiegare il pacchetto DAAG.
[2]
Per la documentazione sugli argomenti della funzione plot()
digitare help(plot) nella
Console di R, e in aggiunta consultare la documentazione sugli
argomenti della funzione par()
con help(par).
[3]
Per i diversi simboli che è possibile impiegare per tracciare i
punti vedere il post I simboli dei punti di R.
[4]
Per i colori che è possibile impiegare vedere il post La tabella dei colori di R.
[5]
Per le linee che è possibile impiegare vedere il post Gli stili delle linee di R.
[7]
Digitate help(cpairs) nella
Console di R per la documentazione della funzione cpairs()
ovvero consultate il manuale di riferimento del pacchetto gclus
su: Available CRAN
Packages By Name.
https://cran.r-project.org/web/packages/available_packages_by_name.html