library(dplyr)
Resumiendo datos
Resumir nuestros datos suele ser el primer paso en la exploración de datos y es necesario para comprender los patrones en la magnitud y variabilidad de nuestras mediciones.
Utilizaremos el paquete dplyr, que tiene muchas funciones convenientes para resumir datos, así que comencemos cargando el paquete.
Al igual que en la página de ayuda sobre Subconjunto de datos, utilizaremos un conjunto de datos en el que se muestrearon murciélagos en un bosque en regeneración del sureste de Australia que se había adelgazado para reducir la densidad de árboles. Descarga el conjunto de datos, Bats_data.csv, e impórtalo en R.
<- read.csv(file = "Bats_data.csv", header = T, stringsAsFactors = F) Bats
Resumir datos con dplyr
Obtener medidas resumidas de una sola variable
Podemos usar la función summarise
con una variedad de funciones resumen incorporadas de R para obtener estadísticas resumidas de nuestros datos.
Por ejemplo, para obtener la actividad media de los murciélagos en todas las mediciones nocturnas del estudio, usaría la función de resumen mean
dentro de la función summarise
de la siguiente manera, especificando el marco de datos (Bats), la variable de la que quiero obtener la media (Activity) y un nombre para la nueva variable (Mean.Activity):
summarise(Bats, Mean.Activity = mean(Activity))
Mean.Activity
1 316.0405
Podemos agregar tantas otras medidas como deseemos, incluyendo una amplia gama de funciones resumen (descritas con #).
summarise(Bats,
mean.activity = mean(Activity), # media
min.Activity = min(Activity), # mínimo
max.Activity = max(Activity), # máximo
med.Activity = median(Activity), # mediana
sd.Activity = sd(Activity), # desviación estándar
var.Activity = var(Activity), # varianza
n.Activity = n(), # tamaño de la muestra
se.Activity = sd.Activity / sqrt(n.Activity), # error estándar
IQR.Activity = IQR(Activity) # rango intercuartílico
)
mean.activity min.Activity max.Activity med.Activity sd.Activity var.Activity
1 316.0405 9 1070 282 203.1081 41252.89
n.Activity se.Activity IQR.Activity
1 173 15.44202 292
Si estamos analizando factores, especialmente si están ordenados de alguna manera, es posible que algunas de las otras funciones resumen de dplyr sean útiles. Por ejemplo:
summarise(Bats,
first.site = first(Site), # primer valor en la variable Site
last.Site = last(Site), # último valor en la variable Site
third.Site = nth(Site, 3), # valor n-ésimo de Site
n.Sites = n_distinct(Site) # número de sitios distintos
)
first.site last.Site third.Site n.Sites
1 CC02A1 KC33A2 CC02A1 47
Obteniendo medidas resumidas de grupos de filas
Muy a menudo estamos interesados en mediciones de valores promedio y variabilidad en diferentes categorías, por lo que necesitamos calcular medidas resumidas para variables dentro de cada categoría. Por ejemplo, en este conjunto de datos, es posible que deseemos comparar la actividad de murciélagos en diferentes bosques que varían en su historial de adelgazamiento. Los sitios pertenecen a cuatro categorías de historial de adelgazamiento: sitios de crecimiento denso que fueron adelgazados recientemente (“a corto plazo”) y a medio plazo (“a medio plazo”), sitios que nunca fueron adelgazados (“sin adelgazar”) y bosques abiertos maduros (“referencia”).
Para resumir cualquier variable para cada una de estas categorías, utilizamos la función group_by
en dplyr.
<- group_by(Bats, Treatment.thinned) Bats_by_Treatment
En orden de conservar nuestro conjunto de datos original tal como está, he utilizado la función para crear un nuevo conjunto de datos llamado “Bats_by_Treatment”. Ahora puedo utilizar exactamente el mismo código que usamos anteriormente para resumir los datos para cada uno de los grupos.
<- summarise(Bats_by_Treatment,
Treatment.summary mean.Activity = mean(Activity), # media
min.Activity = min(Activity), # mínimo
max.Activity = max(Activity), # máximo
med.Activity = median(Activity), # mediana
sd.Activity = sd(Activity), # desviación estándar
var.Activity = var(Activity), # varianza
n.Activity = n(), # tamaño de la muestra
se.Activity = sd.Activity / sqrt(n.Activity), # error estándar
IQR.Activity = IQR(Activity) # rango intercuartílico
)
Ten en cuenta que el marco de datos de entrada ahora es “Bats_by_Treatment”, en lugar de “Bats”.
Los nuevos datos resumidos se han colocado en un nuevo objeto (Treatment.summary), que pertenece a la clase “tbl” específica de dplyr. Para convertir esto a la clase de marco de datos más ampliamente utilizada, podemos usar as.data.frame
.
<- as.data.frame(Treatment.summary) Treatment.summary
Visualiza este nuevo marco de datos para ver las estadísticas resumidas para cada una de las cuatro categorías de bosque.
View(Treatment.summary)
También puedes combinar el agrupamiento y la sumarización en un código más ordenado utilizando el operador de tubería %>%
. Por ejemplo, el código anterior podría reemplazarse por:
<- Bats %>%
Treatment.summary group_by(Treatment.thinned) %>%
summarise(
mean.Activity = mean(Activity), # media
min.Activity = min(Activity), # mínimo
max.Activity = max(Activity), # máximo
med.Activity = median(Activity), # mediana
sd.Activity = sd(Activity), # desviación estándar
var.Activity = var(Activity), # varianza
n.Activity = n(), # tamaño de la muestra
se.Activity = sd.Activity / sqrt(n.Activity), # error estándar
IQR.Activity = IQR(Activity) # rango intercuartílico
)
Problemas con datos faltantes
Las cosas pueden salir mal en el campo y no siempre recopilamos todos los datos que necesitamos en cada sitio.
Para mostrarte cómo esto afecta a la función summarise
, podemos crear una nueva variable (Activity2), que es una copia de Activity pero con algunos de los datos de actividad (las primeras cuatro filas) ahora faltantes.
$Activity2 <- Bats$Activity
Bats$Activity2[1:4] <- rep(NA, 4) Bats
A continuación, intentemos resumir los datos:
summarise(Bats, mean.Activity = mean(Activity2))
mean.Activity
1 NA
Verás que obtenemos un NA como resultado. Para obtener la media de todos los valores que están presentes, podemos agregar un argumento, na.rm=TRUE
, para eliminar las filas que son NA.
summarise(Bats, mean.Activity = mean(Activity2, na.rm = TRUE))
mean.Activity
1 314.8757
Justo recuerda que esto disminuirá el tamaño de tu muestra. Esto funcionará para las funciones de resumen, excepto para la función n
que cuenta el número de valores en un vector. Para contar los datos no faltantes, puedes usar este fragmento de código (un poco más complicado) para obtener el nuevo tamaño de muestra.
length(Bats$Activity2[!is.na(Bats$Activity2)])
[1] 169
Esto calcula el número de valores, length
, del vector de valores de actividad de murciélagos, Bats$Activity2, donde no son NA, !is.na
. Revisar Subsetting data puede ayudarte a entender esta afirmación.
Comunicando los resultados
Escrito Si estuviéramos escribiendo un artículo sobre la actividad de murciélagos en diferentes tratamientos de adelgazamiento forestal, podríamos usar nuestros datos resumidos para hacer algunas observaciones generales al comienzo de nuestra sección de resultados, antes de un análisis más profundo. Por ejemplo: “Los murciélagos fueron dos veces más activos en bosques maduros abiertos (referencia) (365 ? 27) en comparación con el crecimiento regenerado no adelgazado (166 ? 21) (media ? EE). Sin embargo, la actividad de los murciélagos fue similar en los bosques adelgazados a mediano plazo (385 ? 36) y a corto plazo (350 ? 27) y en los bosques de referencia”.
Visual Presentar medias y errores estándar de datos categóricos nos brinda una forma de comunicar visualmente un efecto del tratamiento (siempre y cuando esté respaldado por un análisis estadístico adecuado). Aquí hemos utilizado el paquete ggplot2 para crear un gráfico de barras simple con medias ? error estándar (barras de error).
Ayuda adicional
Este tutorial se basó en el excelente Data wrangling with dplyr and tidyr cheat sheet producido por Rstudio. Las imágenes fueron obtenidas del mismo documento.
Puedes escribir ?dplyr
para obtener ayuda con este paquete.
Si deseas aprender más sobre el lenguaje ggplot para graficar, echa un vistazo a nuestras hojas de trabajo sobre gráficos, comenzando con Plotting with ggplot: the basics.
Autor: Rachel V. Blakey
Año: 2016
Última actualización: Nov. 2023