Построение p-значений с помощью ggpubr в сгруппированном графике приводит к ошибке

Я рисую grouped dotplot с помощью ggplot2, который отлично работает . Но если я использую stat_compare_means из пакета ggpubr, чтобы добавить p-value s, это не сработает. Когда я использую compare_means вне среды построения графиков, он работает нормально, и я получаю правильный p-values с набором данных (используя compare_means(X1 ~ X5, data=titer_lung, method="t.test").

Я использую следующие данные:

> titer_lung
         X1  X2               X3    X4     X5
1  4.531479  NK       mutIRFE_FB Lunge group1
2  4.068186  NK       mutIRFE_FB Lunge group1
3  4.071882  NK       mutIRFE_FB Lunge group1
4  4.117271  NK       mutIRFE_FB Lunge group1
5  4.117271  NK       mutIRFE_FB Lunge group1
6  4.462398 -NK       mutIRFE_FB Lunge group2
7  4.643453 -NK       mutIRFE_FB Lunge group2
8  4.556303 -NK       mutIRFE_FB Lunge group2
9  4.724276 -NK       mutIRFE_FB Lunge group2
10 4.491362 -NK       mutIRFE_FB Lunge group2
11 3.903090  NK    mutIRFErev_FB Lunge group3
12 4.342423  NK    mutIRFErev_FB Lunge group3
13 4.113943  NK    mutIRFErev_FB Lunge group3
14 4.653213  NK    mutIRFErev_FB Lunge group3
15 4.230449  NK    mutIRFErev_FB Lunge group3
16 4.556303 -NK    mutIRFErev_FB Lunge group4
17 4.462398 -NK    mutIRFErev_FB Lunge group4
18 4.230449 -NK    mutIRFErev_FB Lunge group4
19       NA -NK    mutIRFErev_FB Lunge group4
20 4.591065 -NK    mutIRFErev_FB Lunge group4
21 4.230449  NK    d3IDE mutIRFE Lunge group5
22 4.531479  NK    d3IDE mutIRFE Lunge group5
23 4.812913  NK    d3IDE mutIRFE Lunge group5
24 4.544068  NK    d3IDE mutIRFE Lunge group5
25 4.342423  NK    d3IDE mutIRFE Lunge group5
26 4.380211 -NK    d3IDE mutIRFE Lunge group6
27 4.698970 -NK    d3IDE mutIRFE Lunge group6
28 4.716003 -NK    d3IDE mutIRFE Lunge group6
29 4.477121 -NK    d3IDE mutIRFE Lunge group6
30 4.740363 -NK    d3IDE mutIRFE Lunge group6
31 4.255273  NK d3IDE mutIRFErev Lunge group7
32 4.322219  NK d3IDE mutIRFErev Lunge group7
33 4.113943  NK d3IDE mutIRFErev Lunge group7
34 4.176091  NK d3IDE mutIRFErev Lunge group7
35 4.518514  NK d3IDE mutIRFErev Lunge group7
36 4.724276 -NK d3IDE mutIRFErev Lunge group8
37 4.462398 -NK d3IDE mutIRFErev Lunge group8
38 4.785330 -NK d3IDE mutIRFErev Lunge group8
39 4.431364 -NK d3IDE mutIRFErev Lunge group8
40 4.826075 -NK d3IDE mutIRFErev Lunge group8

И, используя следующий код, я получаю искомый сюжет:

titer_plot <- ggplot(titer_lung, aes(y=titer_lung$X1, x=titer_lung$X3, 
                                    fill=titer_lung$X2)) +
  geom_dotplot(aes(fill = titer_lung$X2, color = titer_lung$X2),
               trim = FALSE,
               binaxis='y', stackdir='center', dotsize = 0.8,
               position = position_dodge(0.8)
  )+
  stat_summary(fun.y = median, fun.ymin = median, fun.ymax = median,
               geom = "crossbar", width = 0.5, position = position_dodge(0.8)) +
  scale_fill_manual(values = c("black", "white"))+
  scale_color_manual(values = c("black", "black"))+
  xlab("")+
  ylab(expression('Viral titer/organ [log '[10]*']'))+
  theme_classic()+
  theme(text = element_text(size=10),
        axis.text.x = element_text(size=10, angle = 90, hjust=1),
        axis.text.y = element_text(size=10), 
        axis.title.y = element_text(size=10), legend.text = element_text(size=10),
        legend.title=element_blank())+
titer_plot 

Когда я хочу сравнить group1 с group2 и group3 с group4, я пишу:

my_comparisons <- list(c("group1","group2"),c("group3","group4"))
titer_plot + stat_compare_means(comparisons=my_comparisons, label.y=0,
                     method = "t.test")

Но затем я получаю следующую ошибку:

Удалена 1 строка, содержащая не конечные значения (stat_signif).
Ошибка вычисления в stat_signif(): отсутствует значение, где требуется TRUE / FALSE

Думаю, со значениями NA проблем быть не должно, поскольку compare_means тоже не беспокоит.

Я очень доволен любой помощью, спасибо !!!


person Guacamole    schedule 14.12.2018    source источник
comment
Есть ли причина не удалять неполные наблюдения из набора данных?   -  person ira    schedule 14.12.2018
comment
Что было в titer_plot до предоставленного вами образца кода? Какие данные содержит my_comparisons? Не могли бы вы предоставить код таким образом, чтобы мы могли воспроизвести вашу ошибку?   -  person 7hibault    schedule 14.12.2018
comment
Либо удалите недостающие значения, либо вменьте их.   -  person NelsonGon    schedule 14.12.2018
comment
@ira, я бы тоже мог их удалить, но я подумал, что это не имеет значения. Я также пробовал код без значения NA, но это привело к той же ошибке.   -  person Guacamole    schedule 14.12.2018
comment
@ 7hibault, до этого в titer_plot ничего не было. Только то, как я сконструировал data.frame titer_lung. my_comparisons содержит, как я уже сказал, my_comparisons <- list(c("group1","group2"),c("group3","group4")). Таким образом, он должен сравнить первые 5 записей titer_lung со вторыми 5 записями, а затем записи 11-15 с 16-20   -  person Guacamole    schedule 14.12.2018
comment
Есть ли какое-то отношение, чтобы я хотел сравнивать группы легенд друг с другом, а не группы на оси Y?   -  person Guacamole    schedule 14.12.2018
comment
@Guacamole, я думаю, вы правы, он не знает, где разместить столбцы. Сравнение: список векторов длины 2. Записи в векторе - это либо имена 2 значений на оси x, либо 2 целых числа, которые соответствуют индексу групп, представляющих интерес, для сравнения.   -  person TobiO    schedule 14.12.2018


Ответы (1)


Проблема в том, что он не знает, где поставить скобки (координаты x)

сравнения: список векторов длины 2. Записи в векторе - это либо имена 2 значений на оси x, либо 2 целых числа, которые соответствуют индексу групп, представляющих интерес, для сравнения.

titer_plot + stat_compare_means(aes(group=X2), method = "t.test",)  #specify the groups specifically
label.y=5

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

Я понятия не имею, как это преодолеть, но у лежащего в основе geom_signif есть аргумент «вручную». Итак, я думаю, вы могли бы каким-то образом передать вывод compare_means(X1 ~ X5, data=titer_lung, method="t.test") этому geom.

Вы также можете использовать 8 записей на оси x

ggplot(titer_lung, aes(y=X1, x=paste(X3,X2), fill=X2)) + ...

my_comparisons <- list(c("mutIRFE_FB -NK","mutIRFE_FB NK"),
                   c("mutIRFErev_FB -NK","mutIRFErev_FB NK"),
                   c("d3IDE mutIRFE -NK","d3IDE mutIRFE NK"),
                   c("d3IDE mutIRFErev -NK","d3IDE mutIRFErev NK"))
titer_plot +  stat_compare_means(comparisons=my_comparisons, label.y=5,
                 method = "t.test")

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

person TobiO    schedule 14.12.2018
comment
И это не имеет ничего общего с одним NA-значением. - person TobiO; 14.12.2018
comment
Большое спасибо, я буду использовать geom_signif! - person Guacamole; 17.12.2018