Se você realmente deseja usar gráficos de barras empilhados com um número tão grande de itens, aqui estão duas soluções possíveis.
Usando irutils
Me deparei com este pacote há alguns meses.
A partir do commit 0573195c07 no Github , o código não funcionará com um grouping=
argumento. Vamos para a sessão de depuração de sexta-feira.
Comece baixando uma versão compactada do Github. Você precisará hackear o R/likert.R
arquivo, especificamente as funções likert
e plot.likert
. Primeiro, in likert
, cast()
é usado, mas o reshape
pacote nunca é carregado (embora exista uma import(reshape)
instrução no NAMESPACE
arquivo). Você pode carregar isso você mesmo com antecedência. Segundo, há uma instrução incorreta para buscar rótulos de itens, onde a i
está oscilando em torno da linha 175. Isso também deve ser corrigido, por exemplo, substituindo todas as ocorrências de likert$items[,i]
por likert$items[,1]
. Em seguida, você pode instalar o pacote da maneira que costumava fazer na sua máquina. No meu Mac, eu fiz
% tar -czf irutils.tar.gz jbryer-irutils-0573195
% R CMD INSTALL irutils.tar.gz
Em seguida, com R, tente o seguinte:
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)
Isso deve funcionar, mas a renderização visual será péssima por causa do alto número de itens. plot(likert(resp))
Porém, ele funciona sem agrupar (por exemplo ).
Sugiro, portanto, reduzir seu conjunto de dados para subconjuntos menores de itens. Por exemplo, usando 12 itens,
plot(likert(resp[,1:12], grouping=grp))
Recebo um gráfico de barras empilhado 'legível'. Você provavelmente pode processá-los depois. (Esses são ggplot2
objetos, mas você não poderá organizá-los em uma única página gridExtra::grid.arrange()
devido a um problema de legibilidade!)
Solução alternativa
Gostaria de chamar sua atenção para outro pacote, HH , que permite plotar escalas Likert como gráficos de barras empilhadas divergentes. Poderíamos reutilizar o código acima, como mostrado abaixo:
resp.likert <- likert(resp)
detach(package:irutils)
library(HH)
plot.likert(resp.likert$results[,-6]*82/100, main="")
mas isso vai complicar um pouco as coisas porque precisamos converter frequências em contagens, definir subconjuntos likert
objeto produzido por irutils
, desanexar pacote, etc. Então, vamos começar novamente com estatísticas novas (contagens):
plot.likert(t(apply(resp, 2, table)), main="", as.percent=TRUE,
rightAxisLabels=NULL, rightAxis=NULL, ylab.right="",
positive.order=TRUE)
Para usar uma variável de agrupamento, você precisará trabalhar com 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="")
Isso produzirá dois painéis separados, mas cabe em uma única página.
Editar 2016-6-3
- A partir de agora likert está disponível como pacote separado.
- Você não precisa remodelar a biblioteca ou desconectar os irutils e remodelar