Barplot raggruppato con barre di errore in R

Grafico a barre raggruppate con barre di errore in R

Una guida completa alla preparazione e visualizzazione dei dati

Foto di Paulius Dragunas su Unsplash

I barplot sono uno strumento di visualizzazione essenziale e ampiamente utilizzato per diverse ragioni. Sono scelte eccellenti per visualizzare la relazione tra variabili numeriche e categoriche, semplificando la comprensione delle differenze tra categorie o gruppi. Possono rappresentare conteggi, frequenze, proporzioni e percentuali, rendendoli versatili per diversi tipi di dati.

In R, abbiamo la possibilità di analizzare dati categorici e rappresentarli tramite barplot. Tuttavia, i principianti che si avventurano nella programmazione R spesso incontrano difficoltà nell’effettuare stime medie, errori standard e nella creazione di barplot raggruppati con errori. Per superare queste sfide, è necessario avere una comprensione di base dei tipi di dati, delle strutture dei dati e delle operazioni necessarie per l’analisi dei dati.

In questo tutorial, inizieremo creando un dataset semplice per comprendere diversi tipi di dati e come convertirli in formati adeguati per l’analisi dei dati. Successivamente, ci dedicheremo al processo di stima delle medie e degli errori standard. Infine, procederemo a creare un barplot raggruppato con error bars. Per aiutare i principianti, analizzerò il codice in modo dettagliato, passo dopo passo, per garantire una comprensione approfondita del processo di programmazione.

Presumo che i nostri lettori siano familiari con il processo di installazione e caricamento dei pacchetti R. In caso contrario, si prega di fare riferimento a STHDA per una guida.

Passiamo subito alla creazione del dataset, alla sua modifica e alla visualizzazione. Inizia caricando le librerie necessarie come illustrato di seguito.

library(tidyverse)library(ggthemes)library(ggpubr)

Il tidyverse è una collezione di pacchetti R essenziali, che include dplyr per la manipolazione e l’analisi dei dati, e ggplot2 per la visualizzazione dei dati. Il ggthemes fornisce temi e componenti di stile alternativi per i plot di ggplot2. Il ggpubr offre ggsave() per salvare i plot con dimensioni personalizzabili, risoluzione e formati di file. Per esplorare ulteriormente questi pacchetti, basta cliccare sui collegamenti ipertestuali forniti.

Creazione di un Dataframe:

Nel codice seguente, la funzione data.frame() inizia un dataframe chiamato df con tre colonne: Animals, Category e Counts.

df <- data.frame(Animals = c("gatti", "cani", "mucche",                              "gatti", "cani", "mucche",                             "gatti", "cani", "mucche",                             "gatti", "cani", "mucche"),                Category = c("Domestici", "Domestici", "Domestici",                             "Domestici","Domestici","Domestici",                             "Randagi", "Randagi", "Randagi",                              "Randagi", "Randagi", "Randagi"),                  Counts = c("28", "22", "45",                              "30", "18", "43",                              "40", "65","10",                             "35", "72", "8"))

💡 Alternativamente, crea il dataframe in Excel e importa il file in R.

Visualizziamo il dataframe df utilizzando la funzione view().

view(df)

La colonna ‘Animals’ contiene i nomi di diversi tipi di animali. Ci sono tre animali unici in questa colonna: “gatti”, “cani” e “mucche”. Abbiamo campionato ogni tipo di animale quattro volte, ottenendo un totale di 12 righe. La colonna ‘Category’ classifica gli animali come “Domestici” o “Randagi”. Ci sono sei “Domestici” e sei “Randagi”. La colonna ‘Counts’ rappresenta i conteggi di ciascun animale nelle colonne ‘Category’ e ‘Animals’ fornite.

Tipi di dati e manipolazione dei dati

In R, è fondamentale comprendere il tipo di dati delle variabili perché diverse operazioni e funzioni possono essere applicate a diversi tipi di dati. Nel nostro dataset, abbiamo due tipi di dati: carattere e numerico. I tipi di dati carattere sono essenziali per lavorare con dati di testo, come nomi, etichette, descrizioni e informazioni testuali. I tipi di dati numerici rappresentano valori numerici, compresi numeri interi e numeri reali (valori in virgola mobile).

