Почему ggplot не показывает полосу ошибок коробочного графика?

Я делал несколько диаграмм с помощью ggplot в R, и мне интересно, почему он не показывает панель ошибок только для одного блочного графика? введите здесь описание изображения Код был просто таким:

ID1.4.5.6.7[,"Time"] <- as.factor(ID1.4.5.6.7[,"Time"])
ggplot(data=ID1.4.5.6.7,aes(x=Time, y=mRNA, fill=Time)) +
  geom_boxplot(notch = TRUE) +
  
  stat_boxplot(geom="errorbar")+
  
  labs(title="mRNA vs Time", subtitle="Irradiated",x = "Time [min]",y = "mRNA")+
  theme(plot.title = element_text(hjust = 0.5),plot.subtitle = element_text(hjust = 0.5))

Я не знаю, связана ли проблема с кодом или это не проблема, а просто что-то, связанное с данными.

structure(list(Gene = c("ID-1", "ID-1", "ID-1", "ID-1", "ID-1", 
"ID-1", "ID-1", "ID-1", "ID-1", "ID-1", "ID-1", "ID-1", "ID-1", 
"ID-1", "ID-1", "ID-4", "ID-4", "ID-4", "ID-4", "ID-4", "ID-4", 
"ID-4", "ID-4", "ID-4", "ID-4", "ID-4", "ID-4", "ID-4", "ID-4", 
"ID-4", "ID-4", "ID-5", "ID-5", "ID-5", "ID-5", "ID-5", "ID-5", 
"ID-5", "ID-5", "ID-5", "ID-5", "ID-5", "ID-5", "ID-5", "ID-5", 
"ID-5", "ID-5", "ID-5", "ID-5", "ID-6", "ID-6", "ID-6", "ID-6", 
"ID-6", "ID-6", "ID-6", "ID-6", "ID-6", "ID-6", "ID-6", "ID-6", 
"ID-6", "ID-6", "ID-6", "ID-6", "ID-6", "ID-6", "ID-7", "ID-7", 
"ID-7", "ID-7", "ID-7", "ID-7", "ID-7", "ID-7", "ID-7", "ID-7", 
"ID-7", "ID-7", "ID-7", "ID-7", "ID-7", "ID-7", "ID-7", "ID-7"
), mRNA = c(-0.181385669, -0.059647494, 0.104476117, -0.052190978, 
-0.040484945, 0.194226742, -0.501601326, 0.102342605, -0.127143845, 
-0.008523742, -0.102946211, -0.042894028, 0.002922923, -0.134394347, 
-0.214204393, -0.138122686, 0.203242361, 0.097935502, 0.147068146, 
-0.089430917, 0.331565412, -0.034572422, -0.129896329, 0.324191, 
0.470108479, -0.027268223, 0.232304713, 0.090348708, 0.070848402, 
0.181540708, -0.502255367, -0.267631441, -0.368647839, -0.040910404, 
-0.003983171, -0.003983171, -0.003983171, -0.14980589, -0.119449612, 
-0.309154214, -0.487589361, 0.272803506, -0.421733575, -0.467108567, 
0.024868338, -0.156025729, -0.044680175, -0.206716896, -0.272014193, 
-0.230499883, -0.238597397, -0.118130949, 0.349957464, 0.349957464, 
0.349957464, 0.172048587, -0.186226994, 0.16113822, -0.293029136, 
-0.111636253, -0.044189887, 0.081555274, -0.048106079, -0.05853566, 
0.010407814, -0.066981809, -0.09828484, -0.315190986, -0.005102456, 
0.221556197, 0.206584568, 0.206584568, 0.206584568, 0.102649006, 
-0.011777384, -0.36963487, -0.054853074, -0.230240699, -0.210508323, 
-0.208889919, -0.050763372, 0.023073782, -0.095118984, -0.091076071, 
-0.330257395), Time = structure(c(2L, 2L, 2L, 3L, 3L, 2L, 3L, 
3L, 4L, 4L, 4L, 4L, 5L, 5L, 5L, 2L, 2L, 2L, 3L, 3L, 2L, 3L, 3L, 
4L, 4L, 4L, 4L, 5L, 5L, 5L, 5L, 2L, 2L, 2L, 1L, 1L, 1L, 3L, 3L, 
2L, 3L, 3L, 4L, 4L, 4L, 5L, 5L, 5L, 5L, 2L, 2L, 2L, 1L, 1L, 1L, 
3L, 3L, 2L, 3L, 3L, 4L, 4L, 4L, 4L, 5L, 5L, 5L, 2L, 2L, 2L, 1L, 
1L, 1L, 3L, 2L, 3L, 3L, 4L, 4L, 4L, 4L, 5L, 5L, 5L, 5L), .Label = c("0", 
"20", "40", "60", "120"), class = "factor"), predicted_mRNA = c(-0.00551000342030954, 
-0.00551000342030954, -0.00551000342030954, -0.0302695238715682, 
-0.0302695238715682, -0.00551000342030954, -0.0302695238715682, 
-0.0302695238715682, -0.0550290443228268, -0.0550290443228268, 
-0.0550290443228268, -0.0550290443228268, -0.129307605676603, 
-0.129307605676603, -0.129307605676603, -0.00551000342030954, 
-0.00551000342030954, -0.00551000342030954, -0.0302695238715682, 
-0.0302695238715682, -0.00551000342030954, -0.0302695238715682, 
-0.0302695238715682, -0.0550290443228268, -0.0550290443228268, 
-0.0550290443228268, -0.0550290443228268, -0.129307605676603, 
-0.129307605676603, -0.129307605676603, -0.129307605676603, -0.00551000342030954, 
-0.00551000342030954, -0.00551000342030954, 0.0192495170309491, 
0.0192495170309491, 0.0192495170309491, -0.0302695238715682, 
-0.0302695238715682, -0.00551000342030954, -0.0302695238715682, 
-0.0302695238715682, -0.0550290443228268, -0.0550290443228268, 
-0.0550290443228268, -0.129307605676603, -0.129307605676603, 
-0.129307605676603, -0.129307605676603, -0.00551000342030954, 
-0.00551000342030954, -0.00551000342030954, 0.0192495170309491, 
0.0192495170309491, 0.0192495170309491, -0.0302695238715682, 
-0.0302695238715682, -0.00551000342030954, -0.0302695238715682, 
-0.0302695238715682, -0.0550290443228268, -0.0550290443228268, 
-0.0550290443228268, -0.0550290443228268, -0.129307605676603, 
-0.129307605676603, -0.129307605676603, -0.00551000342030954, 
-0.00551000342030954, -0.00551000342030954, 0.0192495170309491, 
0.0192495170309491, 0.0192495170309491, -0.0302695238715682, 
-0.00551000342030954, -0.0302695238715682, -0.0302695238715682, 
-0.0550290443228268, -0.0550290443228268, -0.0550290443228268, 
-0.0550290443228268, -0.129307605676603, -0.129307605676603, 
-0.129307605676603, -0.129307605676603)), row.names = c(NA, -85L
), class = "data.frame")

