График нескольких переменных через ggplot2

Я хотел бы создать гистограмму, используя факторы и более двух переменных! Мои данные выглядят так:

     Var1 Var2 ... VarN Factor1 Factor2
Obs1  1-5 1-5  ... 1-5     
Obs2  1-5 1-5  ... ...
Obs3  ... ...  ... ...

Каждая точка данных представляет собой элемент Likert в диапазоне от 1 до 5.

Построение итоговых сумм с использованием дихотомической версии (каждый элемент выше 4 равен единице, иначе 0)

Я преобразовал данные, используя это

MyDataFrame = dichotomize(MyDataFrame,>=4)
p <- colSums(MyDataFrame)
p <- data.frame(names(p),p)
names(p) <- c("var","value")
ggplot(p,aes(var,value)) + geom_bar() + coord_flip()

введите здесь описание изображения

Делая это, я теряю информацию, предоставленную factor1 и т. Д., Я хотел бы использовать стек, чтобы визуализировать, от какой группы людей получен рейтинг.

Есть ли элегантное решение этой проблемы? Я читал об использовании reshape для плавления данных, а затем о применении ggplot?


person Jack Shade    schedule 05.02.2012    source источник
comment
Да, по сути, перекройка — это твой друг. Вам нужна одна переменная с результатом и одна переменная с меткой для этого результата.   -  person PaulHurleyuk    schedule 06.02.2012


Ответы (1)


Я бы предложил следующее: используйте один из ваших коэффициентов для укладки, другой - для огранки. Вы можете удалить position="fill" до geom_bar(), чтобы использовать счетчики вместо стандартизированных значений.

my.df <- data.frame(replicate(10, sample(1:5, 100, rep=TRUE)), 
                    F1=gl(4, 5, 100, labels=letters[1:4]), 
                    F2=gl(2, 50, labels=c("+","-")))
my.df[,1:10] <- apply(my.df[,1:10], 2, function(x) ifelse(x>4, 1, 0))
library(reshape2)
my.df.melt <- melt(my.df)
library(plyr)
res <- ddply(my.df.melt, c("F1","F2","variable"), summarize, sum=sum(value))
library(ggplot2)
ggplot(res, aes(y=sum, x=variable, fill=F1)) +
   geom_bar(stat="identity", position="fill") + 
   coord_flip() +
   facet_grid(. ~ F2) + 
   ylab("Percent") + xlab("Item")

введите здесь описание изображения

На приведенном выше рисунке я отобразил наблюдаемые частоты «1» (значение выше 4 по шкале Лайкерта) для каждой комбинации F1 (четыре уровня) и F2 (два уровня), где имеется 10 или 15 наблюдений:

> xtabs(~ F1 + F2, data=my.df)
   F2
F1   +  -
  a 15 10
  b 15 10
  c 10 15
  d 10 15

Затем я вычислил условные суммарные оценки элементов с помощью ddply,, используя «расплавленную» версию исходного data.frame. Я считаю, что остальные графические команды легко настраиваются, в зависимости от того, какую информацию вы хотите отобразить.

В этом упрощенном случае инструкция ddply эквивалентна with(my.df.melt, aggregate(value, list(F1=F1, F2=F2, variable=variable), sum)).

person chl    schedule 05.02.2012
comment
Это ДЕЙСТВИТЕЛЬНО приятно! Большое тебе спасибо - person Jack Shade; 06.02.2012