Wenn Sie wirklich gestapelte Balkendiagramme mit einer so großen Anzahl von Elementen verwenden möchten, gibt es zwei mögliche Lösungen.
Verwenden irutils
Ich bin vor einigen Monaten auf dieses Paket gestoßen.
Ab Commit 0573195c07 für Github funktioniert der Code nicht mit einem grouping=
Argument. Lassen Sie uns für die Debugging-Sitzung am Freitag gehen.
Laden Sie zunächst eine komprimierte Version von Github herunter. Sie müssen die R/likert.R
Datei hacken , insbesondere die Funktionen likert
und plot.likert
. Zuerst in likert
, cast()
verwendet wird , aber das reshape
Paket geladen werden nie (obwohl es eine import(reshape)
Anweisung in der NAMESPACE
Datei). Sie können dies vorher selbst laden. Zweitens gibt es eine falsche Anweisung zum Abrufen von Elementbezeichnungen, bei denen a i
um die Zeile 175 baumelt. Dies muss ebenfalls behoben werden, z. B. indem alle Vorkommen von likert$items[,i]
durch ersetzt werden likert$items[,1]
. Anschließend können Sie das Paket so installieren, wie Sie es auf Ihrem Computer gewohnt sind. Auf meinem Mac habe ich getan
% tar -czf irutils.tar.gz jbryer-irutils-0573195
% R CMD INSTALL irutils.tar.gz
Versuchen Sie dann mit R Folgendes:
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)
Das sollte funktionieren, aber das visuelle Rendern wird wegen der hohen Anzahl von Elementen schrecklich sein. Es funktioniert jedoch ohne Gruppierung (zB plot(likert(resp))
).
Ich würde daher vorschlagen, Ihren Datensatz auf kleinere Teilmengen von Elementen zu reduzieren. ZB mit 12 Artikeln,
plot(likert(resp[,1:12], grouping=grp))
Ich bekomme ein 'lesbares' gestapeltes Balkendiagramm. Sie können sie wahrscheinlich später verarbeiten. (Dies sind ggplot2
Objekte, aber Sie können sie gridExtra::grid.arrange()
aufgrund von Lesbarkeitsproblemen nicht auf einer einzigen Seite anordnen !)
Alternative Lösung
Ich möchte Ihre Aufmerksamkeit auf ein anderes Paket lenken, HH , mit dem Likert-Skalen als divergierende gestapelte Balkendiagramme dargestellt werden können. Wir könnten den obigen Code wie folgt wiederverwenden:
resp.likert <- likert(resp)
detach(package:irutils)
library(HH)
plot.likert(resp.likert$results[,-6]*82/100, main="")
Aber das wird die Sache ein wenig komplizieren, weil wir Frequenzen in Zählwerte umwandeln müssen, um likert
das von erzeugte Objekt zu unterteilenirutils
Paket trennen usw. Beginnen wir also erneut mit neuen (Zähl-) Statistiken:
plot.likert(t(apply(resp, 2, table)), main="", as.percent=TRUE,
rightAxisLabels=NULL, rightAxis=NULL, ylab.right="",
positive.order=TRUE)
Um eine Gruppierungsvariable zu verwenden, müssen Sie mit einem arbeiten array
numerischen Werten arbeiten.
# 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="")
Dadurch werden zwei separate Bedienfelder erstellt, die jedoch auf eine einzelne Seite passen.
Bearbeiten Sie 2016-6-3
- Zum jetzigen Stand likert als separates Paket erhältlich.
- Sie brauchen nicht neu zu gestalten Bibliothek oder beide lösen irutils und reshape