Programa
La desviación estándar es una de las formas más comunes de resumir la dispersión de tus datos. En R, la función sd()
te ofrece una forma rápida de calcular esta medida de variabilidad, tanto si trabajas con vectores, marcos de datos o datos agrupados.
En este artículo, repasaré los conceptos básicos del uso de sd()
en R, exploraré cómo tratar los valores perdidos y demostraré cómo calcular desviaciones estándar entre grupos utilizando funciones como tapply()
y paquetes como dplyr
.
¿Qué hace sd() en R?
En R, la función sd()
de R base calcula la desviación estándar de un vector numérico o de una columna de un marco de datos. Mide cuánto se desvían de la media los valores de tus datos, dándote una idea de la variabilidad o dispersión.
Si estás familiarizado con la idea de varianza, la desviación estándar es simplemente su raíz cuadrada y, debido a cómo se calcula (tomando la raíz cuadrada de la desviación media al cuadrado) la desviación estándar permanece en la misma escala que los datos originales. Esto facilita su interpretación práctica.
Un ejemplo sencillo de sd()
Supón que tienes un conjunto de números y quieres saber cuánto varían de la media.
Así es como lo harías en R:
exam_scores <- c(75, 80, 85, 90, 95)
sd(exam_scores)
La salida te indica la desviación estándar, que cuantifica la distancia media de cada puntuación respecto a la media.
Puedes utilizar sd()
con cualquier vector numérico, incluidos enteros, dobles o resultados de cálculos. Ahora bien, puede que sepas que R trata los vectores lógicos como numéricos (TRUE
como 1
, FALSE
como 0
), por lo que la función sd()
funcionaría técnicamente con vectores lógicos (puedes probarlo si quieres), pero la idea de desviación estándar tiene más sentido para datos numéricos continuos.
Tratamiento de valores perdidos con sd()
Los conjuntos de datos del mundo real suelen contener valores perdidos, por lo que merece la pena mencionarlo: Si tus datos incluyen algún valor de NA
, sd()
devolverá NA
por defecto.
Considera este ejemplo:
heights <- c(170, 175, NA, 180, 185)
sd(heights)
El resultado es NA
.
Para ignorar los valores que faltan y calcular la desviación estándar de los números disponibles, utiliza el argumento na.rm = TRUE
. O bien, puedes eliminar los valores de NA
de tu conjunto de datos, pero sólo te lo aconsejo si tiene sentido hacerlo.
sd(heights, na.rm = TRUE)
Ahora obtendrás la desviación estándar para 170, 175, 180 y 185.
Calcular la desviación estándar de los marcos de datos en R
Puedes calcular fácilmente la desviación estándar de una columna concreta de un marco de datos utilizando el operador $
. Supón que tienes un marco de datos de pesos de productos:
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)
Esto te da la desviación estándar de la columna weight
. Recuerda que sd()
está diseñado para vectores numéricos, no para marcos de datos enteros. Selecciona siempre la columna adecuada.
sd() y desviaciones estándar agrupadas
A menudo, querrás medir la variabilidad dentro de los grupos, por ejemplo, por categoría, región o por algún otro factor. R proporciona varias formas de calcular desviaciones estándar agrupadas. Te enseñaré tres:
Utilizar tapply() para desviaciones estándar agrupadas
Supón que tienes datos de ventas de distintas regiones y quieres la desviación estándar de cada región:
sales_amount <- c(200, 220, 210, 250, 240, 230)
region <- c("North", "North", "South", "South", "North", "South")
tapply(sales_amount, region, sd)
tapply()
aplica sd()
a cada grupo definido por región.
Uso de aggregate() para desviaciones estándar agrupadas
Si prefieres tus resultados en un marco de datos ordenado, aggregate()
funciona:
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)
Esto produce un marco de datos de resumen con la desviación estándar de cada región.
Uso de dplyr para desviaciones estándar agrupadas
Con el paquete dplyr
, los cálculos agrupados son aún más legibles. Utiliza summarize()
después de agrupar:
library(dplyr)
sales_data %>%
group_by(region) %>%
summarize(sd_amount = sd(amount))
Este enfoque es especialmente útil para conjuntos de datos más grandes o cuando se encadenan varias transformaciones de datos. (O si simplemente prefieres utilizar el operador tubería, como hago yo).
Errores comunes y consejos
Incluso una función sencilla como sd() puede causar problemas si no tienes cuidado. He aquí algunos escollos comunes:
-
Datos no numéricos:
sd()
sólo funciona con vectores numéricos. Si tus datos incluyen caracteres o factores, obtendrás un error. Utilizais.numeric()
para comprobar tus datos. -
Valores perdidos: Un solo
NA
hará quesd()
devuelvaNA
. Utiliza siemprena.rm = TRUE
si quieres ignorar los valores perdidos. -
Tamaños de muestra pequeños:
sd()
utiliza n-1 en el denominador (desviación estándar de la muestra). Para vectores de longitud 1,sd()
devuelveNA
, no0
.
Ese último error en particular, creo que es interesante. Es una diferencia menos conocida, y puede hacerte tropezar si pasas de Python a R, ya que Python divide por la desviación estándar de la población, no de la muestra.
Variaciones útiles y funciones relacionadas en R
R ofrece varias funciones relacionadas para medir la variabilidad y resumir los datos:
-
var()
: Calcula la varianza, que es el cuadrado de la desviación estándar. -
apply()
,sapply()
,lapply()
: Útil para aplicarsd()
en filas o columnas de matrices y marcos de datos. mad()
: Calcula la desviación absoluta mediana, que es otra medida interesante y más robusta de la variabilidad.
Permíteme mostrarte sd()
utilizado con apply()
, ya que lo he mencionado: A continuación te explicamos cómo utilizar apply()
para obtener la desviación estándar de cada columna de una matriz. Como antes, crearé esa matriz sobre la marcha.
measurement_matrix <- matrix(1:9, nrow = 3)
apply(measurement_matrix, 2, sd)
Esto devuelve la desviación estándar de cada columna, dándote una visión rápida de la variabilidad en múltiples variables.
Conclusión
La función sd()
en R es relativamente sencilla (sólo tiene una línea de código). Pero si te encuentras utilizándolo para informes o presentaciones y te sientes un poco confuso con los detalles, inscríbete en nuestro programa de la carrera de Estadístico en R. Hay muchos matices en la estadística y el análisis de datos, así que asegúrate de que estás bien versado.
