Corso
La deviazione standard è uno dei modi più comuni per riassumere quanto sono dispersi i tuoi dati. In R, la funzione sd() ti offre un modo rapido per calcolare questa misura di variabilità, che tu stia lavorando con vettori, data frame o dati raggruppati.
In questo articolo vedremo le basi dell'uso di sd() in R, come gestire i valori mancanti e come calcolare le deviazioni standard per gruppi usando funzioni come tapply() e pacchetti come dplyr.
Cosa fa sd() in R?
In R, la funzione sd() del base R calcola la deviazione standard di un vettore numerico o di una colonna di un data frame. Misura quanto i valori nei tuoi dati si discostano dalla media, dandoti un'idea della variabilità o dispersione.
Se conosci il concetto di varianza, la deviazione standard è semplicemente la sua radice quadrata e, per come è calcolata (prendendo la radice quadrata della media degli scarti quadratici), resta sulla stessa scala dei dati originali. Questo la rende più facile da interpretare in termini pratici.
Un semplice esempio con sd()
Supponi di avere un insieme di numeri e di voler sapere quanto variano rispetto alla media.
Ecco come farlo in R:
exam_scores <- c(75, 80, 85, 90, 95)
sd(exam_scores)
L'output ti restituisce la deviazione standard, che quantifica la distanza media di ciascun punteggio dalla media.
Puoi usare sd() con qualsiasi vettore numerico, compresi integer, double o i risultati di calcoli. Ora, forse sai che R tratta i vettori logici come numerici (TRUE come 1, FALSE come 0), quindi la funzione sd() funzionerebbe tecnicamente anche su vettori logici (puoi provarlo se vuoi), ma l'idea di deviazione standard ha più senso per dati numerici continui.
Gestire i valori mancanti con sd()
I dataset reali spesso contengono valori mancanti, quindi vale la pena menzionarlo: se i tuoi dati includono valori NA, sd() restituirà NA per impostazione predefinita.
Considera questo esempio:
heights <- c(170, 175, NA, 180, 185)
sd(heights)
Il risultato è NA.
Per ignorare i valori mancanti e calcolare la deviazione standard dei numeri disponibili, usa l'argomento na.rm = TRUE. In alternativa, puoi ripulire i valori NA dal tuo dataset, ma te lo consiglierei solo se ha senso farlo.
sd(heights, na.rm = TRUE)
Ora otterrai la deviazione standard per 170, 175, 180 e 185.
Calcolare la deviazione standard per i data frame in R
Puoi calcolare facilmente la deviazione standard di una colonna specifica di un data frame usando l'operatore $. Supponi di avere un data frame con i pesi dei prodotti:
product_data <- data.frame( weight = c(1.2, 1.5, 1.3, 1.7, 1.4), price = c(10, 12, 11, 13, 12) )
sd(product_data$weight)
Questo ti restituisce la deviazione standard della colonna weight. Ricorda, sd() è pensata per vettori numerici, non per interi data frame. Seleziona sempre la colonna appropriata.
sd() e deviazioni standard per gruppi
Spesso vorrai misurare la variabilità all'interno di gruppi, ad esempio per categoria, regione o un altro fattore. R offre diversi modi per calcolare le deviazioni standard per gruppi. Te ne mostro tre:
Usare tapply() per deviazioni standard raggruppate
Supponi di avere dati di vendita per regioni diverse e di voler calcolare la deviazione standard per ciascuna regione:
sales_amount <- c(200, 220, 210, 250, 240, 230)
region <- c("North", "North", "South", "South", "North", "South")
tapply(sales_amount, region, sd)
tapply() applica sd() a ciascun gruppo definito dalla regione.
Usare aggregate() per deviazioni standard raggruppate
Se preferisci i risultati in un data frame "tidy", aggregate() fa al caso tuo:
sales_data <- data.frame( region = c("North", "North", "South", "South", "North", "South"), amount = c(200, 220, 210, 250, 240, 230) )
aggregate(amount ~ region, data = sales_data, sd)
Questo produce un data frame riepilogativo con la deviazione standard per ciascuna regione.
Usare dplyr per deviazioni standard raggruppate
Con il pacchetto dplyr, i calcoli per gruppi sono ancora più leggibili. Usa summarize() dopo il raggruppamento:
library(dplyr)
sales_data %>%
group_by(region) %>%
summarize(sd_amount = sd(amount))
Questo approccio è particolarmente utile per dataset più grandi o quando concateni più trasformazioni dei dati. (O se semplicemente preferisci usare l'operatore pipe, come me.)
Errori comuni e consigli
Anche una funzione semplice come sd() può creare problemi se non fai attenzione. Ecco alcune trappole comuni:
-
Dati non numerici:
sd()funziona solo con vettori numerici. Se i tuoi dati includono caratteri o fattori, otterrai un errore. Usais.numeric()per verificare i tuoi dati. -
Valori mancanti: Un singolo
NAfarà sì chesd()restituiscaNA. Usa semprena.rm = TRUEse vuoi ignorare i valori mancanti. -
Campioni piccoli:
sd()usa n-1 al denominatore (deviazione standard campionaria). Per vettori di lunghezza 1,sd()restituisceNA, non0.
Quell'ultimo aspetto in particolare, secondo me, è interessante. È una differenza meno nota e può trarti in inganno se passi da Python a R, dato che Python divide per la deviazione standard della popolazione, non per quella campionaria.
Varianti utili e funzioni correlate in R
R offre diverse funzioni correlate per misurare la variabilità e riassumere i dati:
-
var(): Calcola la varianza, che è il quadrato della deviazione standard. -
apply(),sapply(),lapply(): Utili per applicaresd()su righe o colonne di matrici e data frame. mad(): Calcola la deviazione assoluta mediana, un'altra misura interessante e più robusta della variabilità.
Ti mostro sd() usata con apply(), già che l'ho menzionata: ecco come usare apply() per ottenere la deviazione standard di ciascuna colonna in una matrice. Come prima, creerò la matrice al volo.
measurement_matrix <- matrix(1:9, nrow = 3)
apply(measurement_matrix, 2, sd)
Questo restituisce la deviazione standard per ciascuna colonna, dandoti una panoramica rapida della variabilità tra più variabili.
Conclusione
La funzione sd() in R è relativamente semplice (è una sola riga di codice). Ma se ti capita di usarla per report o presentazioni e ti senti un po' incerto sui dettagli, iscriviti al career track Statistician in R. In statistica e analisi dei dati c'è molta sfumatura, quindi assicurati di avere solide basi.

Sono uno scrittore e editor di data science, con contributi a articoli di ricerca su riviste scientifiche. Sono particolarmente interessato ad algebra lineare, statistica, R e affini. Inoltre, gioco anche parecchio a scacchi!

