Указание статистически значимой разницы в гистограмме. ИСПОЛЬЗОВАНИЕ R

Это повторение вопроса, заданного здесь: Указание статистически значимой разницы в столбчатой ​​диаграмме, но попросил R вместо python.

Мой вопрос очень прост. Я хочу создавать штриховки в R, используя ggplot2, если это возможно, с указанием значительной разницы между различными полосками, например. что-то вроде этого. У меня был поиск вокруг, но я не могу найти другой вопрос, задающий точно то же самое.

bar plot showing error bars and sig. diff marking beween bars

Ответы

Ответ 1

Вы можете использовать geom_path() и annotate(), чтобы получить аналогичный результат. Для этого примера вы должны сами определить подходящее положение. В geom_path() предоставляются четыре номера для получения этих небольших тиков для подключения линий.

df<-data.frame(group=c("A","B","C","D"),numb=c(12,24,36,48))
g<-ggplot(df,aes(group,numb))+geom_bar(stat="identity")
g+geom_path(x=c(1,1,2,2),y=c(25,26,26,25))+
  geom_path(x=c(2,2,3,3),y=c(37,38,38,37))+
  geom_path(x=c(3,3,4,4),y=c(49,50,50,49))+
  annotate("text",x=1.5,y=27,label="p=0.012")+
  annotate("text",x=2.5,y=39,label="p<0.0001")+
  annotate("text",x=3.5,y=51,label="p<0.0001")

enter image description here

Ответ 2

Я знаю, что это старый вопрос, и ответ Didzis Elferts уже дает одно решение проблемы. Но недавно я создал расширение ggplot, которое упростило весь процесс добавления строк значимости: ggsignif

Вместо утомительного добавления geom_path и annotate к вашему сюжету вы просто добавляете один слой geom_signif:

library(ggplot2)
library(ggsignif)

ggplot(iris, aes(x=Species, y=Sepal.Length)) + 
  geom_boxplot() +
  geom_signif(comparisons = list(c("versicolor", "virginica")), 
              map_signif_level=TRUE)

Boxplot с линией значимости

Полная документация пакета доступна по адресу CRAN.

Ответ 3

Я использовал предложенный метод сверху, но я нашел функцию аннотаций проще для создания строк, чем функция geom_path. Просто используйте "сегмент" вместо "текст". Вы должны разбить вещи по сегментам и определить начальные и конечные значения x и y для каждого сегмента линии.

пример для создания 3-х сегментов:

annotate("segment", x=c(1,1,2),xend=c(1,2,2), y= c(125,130,130), yend=c(130,130,125))