Вот вывод (ID1.4.5.6.7), поэтому кадр данных.


person Manuela    schedule 12.09.2020    source источник
comment
Не могли бы вы dput(ID1.4.5.6.7) добавить к вопросу, чтобы помочь вам??   -  person Duck    schedule 12.09.2020
comment
Полоса ошибок есть, как вы можете видеть по вертикальной линии, проходящей через поле. Поэтому я предполагаю, что горизонтальные линии в конце полосы погрешностей пересекаются с контуром коробки.   -  person stefan    schedule 12.09.2020
comment
@stefan горизонтальные линии имеют значение Q1 + -1,5xIQR? Значит, это значение должно быть равно выбросам? Что вы имеете в виду, когда говорите схему?   -  person Manuela    schedule 12.09.2020
comment
... нижняя и верхняя границы прямоугольника. Кроме того. Я проверил ваш код на данных в вашем предыдущем посте, и все сработало нормально.   -  person stefan    schedule 12.09.2020
comment
@Duck, я добавил то, что ты просил   -  person Manuela    schedule 12.09.2020
comment
Я думаю, что такое поведение связано с использованием notch = TRUE, см. объяснение здесь   -  person starja    schedule 12.09.2020


Ответы (2)


Я бы предложил этот подход, при котором вы можете включить varwidth, чтобы увидеть панель ошибок. Вот код:

#Plot
ggplot(data=ID1.4.5.6.7,aes(x=Time, y=mRNA, fill=Time)) +
  geom_boxplot(varwidth = TRUE,notch=TRUE) +
  stat_boxplot(geom="errorbar")+
  labs(title="mRNA vs Time", subtitle="Irradiated",x = "Time [min]",y = "mRNA")+
  theme(plot.title = element_text(hjust = 0.5),plot.subtitle = element_text(hjust = 0.5))

Выход:

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

person Duck    schedule 12.09.2020

Потому что у коробчатых диаграмм нет планок погрешностей. Блочная диаграмма — это просто графическое представление пяти чисел: минимум, Q1 (1-й квартиль), медиана, Q3 (3-й квартиль) и максимум. Усы (полосы, идущие вверх и вниз) — это просто линии, оканчивающиеся минимальным значением в данных (нижнее) и максимальным значением (верхнее). Нижний край прямоугольника — Q1, а верхний край — Q3.

Группа данных может быть организована так, что минимум будет таким же, как Q1, а максимум будет таким же, как Q3. Более или менее похоже, что это то, что происходит в блок-графике, у которого нет усов. ggplot имеет некоторые дополнительные детали, добавленные к блочной диаграмме (втянутая талия и алгоритмическая настройка, которая приводит к возможности инверсии, которую вы видите в верхней части группы Time 0), но более или менее это кажется тем, что происходит.

Правка: кажется, что это вопрос о коде, но на самом деле он касается статистики. Это может быть лучше для перекрестной проверки (хотя я думаю, что сейчас, вероятно, достаточно ответа).

person D L Rogers    schedule 12.09.2020
comment
Я думаю, что реализация boxplot в ggplot2 не совсем такая, как вы описали: верхний ус расширяется от шарнира до наибольшего значения не дальше 1,5 * IQR от шарнира - person starja; 12.09.2020
comment
Существует два распространенных способа рисования «усов» на графиках «ящик» и «ус» (support. sas.com/documentation/onlinedoc/stat/131/boxplot.pdf). СКЕЛЕТНЫЙ ус простирается до максимального/минимального значения. Ус SCHEMATIC обычно увеличивает IQR в 1,5 раза (но вы можете настроить его с помощью аргумента geom_boxplot() coef. Тьюки выбрал 1,5x, потому что, если данные приблизительно распределены нормально, это должно охватывать около 95% данных. - person itsMeInMiami; 12.09.2020
comment
@starja and itsMeinMiami: Да, в своем ответе я пару раз упомянул правило 1,5 IQR, но ОП считает, что у блочных диаграмм есть планки погрешностей, поэтому я не хотел добавлять слишком много деталей, просто чтобы подчеркнуть, что их блочная диаграмма не сломанный; это, вероятно, точно показывает данные. Ожидание баров ошибок было проблемой; как только OP поймет, что усы не являются планками ошибок, я надеюсь, что большая часть этого вопроса будет решена. Вопрос был основан на непонимании концепции статистики/графика, а не на проблеме с кодом. - person D L Rogers; 12.09.2020