Menu

Media, mediana y desviación estándar en R

Cómo resumir datos en R: mean(), median(), sd(), var(), summary(), quantile() - qué calcula cada una, el detalle del n−1 detrás de sd() y por qué mode() en R es una trampa.

Esta página incluye editores ejecutables: edita, ejecuta y ve el resultado al instante.

Media y mediana

Los dos resúmenes más usados de toda la estadística son una llamada de función cada uno:

mean() suma todo y divide entre el número de valores. median() ordena los valores y elige el del medio (o promedia los dos centrales cuando el recuento es par). Para los 32 coches de mtcars, el consumo medio es de unas 20.1 mpg y la mediana es 19.2 - valores cercanos, lo que indica que los datos no están muy sesgados. Cuando discrepan mucho, eso también es información; lo veremos al final.

Algo que sorprende a todo el mundo: si el vector contiene aunque sea un solo NA, ambas funciones devuelven NA:

Es deliberado - R se niega a fingir en silencio que el valor faltante no existe. na.rm = TRUE significa "calcula sobre los valores que tienes". Casi todas las funciones de resumen de este artículo lo aceptan. La historia completa de cómo se propaga NA está en valores faltantes.

Desviación estándar y varianza

sd() mide la dispersión: a grandes rasgos, a qué distancia de la media se sitúa un valor típico, en las mismas unidades que los datos. var() es su cuadrado:

Una desviación estándar de unas 6 mpg significa que los coches suelen situarse a unas 6 mpg del promedio de 20.1. Como sd() está en las unidades propias de los datos, es la que se reporta; var() aparece sobre todo dentro de otras fórmulas.

Aquí viene el detalle que importa para los trabajos de clase: sd() y var() calculan el estadístico muestral - dividen la suma de desviaciones al cuadrado entre n − 1, no entre n:

¿Por qué n − 1? Como estimaste la media a partir de los mismos datos, las desviaciones alrededor de esa media estimada son sistemáticamente un poco demasiado pequeñas; dividir entre n − 1 lo corrige. Dado que tus datos casi siempre son una muestra de algo más grande, la versión con n − 1 es la que quieres. Si de verdad tienes la población completa (cada estudiante de la clase, cada producto del catálogo), multiplica: var(x) * (n - 1) / n.

Error estándar de la media

La desviación estándar y el error estándar se confunden constantemente, así que mantenlos separados: la sd describe los datos, el SE describe tu estimación de la media. R no tiene una se() incorporada, pero la fórmula es una línea:

El error estándar se reduce a medida que crece la muestra - recoge cuatro veces más datos y el SE se reduce a la mitad - porque una muestra más grande fija la media con más precisión. La sd no se reduce con el tamaño de la muestra; los coches son tan variados como son sin importar cuántos midas. El SE es el bloque de construcción de los intervalos de confianza, que es donde se gana el sueldo.

summary() - la visión general en una llamada

summary() te da el resumen de cinco números más la media de una sola vez, y funciona sobre data frames completos:

Llamado sobre un data frame, resume cada columna - las columnas numéricas reciben mín/cuartiles/media/máx, y los factores reciben recuentos por nivel. Es lo primero que hay que ejecutar sobre cualquier conjunto de datos recién cargado: los valores imposibles (una edad negativa, un máximo de 9999) saltan a la vista de inmediato.

Cuantiles, rango e IQR

quantile() generaliza la mediana a cualquier punto de corte:

Sin argumentos devuelve el mínimo, los cuartiles y el máximo. Pasa probs = para puntos de corte concretos - los percentiles 10 y 90 de arriba delimitan dónde vive el grueso de los datos. IQR() (la distancia entre los percentiles 25 y 75) es una medida de dispersión que, a diferencia de sd(), no se deja arrastrar por los valores atípicos. range() devuelve el mínimo y el máximo como una pareja.

La moda: mode() en R NO hace esto

Esta atrapa a todo el mundo exactamente una vez. R tiene una función llamada mode(), y no tiene nada que ver con la estadística - reporta el tipo de almacenamiento de un objeto:

El idiom que hay que recordar: table(x) cuenta cuántas veces aparece cada valor, which.max() encuentra el recuento más grande y names() extrae el valor en sí. Fíjate en que vuelve como una cadena de caracteres (los nombres de una tabla siempre lo son); envuélvelo en as.numeric() si necesitas calcular con él. Si dos valores empatan, which.max() devuelve en silencio solo el primero - revisa la tabla tú mismo cuando los empates sean plausibles.

Media vs mediana: cuál reportar

La media usa todos los valores, lo cual es su fortaleza y su debilidad - un solo valor extremo la arrastra. A la mediana solo le importa el centro, así que los valores atípicos apenas la tocan:

Un solo valor añadido empuja la media de unos 49,300 a más de 155,000 - un número que no describe a nadie en los datos - mientras que la mediana solo se mueve de 48,000 a 49,500. Por eso los ingresos, los precios de la vivienda y las estancias hospitalarias se reportan como medianas: los datos sesgados con una cola larga hacen que la media resulte engañosa. Para datos aproximadamente simétricos las dos coinciden y la media está bien (y es estadísticamente más eficiente). Un histograma rápido te dice en qué situación estás - y comparar tu media con tu mediana es en sí mismo una comprobación de sesgo de una línea.

Lo que te llevas

  • mean(x) y median(x) - añade na.rm = TRUE cuando haya valores faltantes.
  • sd(x) y var(x) calculan el estadístico muestral (el denominador n − 1) - que es lo que quieres.
  • El error estándar es sd(x) / sqrt(length(x)) - mide qué tan bien conoces la media, no cuán dispersos están los datos.
  • summary() sobre un data frame recién cargado es la comprobación de cordura más rápida de R.
  • La moda es names(which.max(table(x))) - mode() en R trata sobre tipos de almacenamiento.
  • Datos sesgados o con valores atípicos: reporta la mediana. Datos simétricos: la media está bien.

A continuación: medir cómo dos variables se mueven juntas - correlación con cor() y cor.test().

Preguntas frecuentes

¿Cómo se calcula la desviación estándar en R?

Con sd(x). Ten en cuenta que calcula la desviación estándar muestral - divide entre n − 1, no entre n. Eso es lo que quieres en casi cualquier análisis real, porque tus datos casi siempre son una muestra y no la población completa.

¿Cómo se obtienen la media y la mediana en R?

mean(x) y median(x). Si el vector contiene valores faltantes, ambas devuelven NA - añade na.rm = TRUE para calcular sobre los valores presentes: mean(x, na.rm = TRUE).

¿Cómo se encuentra la moda en R?

No con mode() - esa función devuelve el tipo de almacenamiento de un objeto, no el valor más frecuente. Usa en su lugar el idiom de la tabla: names(which.max(table(x))) devuelve el valor que aparece más veces.

¿Qué es el error estándar en R?

No hay una función incorporada. Calcúlalo como sd(x) / sqrt(length(x)). La desviación estándar describe la dispersión de tus datos; el error estándar describe con qué precisión has estimado la media, y se reduce a medida que crece la muestra.

Coddy programming languages illustration

Aprende a programar con Coddy

COMENZAR