lunedì 6 gennaio 2020

Test parametrici e non parametrici per più campioni indipendenti

Per confrontare due campioni indipendenti abbiamo visto [1] che è necessario impiegare:
→ metodi parametrici quando i dati sono distribuiti in modo gaussiano;
→ metodi non parametrici quando i dati non sono distribuiti in modo gaussiano.

Lo stesso vale per il confronto tra più di due campioni indipendenti. Ma in questo caso però vale anche un altro principio: non è corretto applicare un test per due campioni indipendenti ripetitivamente a tutte le diverse possibili coppie di campioni. Così, ad esempio, nel caso più semplice, quello di tre campioni, non è corretto confrontare il primo campione con il secondo campione, il primo campione con il terzo e il secondo campione con il terzo. Questo perché la probabilità di commettere un errore di primo tipo [2], cioè la probabilità di considerare la differenza tra le medie di due campioni significativa quando invece non è significativa (probabilità di un falso positivo), nel caso di confronti multipli viene moltiplicata per il numero di confronti effettuati.

In altre parole un valore che nel caso di due campioni (per i quali un solo confronto è possibile) corrisponde a una probabilità di commettere un errore di primo tipo del 5%:
→ nel caso di tre campioni (essendo 3 il numero di confronti possibili) corrisponde a una probabilità di commettere un errore di primo tipo del 3 x 5% = 15%;
→ nel caso di quattro campioni (essendo 6 il numero di confronti possibili) corrisponde a una probabilità di commettere un errore di primo tipo del 6 x 5% = 30%;
→ nel caso di cinque campioni (essendo 10 il numero di confronti possibili) corrisponde a una probabilità di commettere un errore di primo tipo del 10 x 5% = 50%;
e così via.

Reciprocamente se nel confronto tra due campioni si assume come valore soglia per la significatività il classico p = 0.05 è indispensabile ricordarsi che questo valore:
→ quando si confrontano tre campioni deve essere sostituito con p = 0.017 (cioè 0.05/3);
→ quando si confrontano quattro campioni deve essere sostituito con p = 0.008 (cioè 0.05/6);
→ quando si confrontano cinque campioni deve essere sostituito con p = 0.005 (cioè 0.05/10);
e così via.

Anche se si potrebbe procedere seguendo queste semplici regole, di fatto sono disponibili 
test che, nel caso di confronti multipli, applicano automaticamente le correzioni necessarie per controbilanciare l'aumento dei falsi positivi, cioè l'aumento della probabilità di considerare la differenza tra le medie di due campioni significativa quando invece non è significativa.

Vediamo quindi i test parametrici e non parametrici per più campioni indipendenti impiegando come esempio il confronto tra i valori di concentrazione dell'emoglobina nel sangue rilevata in 202 atleti australiani suddivisi per sport e riportata nella variabile hg della tabella ais inclusa nel pacchetto DAAG. Accertatevi di avere installato il pacchetto o in alternativa procedete come indicato in [3].

Test parametrici

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

# CONFRONTARE TRA DI LORO PIU' CAMPIONI con un metodo parametrico
test t di Student con la correzione di Bonferroni per confronti multipli
#
library(DAAG) # carica il pacchetto DAAG che include il set di dati ais
#
boxplot(hg~sport, data=ais, horizontal=FALSE, notch=FALSE, col="green", las=2, xlab="Sport praticato", ylab="Emoglobina nel sangue (g/dL)") # boxplot della concentrazione di emoglobina per sport praticato
#
pairwise.t.test(ais$hg, ais$sport, p.adjust.method="bonferroni") # test t di Student per campioni indipendenti con la correzione di Bonferroni per confronti multipli
#

Per prima cosa visualizziamo i dati realizzando un grafico a scatola con i baffi della concentrazione hg dell'emoglobina nel sangue (espressa in g/dL) aggregando i valori in base allo sport praticato (hg~sport).


Ora per avere un riscontro quantitativo e oggettivo delle differenze tra le medie riportate nel grafico utilizziamo il più classico test parametrico, il test t di Student (un altro test parametrico lo vedremo con lo script successivo). 

Lo facciamo con la funzione pairwise.t.test() che consente di aggiustare i valori di p (p.adjust.method) con la correzione per confronti multipli di Bonferroni (method=”bonferroni”):

       Pairwise comparisons using t tests with pooled SD 

data:  ais$hg and ais$sport 

        B_Ball Field   Gym    Netball Row    Swim   T_400m T_Sprnt Tennis
