Nếu bạn thực sự muốn sử dụng barcharts xếp chồng với số lượng lớn các mặt hàng như vậy, đây là hai giải pháp có thể.
Sử dụng irutils
Tôi đã đi qua gói này một vài tháng trước.
Kể từ khi cam kết 0573195c07 trên Github , mã sẽ không hoạt động với một grouping=
đối số. Hãy đi đến phiên gỡ lỗi vào thứ Sáu.
Bắt đầu bằng cách tải xuống phiên bản nén từ Github. Bạn sẽ cần hack R/likert.R
tệp, cụ thể là likert
và các plot.likert
chức năng. Đầu tiên, trong likert
, cast()
được sử dụng nhưng reshape
gói không bao giờ được tải (mặc dù có một import(reshape)
lệnh trong NAMESPACE
tệp). Bạn có thể tải cái này trước. Thứ hai, có một hướng dẫn không chính xác để lấy các nhãn vật phẩm, trong đó một cái i
lủng lẳng quanh dòng 175. Điều này cũng phải được sửa, ví dụ bằng cách thay thế tất cả các lần xuất hiện likert$items[,i]
bằng likert$items[,1]
. Sau đó, bạn có thể cài đặt gói theo cách bạn đã sử dụng để làm trên máy của mình. Trên máy Mac của tôi, tôi đã làm
% tar -czf irutils.tar.gz jbryer-irutils-0573195
% R CMD INSTALL irutils.tar.gz
Sau đó, với R, hãy thử như sau:
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)
Điều đó chỉ nên làm việc, nhưng kết xuất hình ảnh sẽ là khủng khiếp vì số lượng lớn các mặt hàng. Nó hoạt động mà không cần nhóm (ví dụ, plot(likert(resp))
), mặc dù.
Do đó tôi sẽ đề nghị giảm tập dữ liệu của bạn xuống các tập hợp con nhỏ hơn của các mục. Ví dụ: sử dụng 12 mục,
plot(likert(resp[,1:12], grouping=grp))
Tôi nhận được một barchart xếp chồng 'có thể đọc được'. Bạn có thể có thể xử lý chúng sau đó. (Đó là những ggplot2
đối tượng, nhưng bạn sẽ không thể sắp xếp chúng trên một trang gridExtra::grid.arrange()
vì vấn đề dễ đọc!)
Giải pháp thay thế
Tôi muốn thu hút sự chú ý của bạn vào một gói khác, HH , cho phép vẽ các thang đo Likert như các barcharts xếp chồng lên nhau. Chúng ta có thể sử dụng lại đoạn mã trên như hình dưới đây:
resp.likert <- likert(resp)
detach(package:irutils)
library(HH)
plot.likert(resp.likert$results[,-6]*82/100, main="")
nhưng điều đó sẽ làm phức tạp mọi thứ một chút vì chúng ta cần chuyển đổi tần số thành số đếm, tập hợp con likert
đối tượng được tạo ra irutils
, tách gói, v.v. Vì vậy, hãy bắt đầu lại với số liệu thống kê (đếm) mới:
plot.likert(t(apply(resp, 2, table)), main="", as.percent=TRUE,
rightAxisLabels=NULL, rightAxis=NULL, ylab.right="",
positive.order=TRUE)
Để sử dụng biến nhóm, bạn sẽ cần làm việc với một array
giá trị số.
# 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="")
Điều này sẽ tạo ra hai bảng riêng biệt, nhưng nó phù hợp trên một trang.
Chỉnh sửa 2016-6-3
- Cho đến bây giờ likeert có sẵn như là gói riêng biệt.
- Bạn không cần định hình lại thư viện hoặc tách cả irutils và định hình lại