Si realmente quieres usar gráficos de barras apiladas con una gran cantidad de elementos, aquí tienes dos posibles soluciones.
Usando irutils
Me encontré con este paquete hace unos meses.
A partir de la confirmación 0573195c07 en Github, el código no funcionará con un argumento grouping=
. Vamos a por la sesión de depuración del viernes.
Empieza descargando una versión comprimida desde Github. Necesitarás modificar el archivo R/likert.R
, específicamente las funciones likert
y plot.likert
. Primero, en likert
, se usa cast()
pero el paquete reshape
nunca se carga (aunque hay una instrucción import(reshape)
en el archivo NAMESPACE
). Puedes cargarlo tu mismo antes. Segundo, hay una instrucción incorrecta para obtener etiquetas de elementos, donde hay una i
que sobra alrededor de la línea 175. Esto también debe corregirse, por ejemplo, reemplazando todas las apariciones de likert$items[,i]
por likert$items[,1]
. Luego puedes instalar el paquete como estás acostumbrado en tu máquina. En mi Mac, hice lo siguiente:
% tar -czf irutils.tar.gz jbryer-irutils-0573195
% R CMD INSTALL irutils.tar.gz
Luego, con R, prueba lo siguiente:
library(irutils)
library(reshape)
# Simula algunos datos (82 encuestados x 66 elementos)
resp <- data.frame(replicate(66, sample(1:5, 82, replace=TRUE)))
resp <- data.frame(lapply(resp, factor, ordered=TRUE,
levels=1:5,
labels=c("Totalmente en desacuerdo","En desacuerdo",
"Neutral","De acuerdo","Totalmente de acuerdo")))
grp <- gl(2, 82/2, labels=LETTERS[1:2]) # supongamos un tamaño de grupo igual por simplicidad
# Resumir respuestas por grupo
resp.likert <- likert(resp, grouping=grp)
Eso debería funcionar sin problemas, pero la representación visual será horrible debido al gran número de elementos. Funciona sin agrupación (por ejemplo, plot(likert(resp))
).
Por lo tanto, sugiero reducir tu conjunto de datos a subconjuntos más pequeños de elementos. Por ejemplo, usando 12 elementos,
plot(likert(resp[,1:12], grouping=grp))
Obtengo un gráfico de barras apiladas 'legible'. Probablemente puedas procesarlos después. (Esos son objetos ggplot2
, pero no podrás organizarlos en una sola página con gridExtra::grid.arrange()
debido a problemas de legibilidad!)
Solución alternativa
Me gustaría llamar tu atención sobre otro paquete, HH, que permite trazar escalas Likert como gráficos de barras apiladas divergentes. Podríamos reutilizar el código anterior como se muestra a continuación:
resp.likert <- likert(resp)
detach(package:irutils)
library(HH)
plot.likert(resp.likert$results[,-6]*82/100, main="")
pero eso complicará un poco las cosas porque necesitamos convertir frecuencias en recuentos, seleccionar el objeto likert
producido por irutils
, desasociar el paquete, etc. Entonces comencemos de nuevo con estadísticas frescas (recuentos):
plot.likert(t(apply(resp, 2, table)), main="", as.percent=TRUE,
rightAxisLabels=NULL, rightAxis=NULL, ylab.right="",
positive.order=TRUE)
Para usar una variable de agrupación, necesitarás trabajar con una array
de valores numéricos.
# calcular frecuencias de respuestas por separado por grp
resp.array <- array(NA, dim=c(66, 5, 2))
resp.array[,,1] <- t(apply(subset(resp, grp=="A"), 2, table))
resp.array[,,2] <- t(apply(subset(resp, grp=="B"), 2, table))
dimnames(resp.array) <- list(NULL, NULL, group=levels(grp))
plot.likert(resp.array, layout=c(2,1), main="")
Esto producirá dos paneles separados, pero caben en una sola página.
Editar 2016-6-3
- A partir de ahora likert está disponible como un paquete separado.
- No necesitas la librería reshape o desasociar tanto irutils como reshape
1 votos
Hola Adam, para aclarar aún más, ¿querías usar las visualizaciones para mostrar diferencias entre los grupos? Si es así, ese no es un método recomendado.
0 votos
El paquete de Jason Bryer no solía funcionar para mí, pero creo que lo actualizó y ahora está funcionando de maravilla. También agregué una solicitud de extracción con una función adicional para almacenar los nombres de las columnas como atributos y grupos. Utilizando esto, puedo visualizar fácilmente un cuestionario Likert de 45 preguntas dividido en grupos, incluso dividido contra otra variable si así lo elijo. (Genero la salida usando knitr, por lo que termina con muchos subgráficos en un sitio web, no un solo gráfico gigante). Hice una descripción detallada aquí: reganmian.net/blog/2013/10/02/...
0 votos
Solo para tu información, para aquellos de ustedes que estén leyendo estas respuestas en el futuro, parece que algunas de las características y funcionalidades de irutils relacionadas con los datos de Likert se han trasladado al paquete R de Likert (ver CRAN aquí).
0 votos
El enlace bryer.org/2011/visualizing-likert-items parece estar roto. Se agradecería una corrección o reemplazo.
1 votos
Este tipo de pregunta, con su fuerte enfoque en código específico, es menos bienvenida en 2018 que en 2012. A pesar de eso, algunas referencias cruzadas para cualquier persona interesada son stats.stackexchange.com/questions/56322/… y stats.stackexchange.com/questions/148554/…