Otteniamo il riepilogo del dataframe utilizzando la funzione glimpse() per conoscere il tipo di dati delle variabili nel dataframe df.

glimpse(df)

Righe: 12Colonne: 3$ Animals  <chr> "gatti", "cani", "mucche", "gatti", "cani", "mucche", "gatti", "cani", "mucche", "…$ Categoria <chr> "Domestico", "Domestico", "Domestico", "Domestico", "Domestico", "Domestico", "…$ Conteggi  <chr> "28", "22", "45", "30", "18", "43", "40", "65", "10", "35", "72", "8"

Possiamo osservare che il dataframe df consiste in 12 righe (osservazioni) e 3 colonne (variabili). In particolare, le variabili Animals e Categoria sono identificate come tipo di dato carattere, indicato come <chr>. I valori all’interno di queste variabili sono racchiusi tra virgolette doppie, rendendoli delle stringhe di caratteri. Tuttavia, un’osservazione interessante è che la variabile Conteggi è anch’essa identificata come tipo di dato carattere. Questo potrebbe sembrare inatteso poiché i valori all’interno di questa variabile sono in realtà numerici, non stringhe di caratteri. Questa errata classificazione dei tipi di dati potrebbe potenzialmente causare complicazioni durante l’esecuzione di operazioni numeriche. Per affrontare questa problematica e facilitare le operazioni numeriche, è necessario prendere l’apposita misura di convertire la variabile Conteggi in un tipo di dato numerico.

Avrai notato che quando ho creato inizialmente il dataframe df, ho intenzionalmente racchiuso i valori numerici tra virgolette doppie, rendendo la variabile Conteggi un tipo di dato carattere. Ora che abbiamo una chiara comprensione della struttura del dataframe, procediamo e risolviamo questo problema. Lo faremo convertendo la variabile Conteggi all’interno del dataframe df dal suo attuale tipo di dato carattere a un tipo di dato numerico.

df$Conteggi <- as.numeric(df$Conteggi)

df$Conteggi seleziona la colonna Conteggi nel dataframe df. as.numeric() converte l’input in un tipo di dato numerico.

glimpse(df)

Righe: 12Colonne: 3$ Animals  <chr> "gatti", "cani", "mucche", "gatti", "cani", "mucche", "gatti", "cani", "mucche", "…$ Categoria <chr> "Domestico", "Domestico", "Domestico", "Domestico", "Domestico", "Domestico", "…$ Conteggi  <dbl> 28, 22, 45, 30, 18, 43, 40, 65, 10, 35, 72, 8

Ora la variabile Conteggi è identificata come tipo di dato numerico, indicato da <dbl>, spesso chiamato “double”. I valori all’interno di questa variabile non sono racchiusi tra virgolette, indicando che sono numerici, non stringhe di caratteri.

<dbl> sta per “numero in virgola mobile a precisione doppia”. È un tipo di dato numerico utilizzato per memorizzare numeri reali e effettuare operazioni aritmetiche su numeri reali, compresi i numeri decimali.

Stima della media e dell’errore standard

Il codice seguente crea un nuovo dataframe chiamato mean_df eseguendo una sintesi dei dati e una aggregazione su un dataframe esistente df.

mean_df <- df %>%   group_by(Animals, Category) %>%   summarise(media= mean(Counts),            se = sd(Counts)/sqrt(n()))

Suddividiamo il codice passo dopo passo:

  1. L’operatore “pipe” (%>%) prende il dataframe esistente df e lo passa alla parte successiva del codice. Imposta df come input per le operazioni successive. In R, l’operatore %>% prende il risultato di una funzione a sinistra e lo passa come primo argomento alla funzione successiva a destra, permettendoci di concatenare una serie di operazioni in modo chiaro e sequenziale.
  2. La funzione group_by() raggruppa il dataframe per le colonne Animals e Category, creando dei sottogruppi all’interno del dataframe in base alle combinazioni uniche di queste due variabili.
  3. La funzione summarise() calcola la media e l’errore standard e le assegna alle nuove variabili: media e se rispettivamente.
  • La funzione mean() calcola la media (media) della colonna Counts per ogni sottogruppo creato dall’operazione group_by().
  • La funzione sd() calcola l’errore standard (se) della colonna Counts per ogni sottogruppo. L’errore standard viene calcolato dividendo la deviazione standard (sd()) della colonna Counts per la radice quadrata della dimensione del campione (sqrt(n())).

