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 ).
![insira a descrição da imagem aqui](https://i.stack.imgur.com/cXzrw.png)
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!)
![insira a descrição da imagem aqui](https://i.stack.imgur.com/TIFaO.png)
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)
![insira a descrição da imagem aqui](https://i.stack.imgur.com/zDV3w.png)
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.
![insira a descrição da imagem aqui](https://i.stack.imgur.com/xCKAG.png)
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