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.