как построить (с ошибкой бар) после «агрегат»? - PullRequest
1 голос
/ 22 сентября 2019

У меня есть данные с двумя измерениями (2 обработки по 3 дня), и цель состоит в том, чтобы нарисовать линейный график, представляющий средние значения и столбцы ошибок с 2 линиями.Тем не менее, когда я использую «сюжет», чтобы нарисовать средства, получается график с квадратом 3 х 3 (не знаю, что это такое)

данные:

 no. ,Treatment, D1,  D2,  D3
 1, A , 4 , 5 , 5
 2, A , 6 , 6 , 4
 3, A , 5 , 7 , 8
 4, B , 2 , 1 , 3
 5, B , 3 , 2 , 2
 6, B , 3 , 2 , 3

Я использовал aggregate для вычисления среднего и стандартной ошибки.Однако, когда я использую plot, результат получается странным.

dta=read.table(file ='dta.csv', header = T, sep = ',')

dta.mean=aggregate(dta[,-1:-2], list(dta$Treatment),mean)

plot(dta.mean[1,2:4])

Я ожидал линейный график, состоящий из 2 линий (одна - обработка A, другая - обработка B), а значения yСредство с ошибками.Пожалуйста, помогите мне :( Большое спасибо!

image1: это неправильный результат image1: this is the wrong result

image2: ожидаемый image2: the expected one

1 Ответ

0 голосов
/ 22 сентября 2019

Давайте сделаем это шаг за шагом.Я надеюсь, что это будет полезно для вас.

Сначала давайте посмотрим, каков результат использования метода aggregate:

  Group.1       D1       D2       D3
1       A 5.000000 6.000000 5.666667
2       B 2.666667 1.666667 2.666667

Затем ваш вызов plot включает dta.mean[1,2:4] так что выбирается строка 1 и столбцы с 2 по 4 для построения графика (в виде фрейма данных):

  D1 D2       D3
1  5  6 5.666667

Обратите внимание, что это включает только группу «A» (строка 1) и 3 числовые переменные (для D1, D2 и D3).

Когда вы звоните plot на фрейм данных, вы получите матрицу рассеивания, как вы указали в своем вопросе.Это показывает 6 диаграмм рассеяния (D1 против D2, D2 против D1, D1 против D3, D3 против D1, D2 против D3, D3 против D2).Каждый из этих 6 участков имеет только одну точку.Например, D1 против D2 - это D1 = 5, D2 = 6.

Вот подход, который я бы выбрал:

Сначала я бы meltdata (reshape2 package):

library(reshape2)
dta.m <- melt(dta[-1], id = "Treatment")

   Treatment variable value
1          A       D1     4
2          A       D1     6
3          A       D1     5
4          B       D1     2
5          B       D1     3
6          B       D1     3
7          A       D2     5
8          A       D2     6
...

Это помещает ваши данные в длинный формат (в отличие от широкого): variable теперь это D1, D2 или D3, а value включаетзначение для этих переменных.Это очень полезно и аккуратно для ggplot.

Далее я бы aggregate:

dta.mean = aggregate(value~Treatment+variable, dta.m, mean)

Что должно дать вам это для построения:

  Treatment variable    value
1         A       D1 5.000000
2         B       D1 2.666667
3         A       D2 6.000000
4         B       D2 1.666667
5         A       D3 5.666667
6         B       D3 2.666667

Использование ggplot2:

library(ggplot2)
ggplot(dta.mean, aes(x = variable, y = value, group = Treatment, col = Treatment)) +
  geom_line()

plot of melted mean data

Для создания панелей ошибок вам нужно будет снова объединить данные (аналогично тому, что было сделано для средств) ивозможно используйте geom_errorbar.

Надеюсь, это будет полезно для вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...