Field   0.0023 -       -      -       -      -      -      -       -     
Gym     1.0000 0.1012  -      -       -      -      -      -       -     
Netball 0.0050 2.4e-11 1.0000 -       -      -      -      -       -     
Row     1.0000 0.1676  1.0000 6.5e-07 -      -      -      -       -     
Swim    1.0000 1.0000  1.0000 2.3e-06 1.0000 -      -      -       -     
T_400m  1.0000 0.8321  1.0000 2.7e-07 1.0000 1.0000 -      -       -     
T_Sprnt 0.0015 1.0000  0.0606 5.1e-11 0.0928 0.5925 0.4455 -       -     
Tennis  1.0000 0.2188  1.0000 0.0178  1.0000 1.0000 1.0000 0.1213  -     
W_Polo  0.0036 1.0000  0.1078 8.8e-11 0.2180 1.0000 0.9715 1.0000  0.2490

P value adjustment method: bonferroni 

Il test t di Student con la correzione di Bonferroni conferma che le atlete (sono solo donne) che praticano Netball hanno in comune una bassa concentrazione dell'emoglobina, e che la concentrazione media di questo gruppo si discosta significativamente dalle concentrazioni medie dei rimanenti gruppi di atleti, con la sola eccezione (p = 1.0000) del gruppo delle atlete che pratica la ginnastica (Gym). Questo è il dato certamente più rilevante, con poche altre differenze significative che sono evidenziate nella tabella.

Da notare che la funzione pairwise.t.test() prevede le seguenti correzioni alternative meno conservative [4] di quella di Bonferroni: secondo Holm (1979) (method="holm"), Hochberg (1988) (method="hochberg"), Hommel (1988) (method="hommel"), Benjamini & Hochberg (1995) (method="BH" o method="fdr"), Benjamini & Yekutieli (2001) (method="BY"), e method="none" per nessuna correzione (ovviamente sconsigliato).

Test non parametrici

Vediamo ora di applicare ai dati alcuni test non parametrici, contenuti nel pacchetto PMCMRplus [5], che è necessario scaricare e installare dal CRAN. Copiate lo script che segue, incollatelo nella Console di R e premete ↵ Invio:

# CONFRONTARE TRA DI LORO PIU' CAMPIONI con metodi non parametrici
#
library(DAAG) # carica il pacchetto DAAG che include il set di dati ais
#
boxplot(hg~sport, data=ais, horizontal=FALSE, notch=FALSE, col="green", las=2, xlab="Sport praticato", ylab="Emoglobina nel sangue (g/dL)") # boxplot della concentrazione di emoglobina per sport praticato
#
library(PMCMRplus) # carica il pacchetto
spearmanTest(hg~sport, data=ais) # rho di Spearman (test omnibus, non parametrico)
kwAllPairsConoverTest(hg~sport, data=ais) # test di Conover (non parametrico)
kwAllPairsDunnTest(hg~sport, data=ais) # test di Dunn (non parametrico)
kwAllPairsNemenyiTest(hg~sport, data=ais) # test di Nemenyi (non parametrico)
#

Quelli che qui impieghiamo sono tutti test non parametrici che quindi non prevedono che i dati siano distribuiti in modo gaussiano e sono eseguiti mediante:
la funzione spearmanTest() per il test ρ (rho) di Spearman [6],  un test non parametrico che riporta un risultato unico per tutte le coppie di campioni (test omnibus);
la funzione kwAllPairsConoverTest() per il test di Conover, un test non parametrico basato sui ranghi di tipo Kruskal, che riporta un risultato per ogni coppia di campioni;
→ la funzione kwAllPairsDunnTest() per il test di Dunn, un test non parametrico basato sui ranghi di tipo Kruskal, che riporta un risultato per ogni coppia di campioni;
la funzione kwAllPairsNemenyiTest() per il test di Nemenyi, un test non parametrico basato sul confronto tra i ranghi, che riporta un risultato per ogni coppia di campioni.

I test di Conover, di Dunn e di Nemenyi, che riportano un risultato per ogni coppia di campioni, forniscono risultati sostanzialmente sovrapponibili, qui riporto per semplicità solamente i risultati dell'ultimo di questi.

> kwAllPairsNemenyiTest(hg~sport, data=ais) # test di Nemenyi (non parametrico)

        Pairwise comparisons using Tukey-Kramer-Nemenyi all-pairs test with Tukey-Dist approximation

data: hg by sport

        B_Ball Field   Gym   Netball Row   Swim  T_400m T_Sprnt Tennis
Field   0.023  -       -     -       -     -     -      -       -     
Gym     0.997  0.152   -     -       -     -     -      -       -     
Netball 0.028  4.3e-09 0.996 -       -     -     -      -       -     
Row     0.981  0.201   0.905 8.6e-05 -     -     -      -       -     
Swim    0.867  0.697   0.785 7.8e-05 1.000 -     -      -       -     
T_400m  0.844  0.578   0.785 2.0e-05 1.000 1.000 -      -       -     
T_Sprnt 0.133  1.000   0.279 5.9e-07 0.573 0.934 0.891  -       -     
Tennis  1.000  0.196   0.997 0.158   0.999 0.981 0.981  0.441   -     
W_Polo  0.018  1.000   0.126 5.0e-09 0.160 0.614 0.494  1.000   0.158 

