линейный график, представляющий две переменные ответа - PullRequest
0 голосов
/ 05 февраля 2020

Я пытаюсь проанализировать набор данных, в котором есть две переменные ответа X и Y для каждой обработки для каждой репликации:

Treatment   Rep X   Y
N1  1 10.18 14.38
N1  2 13.53 14.38
N2  1 15.34 18.28
N2  2 10.4  7.14
N3  1 8.57  22.57
N3  2 13.95 19.9
N4  1 16.69 NA
N4  2 14.33 9.32
N5  1 NA    NA
N5  2 15.74 15.39

Я хочу вычислить средние значения, значения sd и se для каждой обработки для каждой обработки. переменная ответа. Затем я хочу сделать линейный график с обработкой по оси X; и две строки для X и Y с барами ошибок доверительного интервала.

Я использовал это для вычисления и построения графика:

df<-Data1 %>%
  group_by(Treatment, Rep) %>% 
  summarise_at(vars(-group_cols()), list(mean = ~mean(X, Y, na.rm = TRUE), 
                                         sd = ~sd(X, Y, na.rm = TRUE),
                                         se= ~sd(X, Y, na.rm = TRUE)/sqrt(n()))) %>% 
  summarise_at(vars(mean:se), mean, na.rm = TRUE)


p<- ggplot(data=na.omit(df),aes(reorder(Treatment, mean, sum), mean, group = 1))+
  geom_line(stat = "identity", colour="black", width = 1) +
  geom_errorbar(aes(x=Line, ymin = mean-se, ymax = mean+se),
                width = 0.25, color = "black") + scale_y_continuous(expand = c(0,0), limits = c(0, 40)) + theme_classic() + theme(axis.text.x = element_text(size= 5.5, angle = 45, hjust = 1, colour = "black",face = "bold")) + theme(axis.text.y = element_text(size= 8, hjust = 1, colour = "black",face = "bold"))

Спасибо за помощь!

1 Ответ

1 голос
/ 08 февраля 2020

Ваши данные:

Data1 = structure(list(Treatment = structure(c(1L, 1L, 2L, 2L, 3L, 3L, 
4L, 4L, 5L, 5L), .Label = c("N1", "N2", "N3", "N4", "N5"), class = "factor"), 
    Rep = c(1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L), X = c(10.18, 
    13.53, 15.34, 10.4, 8.57, 13.95, 16.69, 14.33, NA, 15.74), 
    Y = c(14.38, 14.38, 18.28, 7.14, 22.57, 19.9, NA, 9.32, NA, 
    15.39)), class = "data.frame", row.names = c(NA, -10L))

Определите функцию для вычисления sem:

SE = function(x){
  x=x[!is.na(x)]
  sd(x)/sqrt(length(x))
}

Загрузите библиотеки и поверните таблицу на более длинный срок, затем вычислите среднее значение и sem для каждого ответа в каждой обработке :

library(dplyr)
library(tidyr)

df<-Data1 %>%
  pivot_longer(-c(Treatment,Rep)) %>% 
  group_by(Treatment,name) %>% 
  summarize(mean=mean(value,na.rm=TRUE),SE=SE(value))

Когда вы делаете group_by, переменные группировки не включаются в суммирование, поэтому вам не нужно summarise_at. Также вы не можете включить Rep в группировку, потому что это сделает группировку наблюдением, что неправильно.

Теперь мы строим сюжет:

p<- ggplot(df,aes(x=Treatment,y=mean,colour=name))+
geom_line(aes(group=name)) +
geom_errorbar(aes(ymin = mean-SE, ymax = mean+SE),
                width = 0.25) + 
scale_y_continuous(expand = c(0,0), limits = c(0, 40)) + 
theme_classic() + theme(axis.text.x = element_text(size= 5.5, 
angle = 45, hjust = 1, colour = "black",face = "bold")) +
theme(axis.text.y = element_text(size= 8, hjust = 1, 
 colour = "black",face = "bold"))

Надеюсь, это то, что вы хотите .. Если нет, уточните подробнее ваш вопрос.

enter image description here

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