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.R
plik, w szczególności funkcje likert
i plot.likert
. Najpierw używana jest funkcja in likert
, cast()
ale reshape
pakiet nigdy nie jest ładowany (chociaż import(reshape)
w NAMESPACE
pliku znajduje się instrukcja ). Możesz to załadować wcześniej. Po drugie, jest błędny dyspozycja sprowadzić pozycje etykiet, gdzie i
jest 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 ggplot2
obiekty, 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 likert
wytworzonego 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 array
wartoś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ć