P value adjustment method: single-step
alternative hypothesis: two.sided
Messaggio di avvertimento:
In kwAllPairsNemenyiTest.default(c(12.3, 12.7, 11.6, 12.6, 14, 12.5,  :
  Ties are present, p-values are not corrected.

Il pacchetto PMCMRplus include tra le altre anche la funzione tukeyTest() per il test di Tukey, un test parametrico per il confronto di campioni con distribuzione gaussiana e con uguale varianza, che riporta un risultato per ogni coppia di campioni, un test sovrapponibile per applicazione e conclusioni al test t di Student con la correzione di Bonferroni, anche se meno conservativo. La sintassi è sempre la stessa, per visualizzarne i risultati copiate e incollate nella Console di R questa riga di codice e premete ↵ Invio:

tukeyTest(hg~sport, data=ais) # test di Tukey (parametrico)

Da notare che i due test parametrici, il test di Tukey e il test t di Student con la correzione di Bonferroni, forniscono risultati molto simili:

        Pairwise comparisons using Tukey's test

data: hg by sport

        B_Ball Field   Gym    Netball Row    Swim   T_400m T_Sprnt Tennis
Field   0.0020 -       -      -       -      -      -      -       -     
Gym     0.9982 0.0671  -      -       -      -      -      -       -     
Netball 0.0043 2.4e-11 0.9553 -       -      -      -      -       -     
Row     0.8104 0.1028  0.8151 6.4e-07 -      -      -      -       -     
Swim    0.6798 0.4141  0.7173 2.3e-06 1.0000 -      -      -       -     
T_400m  0.5633 0.3463  0.6829 2.7e-07 1.0000 1.0000 -      -       -     
T_Sprnt 0.0013 1.0000  0.0429 5.1e-11 0.0623 0.2739 0.2224 -       -     
Tennis  1.0000 0.1278  0.9871 0.0142  0.9993 0.9920 0.9872 0.0784  -     
W_Polo  0.0031 1.0000  0.0709 8.8e-11 0.1275 0.4467 0.3833 1.0000  0.1418

P value adjustment method: single-step
alternative hypothesis: two.sided

In conclusionei risultati di due test parametrici per il confronto tra medie (il test t di Student con la correzione di Bonferroni e il test di Tukey) sono simili a quelli dei principali test non parametrici per il confronto tra mediane (test ρ di Spearman, test di Conover, di Dunn, di Nemenyi). Questo è determinato dal fatto che in questo caso le distribuzioni dei dati non si allontanano molto da una distribuzione gaussiana: e per definizione in una distribuzione gaussiana i risultati dei test parametrici e dei test non parametrici coincidono, e coincidono medie e mediane. Tuttavia va sottolineato che un approccio rigoroso e puntuale deve prevedere, al fine di consentire la corretta applicazione dei test, la verifica preliminare della gaussianità dei dati – che qui per semplicità non è stata riportata – con uno dei metodi che trovate descritti [7]. 


----------


[2] Wikipedia. Type I and type II errors. URL consultato il 10/01/2020: http://bit.ly/2R1VdyF

[3] Vedere il post Il set di dati ais. La concentrazione dell'emoglobina viene espressa in grammi per decilitro di sangue (g/dL). Nel post trovate anche come caricare i dati della tabella senza impiegare il pacchetto DAAG

[4] Un metodo statistico “meno conservativo” a parità di condizioni riporta più frequentemente differenze significative. Personalmente preferisco in ogni caso impiegare i metodi più conservativi, in quanto riducono la probabilità di considerare significativa una differenza che invece non è significativa (ovvero riducono la probabilità di un falso positivo).

[5] PMCMR è l'acronimo di Calculate Pairwise Multiple Comparisons of Mean Rank Sums Extended. Si tratta di un pacchetto che include una serie molto ampia sia di test omnibus (che forniscono un solo risultato per tutti i confronti effettuati), sia per il confronto tra tutte le coppie di campioni, sia parametrici, sia non parametrici. Vedere sul CRAN il reference manual PMCMRplus: Calculate Pairwise Multiple Comparisons of Mean Rank Sums Extended.
https://cran.r-project.org/web/packages/PMCMRplus/index.html

[6] Per 
il test ρ (rho) di Spearman vedere anche il post Coefficienti di correlazione parametrici e non parametrici.

[7] Vedere ad esempio:

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 dei grafici generati con il pacchetto ggplot2 per disporre più grafici all'interno della stessa immagine è necessario impiegare la funzione grid.arrange() inclusa nel pacchetto gridExtra [4]: per esempi di applicazione di questa funzione fate click su ggplot2 nelle Parole chiave o, per una ricerca più selettiva, digitate grid.arrange nella casella Cerca nel blog quindi fate click su Cerca.

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.
https://cran.r-project.org/web/packages/gridExtra/index.html