如果您真的想将堆叠的条形图与大量物品一起使用,则有两种可能的解决方案。
使用 irutils
几个月前,我遇到了这个包裹。
从Github上的 0573195c07提交开始,该代码将无法使用grouping=
参数。让我们去参加周五的调试会议。
首先从Github下载压缩版本。您需要修改R/likert.R
文件,特别是likert
and plot.likert
函数。首先,使用中的likert
,cast()
但从reshape
不加载程序包(尽管文件中有import(reshape)
指令NAMESPACE
)。您可以自己预先加载。其次,还有一个不正确的指令来获取物品的标签,其中一个i
被替换所有出现的晃来晃去各地线175这已被固定为好,如likert$items[,i]
用likert$items[,1]
。然后,您可以按照惯常的方式在计算机上安装软件包。在Mac上,我做了
% tar -czf irutils.tar.gz jbryer-irutils-0573195
% R CMD INSTALL irutils.tar.gz
然后,使用R,尝试以下操作:
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)
那应该就可以了,但是由于项目数量很大,视觉渲染效果会很糟糕。但是,它无需分组(例如plot(likert(resp))
)即可工作。
因此,我建议将您的数据集减少为较小的项子集。例如,使用12个项目,
plot(likert(resp[,1:12], grouping=grp))
我得到了一个“可读”的堆叠条形图。您可能以后可以处理它们。(这些是ggplot2
对象,但是gridExtra::grid.arrange()
由于可读性问题,您将无法将它们排列在单个页面上!)
替代解决方案
我想在另一个包HH上引起您的注意,该包允许将李克特量表绘制为发散的堆叠条形图。我们可以重用上面的代码,如下所示:
resp.likert <- likert(resp)
detach(package:irutils)
library(HH)
plot.likert(resp.likert$results[,-6]*82/100, main="")
但这会使事情复杂化,因为我们需要将频率转换为计数,likert
将由产生的对象进行子集化irutils
,分离包装等。因此,让我们从新的(计数)统计数据开始:
plot.likert(t(apply(resp, 2, table)), main="", as.percent=TRUE,
rightAxisLabels=NULL, rightAxis=NULL, ylab.right="",
positive.order=TRUE)
要使用分组变量,您需要使用array
数值。
# 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="")
这将产生两个单独的面板,但可放在单个页面上。
编辑2016-6-3
- 截至目前,likert可以单独购买。
- 您不需要重塑库或分离irutils和重塑