укажите планки ошибок с помощью ggplot и facet_grid

Я построил график с facet_grid, чтобы визуализировать процентное содержание лития в каждой группе на лечение в каждый день.

library(ggplot2)
library(Rmisc) 
library(plyr)

mus2 <- summarySE(mus, measurevar="litium", 
                         groupvars=c("treatment", "group", "day"), na.rm = TRUE)

mus2

mus3 <- mus2
mus3$group <- factor(mus3$group)

ms.chl<- ggplot(mus3, aes(x=group, y=litium, fill=treatment)) +
  geom_bar(stat="identity", colour="black") + facet_grid(~day) + theme_bw() 
ms.chl

в результате этого:

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

Для этого у меня две проблемы:

Я не могу сделать правильные шкалы ошибок для содержания лития НА ГРУППУ. Я пробовал это, но получаю только шкалы ошибок за обработку.

ms.chl + geom_errorbar(aes(ymin=litium-se, ymax=litium+se), size=0.5,   
        width=.25,                    
        position=position_dodge(.9)) +
facet_grid(~day)

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

Я хотел бы получить шкалы ошибок из общей суммы каждой группы

и после этого мой второй вопрос: можно ли представить абсолютное значение для каждой группы и процент только для каждого лечения?

Набор данных (mus):

litium  group   treatment   day
0.009439528 1   Control day1
0.005115057 1   Control day1
0.009742297 1   Control day1
0.016515625 2   Control day1
0.01074537  2   Control day1
0.016300836 2   Control day1
0.009538339 3   Control day1
0.010609746 3   Control day1
0.008928012 3   Control day1
0.009425325 1   Control + bird  day1
0.00561831  1   Control + bird  day1
0.014622517 1   Control + bird  day1
0.017702439 2   Control + bird  day1
0.010545045 2   Control + bird  day1
0.029109907 2   Control + bird  day1
0.013737568 3   Control + bird  day1
0.015174405 3   Control + bird  day1
0.014583832 3   Control + bird  day1
0.009244079 1   Control day2
0.006591033 1   Control day2
0.007592587 1   Control day2
0.013676745 2   Control day2
0.016208676 2   Control day2
0.017593952 2   Control day2
0.014003037 3   Control day2
0.01163581  3   Control day2
0.011643067 3   Control day2
0.009229506 1   Control + bird  day2
0.006423714 1   Control + bird  day2
0.008653163 1   Control + bird  day2
0.012441379 2   Control + bird  day2
0.0204346   2   Control + bird  day2
0.010017788 2   Control + bird  day2
0.009745063 3   Control + bird  day2
0.00967963  3   Control + bird  day2
0.010291306 3   Control + bird  day2
0.009466604 1   Fence   day2
0.019611081 2   Fence   day2
0.006796444 2   Fence   day2
0.018928695 2   Fence   day2
0.007787736 3   Fence   day2
0.009409897 3   Fence   day2

person kumbu    schedule 29.09.2015    source источник


Ответы (1)


Первым и самым простым решением было бы расположить столбик рядом, а не складывать его в стопку. Тогда единственное, что вам нужно изменить в вашем коде, - это добавить position="dodge" в ваш geom_bar() и запустить остальную часть вашего кода в том виде, в каком он у вас есть. Это дает дополнительное преимущество, так как позволяет напрямую сравнивать высоту различных полос и позволяет избежать размещения полос ошибок в середине полосы.

ms.chl<- ggplot(mus3, aes(x=group, y=litium, fill=treatment)) +
  geom_bar(stat="identity", colour="black",position="dodge") + 
  facet_grid(~day) + theme_bw() 
ms.chl + geom_errorbar(aes(ymin=litium-se, ymax=litium+se), size=0.5,   
    width=.25,position=position_dodge(.9)) +
  facet_grid(~day)

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

Чтобы добавить планки погрешностей на гистограмму с накоплением, вы должны убедиться, что столбцы центрированы на кумулятивной сумме litium. Для этого вы можете использовать cumsum() в ave():

mus3 <- within(mus3,lit2 <- ave(litium,group,day,FUN=cumsum))

Затем используйте lit2 вместо litium при вызове geom_errorbar() и не уворачивайтесь.

ms.chl<- ggplot(mus3, aes(x=group, y=litium, fill=treatment)) +
  geom_bar(stat="identity", colour="black") + facet_grid(~day) + theme_bw() 

ms.chl + geom_errorbar(aes(ymin=lit2-se, ymax=lit2+se), size=0.5,   
                       width=.25) + facet_grid(~day)

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

И если вам просто нужны планки ошибок для группы, тогда вам нужно получить ошибки для всей группы, а не для группы в рамках лечения, но вы не можете просто добавить это прямо к средним, основанным на всей группе, потому что эти являются средними, а линейчатая диаграмма с накоплением имеет сумму средних, поэтому вам нужно суммировать средние из mus3.

musgroup <- summarySE(mus, measurevar="litium", 
                      groupvars=c("group", "day"), na.rm = TRUE)

musgroupsum <- ddply(mus3,.(group,day),summarize,lit2 = sum(litium))

mus4 <- merge(musgroup,musgroupsum)

ms.chl<- ggplot() +
  geom_bar(data=mus3, aes(x=group, y=litium, fill=treatment),
           stat="identity", colour="black") + facet_grid(~day) + theme_bw() 

ms.chl + geom_errorbar(data=mus4,aes(x=group,ymin=lit2-se, ymax=lit2+se),
                       size=0.5, width=.25)

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

Однако в этот момент это начинает становиться немного бессмысленным. Сложенные средние не являются средними значениями группы - они представляют собой сумму средних значений группы, но ошибка относится к среднему значению группы. Когда вы посмотрите на рисунок, полосы ошибок будут казаться меньше по сравнению со средним значением, которое они представляют, потому что они центрированы намного выше, чем они должны быть. Похоже, что вы ищете представление о групповом значении, которое позволяет вам увидеть вклад каждого из методов лечения в это групповое значение. Один из способов показать это - масштабировать размер столбчатой ​​диаграммы так, чтобы кумулятивная сумма была сосредоточена на правильном среднем значении для каждой из групп.

mus3 <- within(mus3,lit3 <- ave(litium,group,day,FUN=function(x) x/length(x)))

ms.chl<- ggplot() +
  geom_bar(data=mus3, aes(x=group, y=lit3, fill=treatment),
           stat="identity", colour="black") + facet_grid(~day) +
  theme_bw() + ylab("litium")

ms.chl + geom_errorbar(data=mus4,aes(x=group,ymin=litium-se, ymax=litium+se),
                       size=0.5,width=.25)

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

person Sam Dickson    schedule 29.09.2015
comment
Спасибо за ваш ответ, но для каждой группы мне нужен только один столбец, чтобы общее количество литиумов на группу было отображено на столбчатой ​​диаграмме. Обработки должны быть частью этого столбца, чтобы я мог видеть, в какой пропорции они вносят вклад в общий литий. Итак, резюмируя, мне понадобятся шкалы ошибок для общего количества литиумов каждой группы, а не для каждого лечения. - person kumbu; 29.09.2015
comment
Я обновился, чтобы предложить несколько различных решений. Я надеюсь, что один из них сработает для вас или поможет найти нужное решение. - person Sam Dickson; 29.09.2015