Как отобразить geom_errorbar с пользовательскими значениями (метаанализ в R или, может быть, forest?)

#r #ggplot2 #geom-bar

#r #ggplot2 #geom-bar

Вопрос:

Кто-нибудь может мне немного помочь с построением geom_errorbar в R, когда мои данные выглядят:

 > Country Sex Correlation Number  Lower Upper
1  Brazil  Men      -0.108    301 -0.218 0.005
2 Bulgaria Men      -0.012     63 -0.258 0.236
3   Canada Men        0.07     25 -0.334 0.452
4   Brazil Women    -0.074     47 -0.353 0.217
5 Bulgaria Women    -0.042    300 -0.154 0.071
6  Canada  Women     0.092     51 -0.188 0.358
  

Я хочу визуализировать различия в корреляциях в странах в зависимости от пола (заполненный / цветной пол). У меня есть среднее значение (корреляция), нижний доверительный интервал для этого среднего (нижний) и верхний (верхний). Слева должны быть страны и … в принципе, это все. Почему-то я не могу добраться до него.

При поиске через Stackoverflow я подумал, может быть, мне лучше использовать некоторые функции леса, поскольку это, возможно, ближе к тому, что я себе представлял.

То, что мне удалось сделать до сих пор, выглядит довольно плохо: ссылка

Заранее спасибо!

Комментарии:

1. Как именно вы хотите, чтобы выглядел ваш график?

Ответ №1:

Попробуйте этот подход, используя фасеты из ggplot2 package with facet_wrap() . Вот код:

 library(ggplot2)
library(dplyr)
#Code
df %>%
  ggplot(aes(x=Country,y=Correlation,color=Sex)) 
  geom_point() 
  geom_errorbar(aes(ymin=Lower,ymax=Upper)) 
  facet_wrap(.~Sex) 
  theme_bw() 
  theme(legend.position = 'top',
        axis.text = element_text(color='black',face='bold'),
        axis.title = element_text(color='black',face='bold'),
        legend.text = element_text(color='black',face='bold'),
        legend.title = element_text(color='black',face='bold'),
        strip.text = element_text(color='black',face='bold'),
        strip.background = element_blank())
  

Вывод:

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

Некоторые используемые данные:

 #Data
df <- structure(list(Country = c("Brazil", "Bulgaria", "Canada", "Brazil", 
"Bulgaria", "Canada"), Sex = c("Men", "Men", "Men", "Women", 
"Women", "Women"), Correlation = c(-0.108, -0.012, 0.07, -0.074, 
-0.042, 0.092), Number = c(301L, 63L, 25L, 47L, 300L, 51L), Lower = c(-0.218, 
-0.258, -0.334, -0.353, -0.154, -0.188), Upper = c(0.005, 0.236, 
0.452, 0.217, 0.071, 0.358)), class = "data.frame", row.names = c("1", 
"2", "3", "4", "5", "6"))
  

Комментарии:

1. Это аккуратный график. С дополнительными строками в теме вы, сэр, сделали ее потрясающей. Спасибо!

2. @chillos Да, это выглядит красиво. Надеюсь, это помогло вам 🙂 И поскольку другой ответ тоже классный, вы могли бы проголосовать 🙂

Ответ №2:

Похоже, вы ищете что-то вроде этого:

 ggplot(df, aes(x = Correlation, y = Country, color = Sex))  
  geom_point(position = position_dodge(width = 0.75))  
  geom_errorbarh(aes(xmin = Lower, xmax = Upper),
                 position = position_dodge(width = 0.75))
  

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

Данные

 df <- structure(list(Country = structure(c(1L, 2L, 3L, 1L, 2L, 3L), 
    .Label = c("Brazil", "Bulgaria", "Canada"), class = "factor"), 
    Sex = structure(c(1L, 1L, 1L, 2L, 2L, 2L), .Label = c("Men", "Women"), 
    class = "factor"), 
    Correlation = c(-0.108, -0.012, 0.07, -0.074, -0.042, 0.092
    ), Number = c(301L, 63L, 25L, 47L, 300L, 51L), Lower = c(-0.218, 
    -0.258, -0.334, -0.353, -0.154, -0.188), Upper = c(0.005, 
    0.236, 0.452, 0.217, 0.071, 0.358)), class = "data.frame", 
    row.names = c("1", "2", "3", "4", "5", "6"))
  

Комментарии:

1. Да, именно что-то в этом роде!!! Это выглядит потрясающе! Однако есть проблема с этой «точкой», которая должна быть посередине… Он появляется где-то там, где он не должен появляться… Определенно не в середине: drive.google.com/file/d/1kBGB9DHYEelbYEJY7zIDuIGu6A2e6FfH /…

2. Упс, моя вина… Я только что заметил с помощью str (df), что они были закодированы как char, а не int… Большое спасибо!