Diamo uno sguardo al riassunto del dataframe mean_df

glimpse(mean_df)

Righe: 6Colonne: 4$ Animals  <chr> "gatti", "gatti", "mucche", "mucche", "cani", "cani"$ Category <chr> "Domestico", "Randagio", "Domestico", "Randagio", "Domestico", "Randagio"$ media    <dbl> 29.0, 37.5, 44.0, 9.0, 20.0, 68.5$ se       <dbl> 1.0, 2.5, 1.0, 1.0, 2.0, 3.5

Fatto! Ora abbiamo quattro colonne o variabili, comprese due nuove variabili, media e se calcolate per la colonna Counts in base ai nostri criteri di raggruppamento. Procediamo con la visualizzazione dei dati utilizzando questo nuovo dataframe, “mean_df”.

Visualizzare i dati

Il codice qui sotto prende un dataframe mean_df e lo passa a ggplot2 utilizzando l’operatore %>% per creare un grafico a barre raggruppate.

barplot <- mean_df %>%   ggplot(    aes(x = Animals, y = media, fill = Category))+    geom_col( position = "dodge", width = 0.5, alpha = 0.5, color = "black", size = 0.1)

💡Tieni presente che l’operatore “pipe” (%>%) può essere utilizzato nella manipolazione e analisi dei dati per concatenare più operazioni, ma non può essere utilizzato nel processo di visualizzazione dei dati per aggiungere ulteriori strati all’interno della funzione ggplot2. Invece, utilizziamo il simbolo “+” come mostrato sopra.

Suddividiamo il codice passo dopo passo:

  1. La funzione aes(), abbreviazione di ‘aesthetic’, viene utilizzata per specificare come le variabili nel dataset vengono mappate agli estetismi visivi nel grafico. In questo caso, specifica che l’asse x deve rappresentare la variabile Animals, l’asse y deve rappresentare la variabile media, e colorare le barre in base alla variabile Category.
  2. La funzione geom_col() calcola l’altezza di ogni barra in base ai valori nella colonna media. Ecco una spiegazione dei parametri utilizzati nella funzione geom_col():
  • position = "dodge": Specifica che le barre dovrebbero essere raggruppate una a fianco all’altra (dodged) in base alla variabile Category. Questo crea un grafico a barre raggruppate.
  • width = 0.5: Determina la larghezza delle barre. In questo caso, le barre hanno una larghezza di 0.5.
  • alpha = 0.5: Controlla la trasparenza delle barre. Un valore alpha di 0.5 rende le barre leggermente trasparenti.
  • color = "black": Imposta il colore del bordo delle barre su nero.
  • size = 0.1: Specifica la dimensione del bordo intorno alle barre. In questo caso, i bordi saranno relativamente sottili.

La combinazione di questi parametri personalizza l’aspetto delle barre nel grafico a barre, rendendole più sottili, leggermente trasparenti, con bordi neri e disposte una accanto all’altra per diverse categorie, il che può migliorare la rappresentazione visiva dei dati.

Diamo uno sguardo al grafico:

plot(bar_chart)

Grande! Abbiamo creato con successo un grafico a barre, ma attualmente le barre non hanno errori standard. Aggiungiamo gli errori standard al grafico.

Aggiunta degli errori standard alle barre e personalizzazione dei colori delle barre

Prima copia e incolla il codice sopra e quindi aggiungi la funzione geom_errorbar() come mostrato di seguito.

barplot <- mean_df %>%   ggplot(aes(x = Animals, y = mean, fill = Category))+  geom_col(position = "dodge", width = 0.5, alpha = 0.7, color = "black", size = 0.1)+  geom_errorbar(aes(ymin = mean-se, ymax = mean+se),	position = position_dodge(width = 0.5), width = 0.2) 

