giovedì 24 gennaio 2019

Correlogrammi

Oltre al calcolo dei coefficienti di correlazione parametrici e non parametrici, in R sono disponibili i correlogrammi, che forniscono una sintesi grafica delle informazioni sulla correlazione tra due variabili.

I correlogrammi possono essere generati mediante la funzione corrgram() contenuta in uno dei tanti pacchetti aggiuntivi disponibili in R, denominato corrgram, che deve essere preventivamente scaricato dal CRAN. I dati sono contenuti nella tabella ais del pacchetto DAAG - accertatevi di avere installato il pacchetto o in alternativa procedete come indicato in [1]. In questo script vediamo come con la funzione corrgram() sia possibile realizzare tre diversi correlogrammi, che forniscono differenti informazioni sulla correlazione tra le diverse variabili contenute nel set di dati ais.

Copiate e incollate nella Console di R la prima parte dello script e premete ↵ Invio:

# CORRELOGRAMMI (1/3)
#
library(DAAG) # carica il pacchetto DAAG incluso il set di dati ais
str(ais) # mostra la struttura di ais
#
library(corrgram) # carica il pacchetto che genera i correlogrammi
#
windows() # apre una nuova finestra
corrgram(ais, cor.method = "pearson", order=FALSE, lower.panel=panel.shade, upper.panel=panel.pie, text.panel=panel.txt, main="Correlogramma semplice") # correlogramma semplice
#

I dati sono caricati con library(DAAG), viene mostrata la struttura del set di dati con str(ais), quindi viene caricata il pacchetto necessario per rappresentare i correlogrammi con library(corrgram) [2] e viene aperta una nuova finestra grafica con windows().

Nella funzione corrgram() compaiono come argomenti [2]:
→ il set di dati da analizzare (ais);
→ l'ordine nel quale presentare i risultati (order=FALSE), che lascia le variabili nello stesso ordine nel quale sono presenti nel set di dati originali. In alternativa l'ordine in cui presentare i risultati può essere espresso come order="PCA", order="OLO", order="GW", order="HC" [3];
→ il metodo di correlazione (cor.method = "pearson"), corrispondente a uno dei coefficienti di correlazione parametrici e non parametrici, che qui è il classico coefficiente di correlazione r di Pearson (test parametrico), ma  che può essere in alternativa, impiegando l'argomento cor.method = "spearman" o l'argomento cor.method = "kendall", rispettivamente il coefficiente di correlazione per ranghi ρ (rho) di Spearman o il coefficiente di correlazione τ (tau) di Kendall, entrambi test non parametrici;
→ gli argomenti lower.panel=panel.shade e upper.panel=panel.pie che consentono di rappresentare i valori r di Pearson sotto forma di quantità di colore nelle torte nella metà superiore destra del correlogramma, nelle quali una maggior quantità di colore corrisponde a un più elevato valore di r, e di intensità del colore dei quadrati nella metà inferiore sinistra. In blu sono riportate le correlazioni positive in colore rosato quelle negative.


Un diverso correlogramma viene realizzato con la seconda parte dello script ponendo nella funzione corrgram() gli argomenti lower.panel=panel.ellipse e upper.panel=panel.ptsCopiate e incollate nella Console di R la seconda parte dello script e premete ↵ Invio:

windows() # apre una nuova finestra (2/3)
corrgram(ais, cor.method = "pearson", order=FALSE, lower.panel=panel.ellipse, upper.panel=panel.pts, text.panel=panel.txt, diag.panel=panel.minmax, main="Correlogramma con tendenze") #
# correlogramma con evidenza delle tendenze
#

In alto a destra è riportato per ciascuna delle possibili coppie di variabili il grafico xy con la distribuzione dei valori osservati. In basso a sinistra sono mostrati gli elissoidi che indicano la tendenza delle variabili a variare congiuntamente con in rosso la stima della curva che ne approssima la tendenza, elissoidi sempre più stretti e più allungati e curva sempre meno curva man mano che la relazione tra le variabili si avvicina a una retta. Nella diagonale compaiono infine i nomi delle variabili con il valore minimo e il valore massimo osservati.


Infine il terzo correlogramma è realizzato con questa ultima parte dello script impiegando nella funzione corrgram() l'argomento lower.panel=panel.pts, l'argomento upper.panel=panel.conf e l'argomento diag.panel=panel.density.

