mercoledì 25 dicembre 2019

Come stabilire il giusto numero di cifre significative

Per le cifre significative va ricordato che:
→ gli zero prima dei numeri diversi da zero non fanno parte delle cifre significative, quindi 0.0193 ha tre cifre significative;
→ gli zero dopo i numeri diversi da zero fanno parte delle cifre significative, quindi 0.30 ha due cifre significative;
→ il numero di cifre significative dipende dall'errore del processo di misura.

Si supponga che una serie di misure abbiano media = 9.37652, deviazione standard = 0.10835 ed errore standard = 0.004203. Dall'errore standard si ricava che le misure effettuate presentano una incertezza a livello della terza cifra decimale (0.004203), dovuta all'errore del processo di misura. In questo caso non avrebbe senso riportare la media e la deviazione standard con più di tre cifre decimali: la media 9.37652 deve essere arrotondata e riportata come 9.376 e la deviazione standard 0.10835 deve essere arrotondata e riportata come 0.108 e il risultato sarà quindi espresso come 9.376 ± 0.108 (media ± deviazione standard) o come 9.376 ± 0.004 (media ± errore standard).

Se non si conosce l'errore standard in genere si esprime la deviazione standard con due cifre significative. Così avendo ottenuto ad esempio una media = 1.34648 e una deviazione standard = 0.10295 quest'ultima va riportata come 0.10 con due cifre significative e il risultato sarà quindi espresso, arrotondando anche la media a due decimali, come 1.35 ± 0.11 (media ± deviazione standard).

Per effettuare l'arrotondamento si può procedere seguendo quanto riportato nel post Come arrotondare i numeri.

domenica 1 dicembre 2019

Inserire più grafici nella stessa immagine

Vediamo come sia possibile disporre in vari modi più grafici all'interno di una stessa immagine impiegando una sola riga di codice.

Per farlo ci serviamo delle funzioni par()layout() e matrix() [1] impiegando come esempi alcuni grafici realizzati con la funzione boxplot() [2].

Il codice impiega solamente le funzioni grafiche di base di RI dati sono contenuti nella tabella ais del pacchetto DAAG - accertatevi di avere installato il pacchetto o in alternativa procedete come indicato in [3].

Copiate lo script che segue, incollatelo nella Console di R e premete ↵ Invio:

# INSERIRE PIU' GRAFICI NELLA STESSA IMMAGINE 
#
library(DAAG) # carica il pacchetto DAAG incluso il set di dati ais
windows() # apre e inizializza una nuova finestra grafica
par(mfrow=c(2,2)) # quattro grafici in due righe per due colonne
#
boxplot(ais$wt~ais$sex, xlab="Sesso", ylab="Peso corporeo in kg", notch=TRUE, col="green") # [1] valori del peso corporeo aggregati per sesso
#
boxplot(ais$ht~ais$sex, xlab="Sesso", ylab="Altezza in cm", notch=TRUE, col="green") # [2] valori dell'altezza aggregati per sesso
#
boxplot(ais$bmi~ais$sex, xlab="Sesso", ylab="BMI in kg/m2", notch=TRUE, col="green") # [3] valori dell'indice di massa coroporea (BMI) aggregati per sesso
#
boxplot(ais$pcBfat~ais$sex, xlab="Sesso", ylab="Grasso corporeo in %", notch=TRUE, col="yellow") # [4] valori della percentuale di grasso corporeo aggregati per sesso
#

In questo primo script con par(mfrow=c(2,2)) è stata predisposta la suddivisione della finestra grafica in 2 righe per 2 colonne, quindi in quattro quadranti,

1
2
3
4

nei quali sono inseriti, procedendo da sinistra verso destra e dall'alto verso il basso, i quattro grafici realizzati con la funzione boxplot() sui dati separati per sesso (~ais$sex) della tabella ais - impiegando l'argomento notch=TRUE per riportare sui lati dei box le tacche (notch) o incisure che rappresentano i limiti di confidenza al 95% della mediana - con questo risultato.


Ora copiate lo script che segue, incollatelo nella Console di R e premete ↵ Invio:

# INSERIRE PIU' GRAFICI NELLA STESSA IMMAGINE 
#
library(DAAG) # carica il pacchetto DAAG incluso il set di dati ais
windows() # apre e inizializza una nuova finestra grafica
par(mfrow=c(1,2)) # due grafici in una riga e due colonne
#
boxplot(ais$bmi~ais$sex, xlab="Sesso", ylab="BMI in kg/m2", notch=TRUE, col="green") # [1] boxplot per sesso dell'indice di massa corporea (BMI)
#
boxplot(ais$pcBfat~ais$sex, xlab="Sesso", ylab="Grasso corporeo in %", notch=TRUE, col="yellow") # [2] boxplot per sesso della percentuale di grasso corporeo
#

