Если вы действительно хотите использовать составные столбцы с таким большим количеством элементов, вот два возможных решения.
С помощью irutils
Я столкнулся с этим пакетом несколько месяцев назад.
Начиная с комита 0573195c07 на Github , код не будет работать с grouping=
аргументом. Давайте пойдем на сессию отладки в пятницу.
Начните с загрузки заархивированной версии с Github. Вам нужно взломать R/likert.R
файл, в частности likert
и plot.likert
функции. Сначала используется in 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 и Reshape