Как установить график x, y в R с типом данных до / после, где каждая точка также показывает стандартные отклонения? - PullRequest
0 голосов
/ 29 января 2019

Мне нужно представить вариацию до / после ряда метрик социальных сетей.Идея состоит в том, что каждая точка состоит из x-координат, y-координат, где они являются средними значениями типа социального субъекта, а линии представляют стандартные отклонения.

Например: на момент «до» у нас есть 4 социальных субъекта типа «государственное учреждение», а на данный момент «после» 6 актеров (одни такие же, другие новые, но это не так)не имеет значения, потому что я пытаюсь описать из структуры, а не из узлов).Из этой выборки выявляются средние значения и отклонения, и с помощью графика я хочу сравнить тех, кто «увеличивает» или «уменьшает» различные показатели.

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

    time category    code     Clossenness
    1         PI     PI1          0,658
    1         PI     PI2          0,568
    1         PI     PI3          0,581
    1         PI     PI4          0,595
    1         PI     PI5          0,556
    1         PrI    PrI1         0,658
    1         PrI    PrI2         0,543
    1         NGO's  NGO1         0,568
    1         NGO's  NGO2         0,581
    2         PI     PI1          0,611
    2         PI     PI6          0,600
    2         PI     PI7          0,485
    2         PI     PI8          0,569
    2         PI     PI9          0,579
    2         PI     PI10         0,635
    2         PI     PI11         0,623
    2         PI     PI12         0,623
    2         PI     PI13         0,673
    2         PrI    PrI1         0,673
    2         PrI    PrI3         0,600
    2         NGO's  NGO1         0,750
    2         NGO's  NGO3         0,508
    2         NGO's  NGO4         0,524

structure(list(structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L), .Label = c("1", 
"2"), class = "factor"), timecategory = structure(c(2L, 2L, 2L, 
2L, 2L, 3L, 3L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 
3L, 1L, 1L, 1L), .Label = c("NGO's", "PI", "PrI"), class = "factor"), 
    code = structure(c(5L, 10L, 11L, 12L, 13L, 18L, 19L, 1L, 
    2L, 5L, 14L, 15L, 16L, 17L, 6L, 7L, 8L, 9L, 18L, 20L, 1L, 
    3L, 4L), .Label = c("NGO1", "NGO2", "NGO3", "NGO4", "PI1", 
    "PI10", "PI11", "PI12", "PI13", "PI2", "PI3", "PI4", "PI5", 
    "PI6", "PI7", "PI8", "PI9", "PrI1", "PrI2", "PrI3"), class = "factor"), 
    Clossenness = structure(c(15L, 6L, 9L, 10L, 5L, 15L, 4L, 
    6L, 9L, 12L, 11L, 1L, 7L, 8L, 14L, 13L, 13L, 16L, 16L, 11L, 
    17L, 2L, 3L), .Label = c("0,485", "0,508", "0,524", "0,543", 
    "0,556", "0,568", "0,569", "0,579", "0,581", "0,595", "0,600", 
    "0,611", "0,623", "0,635", "0,658", "0,673", "0,750"), class = "factor")), .Names = c("", 
"time category", "code", "Clossenness"), row.names = c(NA, -23L
), class = "data.frame")

График представляет собой описательную информацию, которую янужно, но становится сложнее сравнивать изменения до / после, потому что нужно смотреть на блокпост в парах.Тогда я считаю более подходящим использовать другой график, который я предлагаю.Сложность в том, что я не знаю прямого способа сделать этот график с той же информацией.

Ожидаемый результат https://ibb.co/WsrDN7D Фактический результат https://ibb.co/M6QWXLv

1 Ответ

0 голосов
/ 29 января 2019

С помощью функций group_by() и summarise() вы можете рассчитать среднее значение каждой категории за каждый раз, а с помощью функции spread() вы можете перегруппировать эти 2 значения в одну строку:

set.seed(1)

df <- data.frame(
  time        = rep(c('before', 'after'), each = 8), 
  category    = rep(rep(c('PI', 'NGO'), each = 4), times = 2),
  clossenness = rnorm(16, .6, .1) 
) %>% 

  group_by(time, category) %>% 
  summarise(mean_clos = mean(clossenness)) %>% 

  spread(key = time, value = mean_clos)

  category after before
  <fct>    <dbl>  <dbl>
1 NGO      0.630  0.595
2 PI       0.573  0.659

Затем вы можете построить точку (до, после) с помощью функции geom_label() или geom_point() и сравнить ее с линией идентификации, чтобы увидеть, увеличивается ли она или уменьшается.

df %>% 
  ggplot(aes(x = before, y = after)) +
  #geom_point() +
  geom_label(aes(label = category)) +
  geom_abline(intercept = 0, slope = 1) +
  xlim(c(.5, .7)) + ylim(c(.5, .7))

enter image description here

В этом примере НПО увеличилась, тогда как ИП снизился.

...