In questo secondo script con par(mfrow=c(1,2)) è stata predisposta la suddivisione della finestra in 1 riga e 2 colonne


1

2

per realizzare due grafici affiancati, il primo sulla sinistra e il secondo sulla destra, con questo risultato.


Copiate questo terzo script, incollatelo nella Console di R e premete ↵ Invio:

# INSERIRE PIU' GRAFICI NELLA STESSA IMMAGINE 
#
library(DAAG) # carica il pacchetto DAAG incluso il set di dati ais
windows() # apre e inizializza una nuova finestra grafica
par(mfrow=c(2,1)) # due grafici in una colonna e due righe
#
boxplot(ais$pcBfat~ais$sport, horizontal=FALSE, boxwex=0.4, cex.axis=0.8, las=2, main="Percentuale di grasso corporeo nei vari sport", xlab="Sport praticato", ylab="Grasso corporeo in %", notch=FALSE, col="yellow") # [1] valori della percentuale di grasso corporeo aggregati per sport
#
boxplot(ais$wt~ais$sport, horizontal=FALSE, boxwex=0.4, cex.axis=0.8, las=2, main="Peso corporeo nei vari sport", xlab="Sport praticato", ylab="Peso corporeo in kg", notch=FALSE, col="yellow") # [2] valori del peso corporeo aggregati per sport
#

