Как построить среднее значение и стандартную ошибку в Boxplot в R

У меня есть два категориальных фактора («Среда обитания» и «Местность») и одна непрерывная переменная (T). «Среда обитания» имеет два уровня, а «Местность» — восемь уровней. Я хочу изменить усы по умолчанию, чтобы они представляли SE, а медиану — в среднее значение для каждой диаграммы. Есть ли способ сделать это и учитывать оба категориальных фактора при построении графика? Спасибо заранее.

Это то, что я сделал с настройкой по умолчанию boxplot ggplot, показывающей первый и третий квартили со средними интервалами.

ggplot(data,aes(x=Locality,y=T)) + 
  geom_boxplot(aes(fill=interaction(Habitat,Locality), 
                   group=interaction(factor(Habitat),Locality)),
               outlier.shape=1,outlier.size=3) + 
  theme_bw() + 
  theme(
    panel.grid.major=element_blank(),
    panel.grid.minor=element_blank(),
    axis.line=element_line(colour='black'),
    legend.position='none',
    axis.text.x=element_text(angle=90,hjust=1,size=12)) + 
  scale_y_continuous('T') + 
  xlab('Locality')

person Amy WP Liu    schedule 23.09.2014    source источник


Ответы (2)


Сначала напишите функцию, которая вычисляет минимальное, среднее-1SEM, среднее, среднее+1SEM и максимальное значение. Затем сопоставьте эти 5 значений с блочной диаграммой, используя stat_summary.

library(gridExtra)
library(ggplot2)

MinMeanSEMMax <- function(x) {
  v <- c(min(x), mean(x) - sd(x)/sqrt(length(x)), mean(x), mean(x) + sd(x)/sqrt(length(x)), max(x))
  names(v) <- c("ymin", "lower", "middle", "upper", "ymax")
  v
}

g1 <- ggplot(mtcars, aes(factor(am), mpg)) + geom_boxplot() +
  ggtitle("Regular Boxplot")

g2 <- ggplot(mtcars, aes(factor(am), mpg)) +
  stat_summary(fun.data=MinMeanSEMMax, geom="boxplot", colour="red") + 
  ggtitle("Boxplot: Min, Mean-1SEM, Mean, Mean+1SEM, Max")


grid.arrange(g1, g2, ncol=2)

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

person Masato Nakazawa    schedule 23.09.2014
comment
Отличный ответ, спасибо. Как бы вы сделали то же самое, но с подгруппами? Например, если бы у вас были 0A, 0B, 1A и 1B на оси x? - person Mehdi.K; 13.02.2018

Я ожидаю, что это возможно, но также можно установить дорожный знак в виде красного восьмиугольника с надписью «Впереди повышенное ограничение скорости», я ожидаю, что оба будут более запутанными, чем полезными. Boxplot имеет стандартное определение того, что представляют части. Когда пользователь видит коробочную диаграмму, ему не нужно делать дополнительную умственную гимнастику, чтобы переосмыслить, что означают разные части. Почему бы не использовать другое представление, если вы не хотите представлять эти стандартные сводки. Функция/геометрия geom_crossbar или geom_errorbar может быть более подходящей для вашего дисплея (и, вероятно, проще в использовании, чем пытаться изменить геометрию коробчатой ​​диаграммы).

person Greg Snow    schedule 23.09.2014