Calcular la mediana en R

Estadística con R Medidas de tendencia central
Calcular la mediana en R con la función median para datos discretos y continuos

La mediana es una medida de localización central que se define como aquel valor que divide un conjunto de observaciones, ordenadas de menor a mayor, en dos partes con el mismo número de observaciones o como aquel valor que divide los datos en dos partes de igual probabilidad. En este tutorial revisaremos cómo calcular la mediana en R tanto para variables discretas como continuas, así como calcular la mediana por grupos.

Mediana de una variable discreta

Para calcular la mediana de un conjunto de observaciones podemos utilizar la función median. Considera el siguiente vector:

datos <- c(126, 52, 133, 104, 115, 67, 57, 83, 53, 105, 100)

En este caso podemos ver que la mediana de los datos es 100:

median(datos) # 100

Podemos comprobarlo ordenando los datos y viendo que hay el mismo número de datos a los lados de la mediana. En este caso quedan 5 datos a la izquierda y 5 datos a la derecha.

plot(1, 1, type = "n", axes = FALSE, ann = FALSE,
     xlim = c(0, 11), ylim = c(0, 1))
text(c(1:11), rep(0.5, 10), as.character(sort(datos)))
rect(xleft = 5.6, ybottom = 0.45, xright = 6.4, ytop = 0.55, border = 2)
arrows(x0 = 0.7, y0 = 0.4, x1 = 5, code = 3, length = 0.15)
arrows(x0 = 7, y0 = 0.4, x1 = 11, code = 3, length = 0.15)
text(c(3, 9), 0.35, "5")

Mediana de los datos dividiendo los datos en dos partes iguales

Ten en cuenta que si el número de observaciones es impar, la mediana se calculará como la media de los dos valores centrales. Considera los mismos datos de antes menos la última observación:

datos2 <- c(126, 52, 133, 104, 115, 67, 57, 83, 53, 105)

En este caso la mediana es 93.5:

median(datos2) # 93.5

La mediana se corresponde con la media de los valores 83 y 104, dejando 4 observaciones a cada lado, tal y como se ilustra en la siguiente figura:

plot(1, 1, type = "n", axes = T, ann = FALSE,
     xlim = c(0, 11), ylim = c(0, 1))
text(c(1:10), rep(0.5, 10), as.character(sort(datos2)))
rect(xleft = 4.5, ybottom = 0.45, xright = 6.5, ytop = 0.55, border = 2)
arrows(x0 = 0.7, y0 = 0.4, x1 = 4.25, code = 3, length = 0.15)
arrows(x0 = 6.75, y0 = 0.4, x1 = 10.5, code = 3, length = 0.15)
text(c(2.5, 8.5), 0.35, "4")
text(5.5, 0.6, "mean(c(83, 104)) = 93.5")

Mediana en R con datos discretos impares

Si la variable contiene valores NA puedes establecer el argumento na.rm como TRUE para borrarlos.

Mediana de una variable continua

Si en lugar de una variable discreta tenemos una continua también podemos utilizar la función median. Considera una muestra aleatoria de 1000 valores obtenidos a partir de una distribución normal de media 0 y desviación típica 1:

set.seed(1)
datos3 <- rnorm(1000)

En este caso vemos que la mediana está muy cerca de su valor teórico (como la distribución normal es simétrica, la media y la mediana son iguales, por lo que la mediana teórica es 0). Recuerda que la mediana es aquel valor que deja un 50% de probabilidad o valores a ambos lados.

median(datos3) # -0.03532423

Mediana en R con datos continuos

Mediana por grupo en R

Por último, si tenemos un conjunto de datos clasificados por grupos podemos utilizar la función tapply para calcular la mediana por grupo. Toma como ejemplo los siguientes datos:

set.seed(1)
x <- sample(1:1000, 100)
grupo <- sample(c("A", "B", "C"), 100, replace = TRUE)
datos4 <- data.frame(x, grupo)

head(datos4)
   x   grupo
1 836     B
2 679     A
3 129     A
4 930     C
5 509     C
6 471     C

Podemos aplicar la función tapply al data frame de la siguiente manera:

tapply(datos4$x, datos4$grupo, median)
    A     B     C 
543.0 524.0 525.5

La salida nos devolverá la mediana de cada grupo.