In questo caso con par(mfrow=c(2,1)) è stata predisposta la suddivisione della finestra in 2 righe e 1 colonna 
- riportando i boxplot in verticale (horizontal=FALSE), le etichette delle ascisse in verticale (las=2), riducendo la larghezza dei box (boxwex=0.4) e senza le incisure (notch=FALSEche rappresentano i limiti di confidenza al 95% della mediana - per posizionare i due grafici uno sopra l'altro in questo modo

1
2

con questo risultato.


Potete anche aumentare il numero delle righe e/o delle colonne, prestando ovviamente sempre molta attenzione alla leggibilità e alla fruibilità del risultato finale.

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

# INSERIRE PIU' GRAFICI NELLA STESSA IMMAGINE 
#
library(DAAG) # carica il pacchetto DAAG incluso il set di dati ais
windows() # apre e inizializza una nuova finestra grafica
layout(matrix(c(1,1,2,3), 2, 2, byrow=TRUE)) # tre grafici, il primo occupa riga 1/colonne 1 e 2, il secondo riga 2/colonna 1, il terzo riga 2/colonna 2
#
boxplot(ais$pcBfat~ais$sport, horizontal=FALSE, boxwex=0.4, cex.axis=0.8, las=2, main="Percentuale di grasso corporeo nei vari sport", xlab="Sport praticato", ylab="Grasso corporeo in %", notch=FALSE, col="yellow") # [1] valori della percentuale di grasso corporeo aggregati per sport
#
boxplot(ais$wt~ais$sex, xlab="Sesso", ylab="Peso corporeo in kg", notch=TRUE, col="green") # [2] valori del peso corporeo aggregati per sesso
#
boxplot(ais$ht~ais$sex, xlab="Sesso", ylab="Altezza in cm", notch=TRUE, col="green") # [3] valori di altezza aggregati per sesso
#

In questo caso vediamo come organizzare i grafici all'interno dell'immagine in maniera più articolata con layout(matrix(c(1,1,2,3), 2, 2, byrow=TRUE)). Viene infatti predisposta la suddivisione della finestra in 2 righe per 2 colonne (... 2, 2, ...) procedendo per riga (byrow=TRUE), ma specificando con il primo argomento c(1,1,2,3) che il primo grafico occuperà riga 1/colonne 1 e 2, il secondo grafico occuperà riga 2/colonna 1 e il terzo grafico occuperà riga 2/colonna 2, con questa logica

1     1
2
3

e questo risultato.



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

# INSERIRE PIU' GRAFICI NELLA STESSA IMMAGINE 
#
library(DAAG) # carica il pacchetto DAAG incluso il set di dati ais
windows() # apre e inizializza una nuova finestra grafica
layout(matrix(c(1,3,2,3), 2, 2, byrow=TRUE)) # (4) tre grafici, il primo occupa riga 1/colonna 1, il secondo riga 2/colonna 1, il terzo righe 1 e 2/colonna 2
#
boxplot(ais$wt~ais$sex, xlab="Sesso", ylab="Peso corporeo in kg", notch=TRUE, col="green") # [1] valori del peso corporeo aggregati per sesso
#
boxplot(ais$ht~ais$sex, xlab="Sesso", ylab="Altezza in cm", notch=TRUE, col="green") # [2] valori di altezza aggregati per sesso
#
boxplot(ais$pcBfat~ais$sport, horizontal=TRUE, boxwex=0.4, cex.axis=0.8, las=1, xlab="Grasso corporeo in %", ylab="Sport praticato", notch=FALSE, col="yellow") # [3] valori della percentuale di grasso corporeo aggregati per sport
#

In questo script con layout(matrix(c(1,3,2,3), 2, 2, byrow=TRUE)) è stata predisposta di nuovo la suddivisione della finestra in 2 righe per 2 colonne (... 2, 2, ...) procedendo per riga (byrow=TRUE), ma questa volta specificando con il primo argomento c(1,3,2,3) che il primo grafico occuperà riga 1/colonna 1, il secondo grafico occuperà riga 2/colonna 1 e il terzo grafico occuperà le righe 1 e 2 della colonna 2 
- con i boxplot in orizzontale (horizontal=TRUE) e le etichette delle ascisse in orizzontale (las=1) - con questa logica

1
3

3
2

 e con questo risultato.


Finora abbiamo visto come organizzare più grafici all'interno della finestra grafica standard. Ma potremmo volere ampliare la finestra grafica, come facciamo ora riprendendo l'esempio precedente.

Copiate quest'ultimo script, incollatelo nella Console di R e premete ↵ Invio:

# INSERIRE PIU' GRAFICI NELLA STESSA IMMAGINE 
#
library(DAAG) # carica il pacchetto DAAG incluso il set di dati ais
#
dev.new(width=45, height=15, unit="cm") # nuova dimensione della finestra grafica
layout(matrix(c(1,2,3), 1, 3, byrow=TRUE)) # tre grafici in 1 riga e 3 colonne 
#
boxplot(ais$wt~ais$sex, xlab="Sesso", ylab="Peso corporeo in kg", notch=TRUE, col="green") # [1] valori del peso corporeo aggregati per sesso
#
boxplot(ais$ht~ais$sex, xlab="Sesso", ylab="Altezza in cm", notch=TRUE, col="green") # [2] valori di altezza aggregati per sesso
#
boxplot(ais$pcBfat~ais$sport, horizontal=FALSE, boxwex=0.4, cex.axis=0.8, las=2, main="Percentuale di grasso corporeo nei vari sport", xlab="Sport praticato", ylab="Grasso corporeo in %", notch=FALSE, col="yellow") # [3] valori della percentuale di grasso corporeo aggregati per sport
#

Per specificare le nuove dimensioni della finestra grafica impieghiamo la funzione dev.new() che richiede semplicemente larghezza della finestra, altezza della finestra e unità di misura. Queste possono essere pollici (unit="in"), pixel (unit="px") o centimetri (unit="cm"), come facciamo noi definendo quindi una finestra molto ampia, di 45 centimetri di larghezza (width=) per 15 centimetri di altezza (height=).

La funzione layout(matrix(c(1,2,3), 1, 3, byrow=TRUE)) predispone la suddivisione della finestra in 1 riga per 3 colonne (... 1, 3, ...)
 procedendo per riga (byrow=TRUE) specificando con c(1,2,3) che vogliamo tre grafici affiancati, con questa logica

1

2

3


e con questo risultato:


Nel caso di grafici più complessi, come ad esempio quelli generati con il pacchetto ggplot2le funzioni qui riportate potrebbero essere inadeguate, e per disporre più grafici all'interno della stessa immagine potrebbe essere necessario impiegare la funzione grid.arrange() inclusa nel pacchetto gridExtra [4]: trovate un esempio di applicazione di questa funzione nel post che illustra i grafici a punti [5].

Infine ricordo che impiegando l'utilità riportata nel post Salvare i grafici di R in un file potete salvare le immagini realizzate con R sotto forma di file .bmp, .jpeg, .png, .pdf, .ps per poterle stampare, archiviare, inserire in una pubblicazione, in un post o in un sito web.


----------

[1] Digitate help(nomedellafunzione) nella Console di R per consultare la documentazione delle funzioni.

[2] La funzione boxplot() è illustrata nel post Grafici a scatola con i baffi (boxplot).

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

[4] Il manuale di riferimento Package ‘gridExtra’ lo trovate facendo click sul link alla voce Reference manual nella pagina di documentazione del pacchetto. URL consultato il 03/12/2022.

[5] Vedere il post Grafici a punti (dotplot).