Scomponiamo i componenti utilizzati nella funzione geom_errorbar():

  1. ymine ymaxdefiniscono i valori inferiori e superiori delle barre di errore in base alla media calcolata e all’errore standard.
  2. L’argomento position viene impostato su position_dodge() per posizionare le barre di errore una accanto all’altra (dodged) e width = 0.5per impostare la larghezza dodge. Gioca con il parametro width per notare le modifiche nella posizione delle barre.
  3. width = 0.2imposta la larghezza delle barre di errore. In questo caso, le barre di errore avranno una larghezza di 0.2

Diamo uno sguardo al grafico:

plot(barplot)

Grande! Abbiamo creato un grafico a barre raggruppate con le barre di errore. Questo grafico è quasi pronto per la pubblicazione, ma alcuni piccoli aggiustamenti possono migliorarne notevolmente l’aspetto. Ad esempio, potresti aver notato uno spazio tra le barre e le etichette dell’asse x. Rimuoviamolo. Inoltre, cambiando i colori delle barre, posizionando la legenda all’interno del grafico e fornendo un tema predefinito per una presentazione pulita e semplice, miglioreremo la presentazione complessiva.

Creazione di un grafico di qualità per la pubblicazione

Iniziamo copiando il codice sopra e poi aggiungendo ulteriori livelli come mostrato di seguito.

barplot <- mean_df %>%   ggplot(aes(x = Animals, y = mean, fill = Category))+  geom_col(position = "dodge", width = 0.5, alpha = 0.7, color = "black", size = 0.1)+  geom_errorbar(aes(ymin = mean-se, ymax = mean+se),	position = position_dodge(width = 0.5), width = 0.2)+  scale_y_continuous(expand = expansion(0),                     limits = c(0,100))+  scale_fill_manual(values = c("blue", "gray"),                    name = NULL)+ # NULL rimuove il titolo della legenda "Category".  theme_par()+  theme(legend.position = c(0.2, 0.80))

Suddividiamo il codice passo dopo passo

  1. L’argomento expand di scale_y_continuous() è impostato su expansion(0) per rimuovere eventuali spaziatura attorno ai limiti dell’asse y, e l’argomento limits è impostato su c(0, 100) per impostare i limiti dell’asse y da 0 a 100.
  2. Viene utilizzato scale_fill_manual(values) per personalizzare la legenda per l’estetica del riempimento (colori delle barre) e per impostare il titolo della legenda su NULL, per rimuovere il titolo della legenda “Categoria”
  3. Viene utilizzato theme_par() per personalizzare il tema del grafico, che offre uno sfondo bianco pulito e grafici compatti. Ha i suoi pro e contro.
  4. L’argomento legend.position di theme() è stato impostato su c(0.2, 0.80) per specificare la posizione della legenda all’interno del grafico. Gioca con questi valori per capire meglio questo argomento.

💡 I temi predefiniti come theme_par() sovrascriveranno i componenti del tema applicati in seguito. Abbiamo aggiunto theme(legend.position) dopo la funzione theme_par() per affrontare questo problema.

Diamo un’occhiata al grafico:

plot(barplot)

Ecco un grafico a barre attraente dal punto di vista visivo e pronto per la pubblicazione con le barre di errore. Il grafico illustra efficacemente le variazioni nelle popolazioni di animali. Nella categoria “Randagio”, i cani superano in numero i gatti e le mucche, mentre nella categoria “Domestico”, le mucche superano chiaramente i gatti e i cani.

Salvataggio del grafico per la pubblicazione

Il codice di seguito utilizza la funzione ggsave() dalla libreria ggpubr. Per salvare il grafico, dobbiamo specificare l’oggetto ggplot bar_chart e quindi assegnare un nome al file con il formato grafico desiderato. In questo esempio, ho utilizzato il nome del file ‘barchart_animals.tiff‘, che salverà il grafico come un’immagine TIFF. Ho anche impostato le dimensioni in pollici per ‘width’ e ‘height’ e il ‘dpi’ (punti per pollice) per la risoluzione.

ggsave(bar_chart, filename = "barchart_animals.tiff", width = 5, height = 4, dpi = 300)

Ora sei pronto per creare grafici a barre pronti per la pubblicazione con le barre di errore standard. Goditi il processo creativo e divertiti a tracciare i tuoi dati! 🎉✨