Si realmente desea utilizar gráficos de barras apilados con una cantidad tan grande de elementos, aquí hay dos posibles soluciones.
Utilizando irutils
Encontré este paquete hace unos meses.
A partir de la confirmación 0573195c07 en Github , el código no funcionará con un grouping=
argumento. Vayamos a la sesión de depuración del viernes.
Comience descargando una versión comprimida de Github. Tendrá que hackear el R/likert.R
archivo, específicamente las funciones likert
y plot.likert
. Primero, se usa in likert
, cast()
pero el reshape
paquete nunca se carga (aunque hay una import(reshape)
instrucción en el NAMESPACE
archivo). Puede cargar esto usted mismo de antemano. En segundo lugar, hay una instrucción incorrecta para buscar etiquetas de elementos, donde a i
está colgando alrededor de la línea 175. Esto también debe corregirse, por ejemplo, reemplazando todas las ocurrencias de likert$items[,i]
con likert$items[,1]
. Luego puede instalar el paquete de la forma en que está acostumbrado en su máquina. En mi Mac, lo hice
% tar -czf irutils.tar.gz jbryer-irutils-0573195
% R CMD INSTALL irutils.tar.gz
Luego, con R, intente lo siguiente:
library(irutils)
library(reshape)
# Simulate some data (82 respondents x 66 items)
resp <- data.frame(replicate(66, sample(1:5, 82, replace=TRUE)))
resp <- data.frame(lapply(resp, factor, ordered=TRUE,
levels=1:5,
labels=c("Strongly disagree","Disagree",
"Neutral","Agree","Strongly Agree")))
grp <- gl(2, 82/2, labels=LETTERS[1:2]) # say equal group size for simplicity
# Summarize responses by group
resp.likert <- likert(resp, grouping=grp)
Eso debería funcionar, pero la representación visual será horrible debido a la gran cantidad de elementos. Sin plot(likert(resp))
embargo, funciona sin agrupación (por ejemplo, ).
Por lo tanto, sugeriría reducir su conjunto de datos a subconjuntos más pequeños de elementos. Por ejemplo, usando 12 artículos,
plot(likert(resp[,1:12], grouping=grp))
Me sale un gráfico de barras "legible". Probablemente puedas procesarlos después. (Esos son ggplot2
objetos, ¡pero no podrá organizarlos en una sola página gridExtra::grid.arrange()
debido a un problema de legibilidad!)
Solución alternativa
Me gustaría llamar su 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 a conteos, subconjunto del likert
objeto producido por irutils
, separar paquete, etc. Así que comencemos nuevamente con estadísticas nuevas (conteos):
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, deberá trabajar con array
valores numéricos.
# compute responses frequencies separately by 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 cabe en una sola página.
Editar 2016-6-3
- A partir de ahora, likert está disponible como paquete separado.
- No necesita reformar la biblioteca ni desconectar irutils y remodelar