Как добавить индикатор значимости между подгруппами сюжета - PullRequest
1 голос
/ 14 апреля 2019

Я хотел бы сделать тест Уилкокса и добавить шкалу значимости для каждой группы в поле бокса (не между группами). То есть сравнение подгрупп («0», «1») в моменты времени 2, 6 и 14. Это то, что я до сих пор:

WS = время
DV = эффект
количество = подгруппа ("0" или "1")

p <- ggplot(data, aes(x=WS, y=DV, group=count))
p <- p + geom_boxplot(aes(fill=factor(count), group=interaction(WS, count)))
p <- p + stat_summary(fun.y=median, geom="smooth", aes(group=factor(count), color =factor(count)))
p <- p + scale_x_continuous(breaks = c(2,6,14))
p

Вывод из кода

При добавлении

p <- p + geom_signif(comparisons = list(c("0", "1")),
              map_signif_level=TRUE,test='wilcox.test')

к вышесказанному я получаю следующую ошибку:

Error in f(...) : 
  Can only handle data with groups that are plotted on the x-axis

Я предполагаю, что сравнение может быть выполнено только в том случае, если данные находятся на оси X. Тем не менее, я хочу сохранить график почти таким же, как сейчас, со временем 2, 6 и 14 на оси X. Как я могу решить это?

1 Ответ

1 голос
/ 14 апреля 2019

из виньетки ggsignif (см. ??ggsignif) Я понимаю, что для слоев, которые используют position='dodge' (что имеет место для ваших коробок, поскольку у вас есть группировка с взаимосвязью), вам нужно будет предоставить положение и аннотация (метка) самостоятельно.

Вы можете рассчитать все значения следующим образом:

p <- ggplot(data, aes(x=WS, y=DV, group=count))
p <- p + geom_boxplot(aes(fill=factor(count), group=interaction(WS, count)))
p <- p + stat_summary(fun.y=median, geom="smooth", aes(group=factor(count), color =factor(count)))
p <- p + scale_x_continuous(breaks = c(2,6,14))

p.values <- sapply(split(data, data$WS), function(x){wilcox.test(DV~count, x)$p.value})
labels <- symnum(p.values, corr = FALSE, cutpoints = c(0,  .001,.01,.05, 1), symbols = c("***","**","*","n.s."))
y.values <- sapply(split(data, data$WS), function(x){max(sapply(split(x, x$count), function(xx){boxplot(x$DV, plot=F)$stats[5, ]}))})+2

p <- p + geom_signif(y_position = y.values, xmin = unique(data$WS)-.4, xmax = unique(data$WS)+.4, annotations = labels)
p

Это дает: enter image description here

...