Dominando la función summarise_at(). Media ponderada con R en el ecosistema Tidyverse.
Analizando datos de encuesta usando R. Dominando la función de Tidyverse summarise_at() para conseguir métricas y estadísticos agregados. ¡Echa un vistazo!
Imagina que estas analizando datos obtenidos en encuestas. Quizá no hace falta que imagines y es realmente tu caso. Cuando tratamos de sacar estadísiticos de la distribución que siguen las respuestas, como la media, solemos hacerlo de una manera representativa, es decir, ponderando las respuestas dependiendo del número de individuos pertenecientes a un segmento.
Es cierto que en R se encuentra la función weigthed.mean() y puede ser util en determinados casos. Pero, ¿y qué pasa si aun no tienes calculados los pesos y almacenados como vector o columna? Incluso más importante, ¿qué pasa si quieres utilizar otra función de agregación que no sea la media?
Aquí ofrecemos nuestra versión donde conseguimos obtener tanto los pesos como la agregación(de manera flexible, media u otra función) de manera ponderada:
library(tidyverse)
survey_data <- tribble( # Creamos el dataset
~id, ~region1, ~region2, ~gender, ~q1, ~q2,
1,"sp","mad","m", 2,5,
2,"it", "bol", "m", 5, 10,
3,"sp", "bar", "f", 2, 2,
4,"sp", "bar", "f", 7, 7,
5,"it", "bol", "m", 2, 7)
survey_data %>%
group_by(region1, region2, gender) %>% # Elegimos nuestros segmentos
mutate(weight = 1/n()) %>% # Calculamos los pesos
ungroup() %>% # Una vez calculados desagrupamos
summarise_at(vars(contains("q")), # Son preguntas columnas que empiezan por q
funs(weighted_mean = # Elegimos como funcion de agregación la media
sum(. * weight)/sum(weight)))
q1_weighted_mean | q2_weighted_mean |
---|---|
3.333333 | 6 |