вычисление среднего значения для двух столбцов переменных ответа одновременно - PullRequest
0 голосов
/ 05 февраля 2020

Я пытаюсь проанализировать набор данных, в котором есть две переменные ответа X и Y с двумя группирующими переменными Обработка и Реп:

tribble(
    ~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 с барами ошибок доверительного интервала.

Я использовал это для вычисления с использованием summarise_at:

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)

Но я получаю эту ошибку:

Error in if (trim > 0 && n) { : missing value where TRUE/FALSE needed

Я не уверен, что смогу поставить две переменные таким образом для summarise_at. Спасибо за помощь!

Ответы [ 2 ]

0 голосов
/ 05 февраля 2020

1.Создать воспроизводимый минимальный примерный набор данных

df <- data.frame(Treatment = paste0("N", rep(1:5, each=2)),
                 Rep = c(1,2),
                 X = runif(10),
                 Y = runif(10))

2.Решение с использованием tidyverse:

library(tidyverse)

df %>% 
  group_by(Treatment) %>% 
  summarise(N = n(),
            X_sd = sd(X, na.rm=FALSE),
            Y_sd = sd(Y, na.rm=FALSE),
            X_mean = mean(X, na.rm=FALSE),
            Y_mean = mean(Y, na.rm=FALSE),
            X_se = X_sd/sqrt(N),
            Y_se = Y_sd/sqrt(N)) %>%
  ungroup() %>% 
  pivot_longer(cols=c(X_mean, Y_mean),
               names_to = "mean") %>% 
  ggplot(aes(Treatment, value, color = mean, group=mean)) +
    geom_line()

Редактировать:

result_df <- df %>% 
  group_by(Treatment) %>% 
  summarise(N = n(),
            X_sd = sd(X, na.rm=FALSE),
            Y_sd = sd(Y, na.rm=FALSE),
            X_mean = mean(X, na.rm=FALSE),
            Y_mean = mean(Y, na.rm=FALSE),
            X_se = X_sd/sqrt(N),
            Y_se = Y_sd/sqrt(N)) %>%
  ungroup() %>% 
  pivot_longer(cols=c(X_mean, Y_mean),
               names_to = "mean")

result_df

result_plot <- result_df %>%
ggplot(aes(Treatment, value, color = mean, group=mean)) +
    geom_line()
0 голосов
/ 05 февраля 2020
se <- function(x, na.rm = TRUE) sd(x, na.rm = na.rm)/sqrt(length(x))

df %>%
    group_by(Treatment, Rep) %>%
    summarise_at(vars(X,Y)
                 , list(sd = sd
                        , mean = mean
                        , se = se)
                 , na.rm = TRUE)

   Treatment   Rep  X_sd  Y_sd X_mean Y_mean  X_se  Y_se
   <chr>     <dbl> <dbl> <dbl>  <dbl>  <dbl> <dbl> <dbl>
 1 N1            1    NA    NA  10.2   14.4     NA    NA
 2 N1            2    NA    NA  13.5   14.4     NA    NA
 3 N2            1    NA    NA  15.3   18.3     NA    NA
 4 N2            2    NA    NA  10.4    7.14    NA    NA
 5 N3            1    NA    NA   8.57  22.6     NA    NA
 6 N3            2    NA    NA  14.0   19.9     NA    NA
 7 N4            1    NA    NA  16.7  NaN       NA    NA
 8 N4            2    NA    NA  14.3    9.32    NA    NA
 9 N5            1    NA    NA NaN    NaN       NA    NA
10 N5            2    NA    NA  15.7   15.4     NA    NA
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...