Se vuoi davvero usare i grafici a barre in pila con un numero così elevato di elementi, ecco due possibili soluzioni.
utilizzando irutils
Mi sono imbattuto in questo pacchetto alcuni mesi fa.
A partire dal commit 0573195c07 su Github , il codice non funzionerà con agrouping=
argomento. Andiamo per la sessione di debug di venerdì.
Inizia scaricando una versione zippata da Github. Dovrai hackerare il R/likert.R
file, in particolare le funzioni likert
e plot.likert
. Innanzitutto, viene utilizzato in likert
, cast()
ma il reshape
pacchetto non viene mai caricato (anche se import(reshape)
nel NAMESPACE
file è presente un'istruzione ). Puoi caricarlo tu stesso in anticipo. In secondo luogo, c'è un'istruzione errata per recuperare le etichette degli oggetti, dove a i
è penzolante intorno alla linea 175. Anche questo deve essere corretto, ad esempio sostituendo tutte le occorrenze di likert$items[,i]
con likert$items[,1]
. Quindi puoi installare il pacchetto nel modo in cui sei abituato a fare sul tuo computer. Sul mio Mac, l'ho fatto
% tar -czf irutils.tar.gz jbryer-irutils-0573195
% R CMD INSTALL irutils.tar.gz
Quindi, con R, prova quanto segue:
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)
Dovrebbe funzionare, ma il rendering visivo sarà terribile a causa dell'elevato numero di elementi. Funziona senza raggruppamento (ad esempio, plot(likert(resp))
), però.
Vorrei quindi suggerire di ridurre il set di dati a sottoinsiemi di elementi più piccoli. Ad esempio, utilizzando 12 articoli,
plot(likert(resp[,1:12], grouping=grp))
Ottengo un grafico a barre in pila "leggibile". Probabilmente puoi elaborarli in seguito. (Quelli sono ggplot2
oggetti, ma non sarai in grado di disporli su un'unica pagina a gridExtra::grid.arrange()
causa del problema di leggibilità!)
Soluzione alternativa
Vorrei attirare la vostra attenzione su un altro pacchetto, HH , che consente di tracciare le scale Likert come diagrammi a barre impilati divergenti. Potremmo riutilizzare il codice sopra come mostrato di seguito:
resp.likert <- likert(resp)
detach(package:irutils)
library(HH)
plot.likert(resp.likert$results[,-6]*82/100, main="")
ma ciò complicherà un po 'le cose perché dobbiamo convertire le frequenze in conteggi, sottoinsiemare l' likert
oggetto prodotto da irutils
, staccare il pacchetto, ecc. Quindi ricominciamo con nuove statistiche (conteggi):
plot.likert(t(apply(resp, 2, table)), main="", as.percent=TRUE,
rightAxisLabels=NULL, rightAxis=NULL, ylab.right="",
positive.order=TRUE)
Per usare una variabile di raggruppamento, dovrai lavorare con uno array
di valori numerici.
# 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="")
Ciò produrrà due pannelli separati, ma si adatta a una singola pagina.
Modifica 2016-6-3
- A partire da ora likert è disponibile come pacchetto separato.
- Non hai bisogno di rimodellare la libreria o staccare sia irutils che rimodellare