Copiate e incollate nella Console di R la terza parte dello script e premete ↵ Invio:

windows() # apre una nuova finestra (3/3)
corrgram(ais, cor.method = "pearson", order=FALSE, lower.panel=panel.pts, upper.panel=panel.conf, diag.panel=panel.density, main="Correlogramma con i coefficienti di correlazione") # correlogramma con i coefficienti di correlazione r di Pearson e i loro limiti di confidenza
#

In alto a destra per ciascuna delle possibili coppie di variabili è riportato il coefficiente di correlazione r di Pearson con i relativi limiti di confidenza al 95%. In basso sinistra è riportato per ciascuna delle possibili coppie di variabili il grafico xy con la distribuzione dei valori osservati. Nella diagonale sono riportati infine i kernel density plot di ciascuna variabile. La funzione corrgram() consente ovviamente anche in questo caso di calcolare, in alternativa al coefficiente di correlazione r di Pearson, il coefficiente di correlazione per ranghi ρ (rho) di Spearman o il coefficiente di correlazione τ (tau) di Kendall, impiegando rispettivamente l'argomento cor.method = "spearman" o l'argomento cor.method = "kendall".


Da notare che in R di default le finestre grafiche si sovrappongono perfettamente l'una all'altra, iconizzatele o spostatele per rivedere quelle aperte in precedenza.

Potete riutilizzare facilmente lo script sostituendo all'oggetto ais l'oggetto contenente i vostri dati, opportunamente strutturati. Per una guida rapida all'importazione dei dati potete consultare i link:
 importare i dati di un file .csv
 importare i dati di un file .xls o .xlsx
 gestione dei dati mancanti


----------

