Creare un dynamite plot con R

Quando si confrontano i valori medi di due o più gruppi, solitamente si accompagna l’analisi con dei grafici a barre, dove l’altezza di ogni barra rappresenta il valore medio di ogni gruppo. È buona prassi associare alle medie gli errori standard, che vengono rappresentati nel grafico come dei segmenti posti sulla cima di ogni barra. Proprio per via della particolare configurazione che assume ogni barra, questi grafici vengono spesso chiamati “dynamite plot”.

Questo riportato di seguito è il dynamite plot che vedremo di costruire passo passo.

Dynamite plot

Nella distribuzione standard di R non esiste una funzione per creare un dynamite plot, ma lo si può costruire “artigianalmente” combinando la funzione barplot, che genera il grafico a barre, con la funzione arrows, che crea le barre d’errore.

Creiamo, a titolo esemplificativo, una variabile numerica, y, e una variabile di raggruppamento, group. Immaginiamo di avere tre gruppi e quattro osservazioni per ogni gruppo.

y <- c(20,23,19,19, 34,45,32,22, 11,13,16,19)
group <- rep(c("gruppo A", "gruppo B", "gruppo C"), each=4)

Prima di costruire il grafico, è necessario calcolare le medie e gli errori standard di ogni gruppo. Per calcolare gli errori standard sono necessarie le deviazioni standard dei gruppi e le loro numerosità campionarie. Per calcolare questi valori utilizzeremo la funzione tapply:

m <- tapply(y, group, mean) # Medie
s <- tapply(y, group, sd) # Deviazioni standard
n <- tapply(y, group, length) # Numero di osservazioni per ogni gruppo
se <- s/sqrt(n) # Errori standard

Possiamo quindi utilizzare la funzione barplot per generare il grafico:

bp <- barplot(m, ylim=c(0,50))

Per creare le barre d’errore utilizzeremo invece la funzione arrows. Come il nome lascia intuire, questa serve a sovrapporre delle frecce a un grafico; specificando l’argomento angle = 90 viene data una forma a T all’estremità della freccia. Specificando le coordinate x0, y0 e y1 si direzionano le frecce.

Il primo comando genera la barra d’errore superiore (il detonatore), mentre il secondo comando genera la barra inferiore (N.B.: talvolta le barre inferiori non vengono utilizzate).

arrows(x0 = bp, y0 = m, y1 = m+se, angle = 90) # barra d'errore sup
arrows(x0 = bp, y0 = m, y1 = m-se, angle = 90) # barra d'errore inf

Utilizzando questi comandi è possibile creare una funzione ad hoc pronta all’uso:

dynamite.plot <- function(y,group,...) {
m <- tapply(y, group, mean, na.rm=TRUE)
s <- tapply(y, group, sd, na.rm=TRUE)
n <- tapply(y, group, length)
se <- s/sqrt(n)
bp <- barplot(m,...)
arrows(x0 = bp, y0 = m, y1 = m+se, angle = 90)
arrows(x0 = bp, y0 = m, y1 = m-se, angle = 90)
}

La funzione richiede di specificare la variabile numerica, la variabile di raggruppamento e altri argomenti a piacere (…) che saranno passati direttamente alla funzione barplot. Si consiglia di specificare sempre il valore dell’argomento ylim, in modo che la barra d’errore più alta non ecceda il valore massimo dell’asse verticale.

Ora possiamo quindi creare il nostro dynamite plot con un unico comando:

dynamite.plot(y,group,ylim=c(0,50))

Print Friendly

Lascia un Commento