La función sd() en R: desviación típica (y var() para la varianza)
sd() calcula la desviación típica: cuánto se alejan tus datos de la media, en promedio. Su compañera var() devuelve la varianza, que es lo mismo al cuadrado.
Ejemplo simple
notas <- c(4, 6, 7, 8, 10)
sd(notas)
var(notas)
Y como siempre en R, con valores ausentes hay que avisar:
notas <- c(4, 6, NA, 8, 10)
sd(notas, na.rm = TRUE)
Dos conjuntos con la misma media pueden tener dispersiones muy distintas, y ahí es donde sd() te salva:
sd(c(5, 5, 5, 5, 5))
sd(c(0, 2, 5, 8, 10))
El primero da 0 → todos los valores son idénticos.
El detalle de n-1
sd() divide entre n - 1, no entre n. Es lo correcto cuando tus datos son una muestra de algo mayor, que es prácticamente siempre.
Si tienes la población completa y necesitas la fórmula poblacional:
sd_poblacional <- function(x) {
sqrt(sum((x - mean(x))^2) / length(x))
}
sd_poblacional(notas)
Con muchos datos la diferencia es despreciable; con pocos, se nota.
Ejemplo algo más completo
La desviación típica suelta dice poco: 50 puede ser mucho o poco según la escala. Por eso se compara con la media mediante el coeficiente de variación:
cv <- function(x) sd(x) / mean(x) * 100
cv(c(0, 2, 5, 8, 10))
En porcentaje ya sí puedes comparar variables de unidades distintas.
Y aplicado a un data frame entero:
sapply(iris[, 1:4], sd)
Un aviso: igual que la media, sd() se descontrola con los valores extremos, porque las diferencias se elevan al cuadrado. Si sospechas que los tienes, conviene detectarlos primero.