[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 il pacchetto corrgram e la funzione corrgram() vedere il manuale di riferimento del pacchetto Package ‘corrgram’. URL consultato il 23/01/2019: https://goo.gl/F4o92D

[2] Getting Things in Order: An Introduction to the R Package seriation. URL consultato il 23/01/2019: https://goo.gl/2LC8Wk

mercoledì 23 gennaio 2019

Coefficienti di correlazione parametrici e non parametrici

Come sottolineato altrove, l'assunzione implicita di un rapporto di causa-effetto in seguito ad un coefficiente di correlazione significativo è una delle trappole mentali più ricorrenti e più subdole della statistica: perché non esiste una connessione logica tra correlazione e causazione [1].

Nonostante da questo derivi l'invito ad impiegare la correlazione con parsimonia, con prudenza e con spirito critico nel trarne le conclusioni, risulta difficile ignorare l'esistenza in R di due strumenti.

Il primo sono i classici coefficienti di correlazione e precisamente:
→ il coefficiente di correlazione (lineare) r di Pearson, il classico test parametrico;
→ il coefficiente di correlazione per ranghi ρ (rho) di Spearman (test non parametrico);
→ il coefficiente di correlazione τ (tau) di Kendall (test non parametrico).

Il secondo sono i correlogrammi [2], una rappresentazione un po' particolare ma interessante della correlazione tra variabili, utile come complemento grafico ai coefficienti di correlazione di cui sopra. 

Va ricordato che il più ampiamente usato (e abbondantemente abusato) coefficiente di correlazione r fornisce una misura del grado di correlazione lineare ed è pertanto valido solamente se le due variabili a confronto hanno una relazione di tipo lineare, mentre i coefficienti di correlazione non parametrici forniscono una misura della correlazione valida anche anche nel caso di relazioni non lineari.

In questo primo script viene impiegato il set di dati galton [3], nel quale sono riportate le altezze (in pollici) di 928 coppie padre-figlio. Sono richiesti i pacchetti aggiuntivi psychTools e Hmisc, che devono essere preventivamente scaricati e installati dal CRAN.

Copiate e incollate nella Console di R lo script e premete ↵ Invio:

# COEFFICIENTI DI CORRELAZIONE parametrici e non parametrici
#
library(psychTools) # carica il pacchetto che include il set di dati galton
str(galton) # mostra la struttura dei dati
#
# calcola i coefficienti di correlazione con i metodi di pearson (il classico r), spearman, kendall
#
round(cor(galton, use="complete.obs", method="pearson"), digits=2) # r di Pearson
round(cor(galton, use="complete.obs", method="spearman"), digits=2) # rho di Spearman
round(cor(galton, use="complete.obs", method="kendall"), digits=2) # tau di Kendall
#
# calcola i coefficienti di correlazione con i livelli di significatività
#
library(Hmisc) # carica il pacchetto
rcorr(as.matrix(galton), type="pearson") # type può essere solo “pearson” (il classico r) o “spearman”
rcorr(as.matrix(galton), type="spearman")
#

Questi sono i risultati ottenuti con i tre metodi per il calcolo della correlazione:

> round(cor(galton, use="complete.obs", method="pearson"), digits=2) # r di Pearson 
       parent child
parent   1.00  0.46
child    0.46  1.00
> round(cor(galton, use="complete.obs", method="spearman"), digits=2) # rho di Spearman 
       parent child
parent   1.00  0.43
child    0.43  1.00
> round(cor(galton, use="complete.obs", method="kendall"), digits=2) # tau di Kendall 
       parent child
parent   1.00  0.33
child    0.33  1.00

La funzione cor() viene impiegata per calcolare i coefficienti di correlazione con gli argomenti:
galton che indica i dati da elaborare;
use=”complete.obs” che comporta l'eliminazione automatica dei casi nei quali manchi l'uno o l'altro dato, argomento che qui non servirebbe impiegare, ma che viene riportato per completezza;
method= che di volta in volta riporta i valori "pearson", "spearman", "kendall", per calcolare le rispettive statistiche.

Da notare che la funzione cor() è stata annidata nella funzione round() che con l'argomento digits=2 provvede ad arrotondare a due cifre decimali i risultati: e che i coefficienti di correlazione non parametrici forniscono, come atteso, valori inferiori a quelli del classico coefficiente di correlazione parametrico r di Pearson (sono più conservativi).

Infine lo script impiega la funzione rcorr() del pacchetto Hmisc per calcolare la significatività del coefficiente r di Pearson e del coefficiente ρ (rho) di Spearman. La probabilità p di osservare per caso i valori di r e di rho qui ottenuti è molto bassa e, come potrete vedere se eseguite lo script, viene riportata come uguale a 0 (zero). Quindi entrambi questi coefficienti di correlazione risultano essere significativi.

In questo secondo script sono impiegati i dati contenuti nella tabella ais del pacchetto DAAG - accertatevi di avere installato il pacchetto o in alternativa procedete come indicato in [4].

 Copiate e incollate nella Console di R lo script e premete ↵ Invio:

# COEFFICIENTI DI CORRELAZIONE parametrici e non parametrici
#
library(DAAG) # carica il pacchetto incluso il set di dati ais
str(ais) # struttura di ais
mydata <- ais[c(1,2,3,4,5,6,7,8,9,10,11)] # salva sole le colonne con le variabili numeriche in mydata
str(mydata) # mostra la struttura di mydata
#
# method può essere pearson (il classico r), spearman, kendall
#
round(cor(mydata, use="complete.obs", method="pearson"), digits=2) # r di Pearson
round(cor(mydata, use="complete.obs", method="spearman"), digits=2) # rho di Spearman
round(cor(mydata, use="complete.obs", method="kendall"), digits=2) # tau di Kendall
#
# calcola i coefficienti di correlazione con i livelli di significatività
#
library(Hmisc) # carica il pacchetto
rcorr(as.matrix(mydata), type="pearson") # type può essere solo “pearson” (il classico r) o “spearman”
rcorr(as.matrix(mydata), type="spearman")
#
# approfondimenti grafici sulla correlazione lineare
#
library(car) # carica il pacchetto
windows() # apre una finestra grafica
scatterplotMatrix(~rcc+wcc+hc+hg+ferr+bmi+ssf+pcBfat+lbm+ht+wt, regLine = list(method=lm, lty=1, lwd=2, col="red"), smooth=FALSE, diagonal=list(method="density", bw="nrd0", adjust=1, kernel="gaussian", na.rm=TRUE), col = "black", main="Matrice di dispersione", data=ais) # traccia il grafico di dispersione xy che incrocia tutte le variabili
#

Nella parte iniziale dello script dopo avere caricato il pacchetto DAAG con la funzione str(ais) viene mostrata la struttura dell'oggetto/set di dati, che contiene 13 variabili, 11 numeriche e 2 non numeriche. Dato che siamo interessati alle sole variabili numeriche, queste, che sono comprese nelle colonne da 1 a 11 della tabella (o dataframe o dataset) ais, le salviamo in un nuovo oggetto denominato mydata che è quello sul quale lavoreremo. Infine per la conferma dell'avvenuta operazione di selezione delle colonne viene mostrata la struttura del nuovo oggetto con str(mydata).

Il resto del codice è praticamente identico allo script precedente. I risultati sono presentati sotto forma di una matrice che contiene i valori dei coefficienti di correlazione che la funzione cor() calcola per tutte le coppie di variabili. Questi valori sono simmetrici rispetto alla diagonale, nella quale è riportato sempre un valore uguale a 1 per i coefficienti di correlazione di ciascuna variabile con se stessa. I valori evidenziati (manualmente dal sottoscritto) sono quelli che nel successivo grafico mostrano una relazione tra le variabili che più si avvicina ad una retta.

> round(cor(mydata, use="complete.obs", method="pearson"), digits=2) # r di Pearson
         rcc  wcc    hc    hg  ferr  bmi   ssf pcBfat   lbm    ht   wt
rcc     1.00 0.15  0.92  0.89  0.25 0.30 -0.40  -0.49  0.55  0.36 0.40
wcc     0.15 1.00  0.15  0.13  0.13 0.18  0.14   0.11  0.10  0.08 0.16
hc      0.92 0.15  1.00  0.95  0.26 0.32 -0.45  -0.53  0.58  0.37 0.42
hg      0.89 0.13  0.95  1.00  0.31 0.38 -0.44  -0.53  0.61  0.35 0.46
ferr    0.25 0.13  0.26  0.31  1.00 0.30 -0.11  -0.18  0.32  0.12 0.27
bmi     0.30 0.18  0.32  0.38  0.30 1.00  0.32   0.19  0.71  0.34 0.85
ssf    -0.40 0.14 -0.45 -0.44 -0.11 0.32  1.00   0.96 -0.21 -0.07 0.15
pcBfat -0.49 0.11 -0.53 -0.53 -0.18 0.19  0.96   1.00 -0.36 -0.19 0.00
lbm     0.55 0.10  0.58  0.61  0.32 0.71 -0.21  -0.36  1.00  0.80 0.93
ht      0.36 0.08  0.37  0.35  0.12 0.34 -0.07  -0.19  0.80  1.00 0.78
wt      0.40 0.16  0.42  0.46  0.27 0.85  0.15   0.00  0.93  0.78 1.00
> round(cor(mydata, use="complete.obs", method="spearman"), digits=2) # rho di Spearman
         rcc  wcc    hc    hg  ferr  bmi   ssf pcBfat   lbm    ht    wt
rcc     1.00 0.17  0.91  0.89  0.25 0.29 -0.40  -0.50  0.59  0.40  0.42
wcc     0.17 1.00  0.17  0.14  0.05 0.23  0.15   0.14  0.11  0.04  0.17
hc      0.91 0.17  1.00  0.95  0.25 0.32 -0.44  -0.54  0.63  0.43  0.45
hg      0.89 0.14  0.95  1.00  0.31 0.37 -0.43  -0.54  0.67  0.41  0.49
ferr    0.25 0.05  0.25  0.31  1.00 0.30 -0.11  -0.19  0.34  0.17  0.30
bmi     0.29 0.23  0.32  0.37  0.30 1.00  0.29   0.15  0.70  0.35  0.84
ssf    -0.40 0.15 -0.44 -0.43 -0.11 0.29  1.00   0.96 -0.22 -0.10  0.13
pcBfat -0.50 0.14 -0.54 -0.54 -0.19 0.15  0.96   1.00 -0.41 -0.25 -0.05
lbm     0.59 0.11  0.63  0.67  0.34 0.70 -0.22  -0.41  1.00  0.80  0.91
ht      0.40 0.04  0.43  0.41  0.17 0.35 -0.10  -0.25  0.80  1.00  0.78
wt      0.42 0.17  0.45  0.49  0.30 0.84  0.13  -0.05  0.91  0.78  1.00
> round(cor(mydata, use="complete.obs", method="kendall"), digits=2) # tau di Kendall
         rcc  wcc    hc    hg  ferr  bmi   ssf pcBfat   lbm    ht    wt
rcc     1.00 0.11  0.75  0.71  0.17 0.19 -0.26  -0.33  0.41  0.27  0.28
wcc     0.11 1.00  0.11  0.09  0.03 0.15  0.10   0.10  0.08  0.03  0.12
hc      0.75 0.11  1.00  0.83  0.17 0.22 -0.29  -0.35  0.44  0.29  0.30
hg      0.71 0.09  0.83  1.00  0.22 0.25 -0.29  -0.36  0.46  0.28  0.33
ferr    0.17 0.03  0.17  0.22  1.00 0.20 -0.07  -0.13  0.22  0.11  0.20
bmi     0.19 0.15  0.22  0.25  0.20 1.00  0.20   0.11  0.52  0.24  0.65
ssf    -0.26 0.10 -0.29 -0.29 -0.07 0.20  1.00   0.82 -0.13 -0.07  0.09
pcBfat -0.33 0.10 -0.35 -0.36 -0.13 0.11  0.82   1.00 -0.24 -0.16 -0.01
lbm     0.41 0.08  0.44  0.46  0.22 0.52 -0.13  -0.24  1.00  0.61  0.77
ht      0.27 0.03  0.29  0.28  0.11 0.24 -0.07  -0.16  0.61  1.00  0.59
wt      0.28 0.12  0.30  0.33  0.20 0.65  0.09  -0.01  0.77  0.59  1.00

L'ultima parte dello script realizza un grafico che fornisce la necessaria integrazione grafica all'analisi numerica.

Impiegando la funzione scatterplotMatrix() viene realizzato con una sola riga di codice un grafico che riporta sulla diagonale per ciascuna variabile il kernek density plot, e per ciascuna coppia di variabili il grafico di dispersione (xy) con la relativa retta di regressione.


I dettagli delle funzioni qui impiegate, tutte molto semplici, li trovate come al solito digitando help(nomedellafunzione) nella Console di R.


----------

[1] Vedere il post Correlazione e causazione.

[2] Vedere il post Correlogrammi.

[3] Vedere il post Il set di dati Galton.

[4] Vedere il post Il set di dati ais nel quale trovate anche come caricare i dati della tabella senza impiegare il pacchetto DAAG


domenica 20 gennaio 2019

Grafici a linee

Vediamo come rappresentare i grafici a linee impiegando una funzione e un set di dati inclusi nella installazione base di R. Si tratta della funzione plot() [1], che viene impiegata per una molteplicità di rappresentazioni, e del set di dati WorldPhones.

Se nella Console di R digitale data() potete vedere l'elenco che include questo e gli altri set di dati che sono caricati automaticamente all'avvio del programma.

Copiate e incollate nella Console di R questo script e premete ↵ Invio:

# GRAFICI A LINEE set di dati di R
#
mydata <- data.frame(WorldPhones) # trasforma il set di dati WorldPhones in dataframe
mydata # mostra i dati
#
windows() # apre una nuova finestra
#
# traccia il grafico a linee per la prima variabile
plot(mydata$N.Amer, type="o", pch=19, lty=1, col="red", ylim=c(0,80000), axes=FALSE, ann=FALSE)
# sovrappone i grafici a linee per le variabili successive
lines(mydata$Europe, type="o", pch=20, lty=2, col="blue")
lines(mydata$Asia, type="o", pch=21, lty=3, col="brown")
lines(mydata$S.Amer, type="o", pch=22, lty=4, col="darkolivegreen")
lines(mydata$Oceania, type="o", pch=23, lty=5, col="gold1")
lines(mydata$Africa, type="o", pch=24, lty=6, col="green4")
lines(mydata$Mid.Amer, type="o", pch=25, lty=7, col="cornflowerblue")
#
# traccia gli assi con le rispettive scale e riporta le etichette sull'asse orizzontale
axis(1, at=1:7, labels=c("1951","1956","1957","1958","1959","1960","1961"))
axis(2, las=1, at=20000*0:80000)
#
# riporta titolo ed etichetta dell'asse delle x
title(main="Numero di apparecchi telefonici nel mondo", col.main="black", font.main=1)
title(xlab="Anno della rilevazione", col.lab="black")
#
# riporta una legenda con i nomi delle variabili e i simboli delle linee impiegati
legend(5, 70000, c("Nord America", "Europa", "Asia", "Sud America", "Oceania", "Africa", "Centro America"), cex=0.8, col=c("red","blue", "brown", "darkolivegreen", "gold1", "green4", "cornflowerblue"), pch=19:25, lty=1:7, bty="y")
#

Nella prima riga di codice dal set di dati WorldPhones con la funzione data.frame() viene creata una tabella (dataframe) che viene assegnata (<-) all'oggetto mydata, quindi con mydata sono mostrati i dati importati:

> mydata # mostra i dati
     N.Amer Europe Asia S.Amer Oceania Africa Mid.Amer
1951  45939  21574 2876   1815    1646     89      555
1956  60423  29990 4708   2568    2366   1411      733
1957  64721  32510 5230   2695    2526   1546      773
1958  68484  35218 6662   2845    2691   1663      836
1959  71799  37598 6856   3000    2868   1769      911
1960  76036  40341 8220   3145    3054   1905     1008
1961  79831  43173 9053   3338    3224   2005     1076

che sono rappresentati dalle rilevazioni, effettuate tra l'anno 1951 e l'anno 1961, del numero di apparecchi telefonici, suddivisi per le principali aree geografiche del mondo.

Dopo avere aperto la finestra grafica con windows() nel successivo blocco di codice viene generato mediante la funzione plot() il grafico a linee che riporta in ascisse (x) i descrittori delle righe (1951, 1952, … 1961) e impiega come argomenti:
mydata$N.Amer la prima variabile del set di dati, posta in ordinate (y);
type="o" che consente di sovrascrivere i grafici successivi;
pch=19 quale dei simboli dei punti di R deve essere impiegato per i punti da rappresentare;
lty=1 quale degli stili delle linee di R deve essere impiegato per la linea da rappresentare;
col="red" quale colore impiegare per i punti e le linee da rappresentare;
ylim=c(0,80000) limiti inferiore e superiore dell'asse delle y;
axes=FALSE che indica di non rappresentare gli assi del grafico che verranno poi configurati manualmente nelle righe successive;
ann=FALSE che indica di non rappresentare titolo ed etichette dell'asse delle x e delle y che verranno poi configurati manualmente nelle righe successive.

Al grafico così creato, con le sei righe di codice successive sono sovrapposti i grafici a linee delle altre sei variabili che vogliamo rappresentare: Europe, Asia, S.Amer, Oceania, Africa, Mid.Amer.

Viene poi tracciato l'asse delle x axis(1....) ponendo nelle posizioni che vanno dalla 1 alla 7 (at=1:7) le etichette "1951", "1956", "1957", "1958", "1959", "1960", "1961" riportate nell'argomento labels. Per l'asse delle ordinate axis(2....) le tacche sono tracciate in orizzontale (las = 1) ogni 20000 (at=20000) per la scala che va da 0 a 80000 (0:80000).

Titolo ed etichetta dell'asse delle x riportati nel blocco di codice successivo non richiedono particolari commenti.

Infine la funzione legend() consente di aggiungere una legenda, che prevede i seguenti argomenti:
5, 70000 sono le coordinate x e y alle quali viene posizionato l'angolo superiore sinistro della legenda;
"Nord America", "Europa", "Asia", "Sud America", "Oceania", "Africa", "Centro America" sono i nomi da riportare;
cex.axis = 0.8 specifica la dimensione dei caratteri da impiegare;
"red","blue", "brown", "darkolivegreen", "gold1", "green4", "cornflowerblue" sono i colori di R che ovviamente riprendono nell'ordine quelli delle linee riportate nel grafico;
pch=19:25 sono i simboli dei punti di R impiegati nel grafico;
lty=1:7 sono gli stili delle linee di R impiegati nel grafico;
bty="y" che è l'opzione di default della funzione plot() e consente di tracciare il riquadro contenente la legenda, viene qui riportato per ricordare che con bty="n" è possibile eliminarlo.


Da notare che l'esempio è stato sviluppato esclusivamente per illustrare le funzioni e gli argomenti per rappresentare un grafico a linee. Ma si fa notare nel set di dati fornito, tra il 1951 e il 1956 intercorrono 5 anni, mentre gli intervalli successivi sono di un anno: questo distorce la rappresentazione, aumentando la pendenza del primo segmento di retta rispetto al reale. Ovviamente si raccomanda di non introdurre mai distorsioni di questo o di altro genere nella rappresentazione dei propri dati.

I grafici a linee vengono spesso impiegati per rappresentare variabili con pochi dati: potrebbe pertanto essere utile disporre di un esempio nel quale i dati sono inseriti manualmente. Copiate e incollate nella Console di R questo script e premete ↵ Invio:

# GRAFICI A LINEE dataframe costruito manualmente
#
N.Amer <- c(45939, 60423, 64721, 68484, 71799, 76036, 79831) # vettore con la prima variabile
Europe <- c(21574, 29990, 32510, 35218, 37598, 40341, 43173) # vettore con la seconda variabile
Asia <- c(2876, 4708, 5230, 6662, 6856, 8220, 9053) # vettore con la terza variabile
S.Amer <- c(1815, 2568, 2695, 2845, 3000, 3145, 3338) # vettore con la quarta variabile
Oceania <- c(1646, 2366, 2526, 2691, 2868, 3054, 3224) # vettore con la quinta variabile
Africa <- c(89, 1411, 1546, 1663, 1769, 1905, 2005) # vettore con la sesta variabile
Mid.Amer <- c(555, 733, 773, 836, 911, 1008, 1076) # vettore con la settima variabile
mydata <- data.frame(N.Amer, Europe, Asia, S.Amer, Oceania, Africa, Mid.Amer) # combina i vettori nel dataframe mydata
row.names(mydata) <- c(1951, 1956, 1957, 1958, 1959, 1960, 1961) # aggiunge i nomi delle righe
mydata # mostra i dati
#
windows() # apre una nuova finestra
#
# traccia il grafico a linee per la prima variabile
plot(N.Amer, type="o", pch=19, lty=1, col="red", ylim=c(0,80000), axes=FALSE, ann=FALSE)
# sovrappone i grafici a linee per le variabili successive
lines(Europe, type="o", pch=20, lty=2, col="blue")
lines(Asia, type="o", pch=21, lty=3, col="brown")
lines(S.Amer, type="o", pch=22, lty=4, col="darkolivegreen")
lines(Oceania, type="o", pch=23, lty=5, col="gold1")
lines(Africa, type="o", pch=24, lty=6, col="green4")
lines(Mid.Amer, type="o", pch=25, lty=7, col="cornflowerblue")
#
# traccia gli assi con le rispettive scale e riporta le etichette sull'asse orizzontale
axis(1, at=1:7, labels=c("1951", "1956", "1957", "1958", "1959", "1960", "1961"))
axis(2, las=1, at=20000*0:80000)
#
# riporta titolo ed etichetta dell'asse delle x
title(main="Numero di apparecchi telefonici nel mondo", col.main="black", font.main=1)
title(xlab="Anno della rilevazione", col.lab="black")
#
# riporta una legenda con i nomi delle variabili e i simboli delle linee impiegati
legend(5, 70000, c("Nord America", "Europa", "Asia", "Sud America", "Oceania", "Africa", "Centro America"), cex=0.8, col=c("red","blue", "brown", "darkolivegreen", "gold1", "green4", "cornflowerblue"), pch=19:25, lty=1:7, bty="y")
#

Dopo avere inserito mediante la funzione c() i valori delle singole variabili, questi sono combinati mediante la funzione data.frame() nella tabella (dataframe) mydata, alla quale sono infine aggiunti con la funzione row.names() i nomi delle righe che verranno riportati sull'asse orizzontale del grafico. Il resto del codice è identico a quello dello script precedente.

Da notare come ultima cosa che in quest'ultimo script avendo eseguito la funzione row.names() si possono impiegare direttamente i nomi delle variabili (ad esempio N.Amer) senza eseguire la funzione attach(), mentre nello script precedente, nel quale la funzione attach() non è stata eseguita, si è reso necessario specificare per le variabili il nome completo (ad esempio mydata$N.Amer).

Entrambi gli script possono essere facilmente riutilizzati, il primo sostituendo al set di dati WorldPhones i propri dati, organizzati in modo analogo, il secondo adattando opportunamente numero, nomi e valori delle variabili che confluiscono nell'oggetto mydata.


----------

[1] Digitate help(plot) nella Console di R per la documentazione della funzione plot() e digitate help(nomedellafunzione) nella Console di R per la documentazione delle altre funzioni impiegate nello script.