Calcular la mediana en R
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")
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")
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 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.