Jeśli naprawdę chcesz używać skumulowanych wykresów słupkowych z tak dużą liczbą przedmiotów, oto dwa możliwe rozwiązania.
Za pomocą irutils
Kilka miesięcy temu natknąłem się na ten pakiet.
Począwszy od zatwierdzenia 0573195c07 w Github , kod nie będzie działał z grouping=argumentem. Chodźmy na piątkową sesję debugowania.
Zacznij od pobrania skompresowanej wersji z Github. Musisz zhakować R/likert.Rplik, w szczególności funkcje likerti plot.likert. Najpierw używana jest funkcja in likert, cast()ale reshapepakiet nigdy nie jest ładowany (chociaż import(reshape)w NAMESPACEpliku znajduje się instrukcja ). Możesz to załadować wcześniej. Po drugie, jest błędny dyspozycja sprowadzić pozycje etykiet, gdzie ijest zwisające wokół linii 175. To musi być stała, a także, na przykład poprzez zastąpienie wszystkich wystąpień likert$items[,i]z likert$items[,1]. Następnie możesz zainstalować pakiet w sposób, w jaki jesteś przyzwyczajony na swoim komputerze. Na moim komputerze Mac tak zrobiłem
% tar -czf irutils.tar.gz jbryer-irutils-0573195
% R CMD INSTALL irutils.tar.gz
Następnie, używając R, spróbuj wykonać następujące czynności:
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)
To powinno po prostu działać, ale renderowanie wizualne będzie okropne z powodu dużej liczby elementów. Działa jednak bez grupowania (np. plot(likert(resp))).

Proponuję zatem zredukować zestaw danych do mniejszych podzbiorów pozycji. Np. Używając 12 przedmiotów
plot(likert(resp[,1:12], grouping=grp))
Dostaję „czytelny” skumulowany wykres słupkowy. Prawdopodobnie możesz je później przetworzyć. (Są to ggplot2obiekty, ale z gridExtra::grid.arrange()powodu problemów z czytelnością nie będziesz w stanie rozmieścić ich na jednej stronie !)

Alternatywne rozwiązanie
Chciałbym zwrócić uwagę na inny pakiet, HH , który pozwala na wykreślanie skal Likerta jako rozbieżnych stosów wykresów słupkowych. Możemy ponownie użyć powyższego kodu, jak pokazano poniżej:
resp.likert <- likert(resp)
detach(package:irutils)
library(HH)
plot.likert(resp.likert$results[,-6]*82/100, main="")
ale to trochę skomplikuje, ponieważ musimy przekonwertować częstotliwości na liczby, podzbiór likertwytworzonego obiektu irutils, odłączyć pakiet itp. Zacznijmy więc od świeżych (zliczających) statystyk:
plot.likert(t(apply(resp, 2, table)), main="", as.percent=TRUE,
rightAxisLabels=NULL, rightAxis=NULL, ylab.right="",
positive.order=TRUE)

Aby użyć zmiennej grupującej, musisz pracować z arraywartościami liczbowymi.
# 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="")
Spowoduje to utworzenie dwóch oddzielnych paneli, ale zmieści się na jednej stronie.

Edytuj 2016-6-3
- Obecnie likert jest dostępny jako osobny pakiet.
- Nie trzeba przekształcać biblioteki ani odłączać zarówno irutils, jak i przekształcać