НП при попытке получить стандартную ошибку - PullRequest
2 голосов
/ 09 июля 2020

R делает очень странную вещь, когда он не выдает мне сообщение об ошибке, а вместо этого просто не вычисляет то, что я сказал ему вычислить. Я пытаюсь найти стандартную ошибку переменной, а вместо этого команда создает NA, и я не могу понять, почему. Вот мой код для получения среднего значения и стандартной ошибки:

ReHo_mean_Esc_1 <- ReHo_Group_Esc_1 %>% group_by(Group) %>% summarise(Value=mean(Value), se=sd(Value)/sqrt(n()))

Моя интересующая переменная называется Value. Вот мой фрейм данных:

ID  Clu Group Value Esc Nal 
422 1   LgA 3.26090 94  7.50
501 1   LgA 3.32376 139 15.25
503 1   LgA 2.76855 24  31.50
521 1   LgA 1.81475 -28 6.75
522 1   LgA 1.80966 58  13.00
523 1   LgA 3.97502 76  10.25
603 1   LgA 1.78573 76  18.00
604 1   LgA 3.70577 54  10.00
605 1   LgA 2.93304 51  18.00
613 1   LgA 3.68118 116 17.00
429 1   ShA 2.61634 -33 5.75
430 1   ShA 3.39848 13  12.75
431 1   ShA 3.40785 -33 9.75
432 1   ShA 4.38024 50  4.75
513 1   ShA 4.14605 8   10.50
514 1   ShA 3.86332 0   10.75
518 1   ShA 2.96312 0   13.00
519 1   ShA 2.82937 -33 7.50
610 1   ShA 5.07850 13  26.00
612 1   ShA 4.14895 56  4.00
614 1   ShA 3.83926 42  8.25

Моя команда summarize не имеет проблем с получением среднего значения для каждой группы, но дает мне NA для стандартной ошибки, и я не знаю почему. Есть идеи?

Спасибо!

Ответы [ 3 ]

2 голосов
/ 09 июля 2020

Не называйте новую переменную Value. dplyr отличается от базового R тем, что позволяет сразу же получить доступ к вновь созданным переменным в той же функции.

ReHo_Group_Esc_1 %>% 
  group_by(Group) %>% 
  summarise(mValue=mean(Value), se=sd(Value)/sqrt(n()))
# A tibble: 2 x 3
  Group mValue    se
  <chr>  <dbl> <dbl>
1 LgA     2.91 0.266
2 ShA     3.70 0.223
2 голосов
/ 09 июля 2020

Проблема в том, что к тому моменту, когда вы вычисляете sd(Value), столбец Value длиной 21 будет преобразован в столбец длиной 1 (для каждой группы). Две подсказки:

  1. sd любой длины 1 равно NA;

  2. Попробуйте заменить sd на length, и вы увидите, что он получает только одно значение (errr, Value :-) (это игра на @ CalumYou комментарий ):

    ReHo_Group_Esc_1 %>%
      group_by(Group) %>%
      summarise(Value=mean(Value), se=length(Value))
    # # A tibble: 2 x 3
    #   Group Value    se
    #   <chr> <dbl> <int>
    # 1 LgA    2.91     1
    # 2 ShA    3.70     1
    

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

    ReHo_Group_Esc_1 %>%
      group_by(Group) %>%
      summarise(se=length(Value), Value=mean(Value))
    # # A tibble: 2 x 3
    #   Group    se Value
    #   <chr> <int> <dbl>
    # 1 LgA      10  2.91
    # 2 ShA      11  3.70
    

Попробуйте вычислить sd первый :

ReHo_Group_Esc_1 %>%
  group_by(Group) %>%
  summarise(
    se = sd(Value)/sqrt(n()),
    Value = mean(Value)
  )
# # A tibble: 2 x 3
#   Group    se Value
#   <chr> <dbl> <dbl>
# 1 LgA   0.266  2.91
# 2 ShA   0.223  3.70
0 голосов
/ 09 июля 2020

Вы можете попробовать:

    ReHo_Group_Esc_1 %>% group_by(Group) %>% 
    summarise(Value=mean(Value,na.rm=T), se=sd(Value,na.rm=T)/sqrt(n()))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...