尝试获取标准错误时的 NA

NAs when attempting to get standard error

R 正在做一件非常奇怪的事情,它没有给我一条错误消息,而是不计算我告诉它要计算的内容。我正在尝试查找变量的标准错误,而命令生成的是 NA,我无法弄清楚原因。这是我获取均值和标准误差的代码:

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

我感兴趣的变量称为值。这是我的数据框:

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,我不知道为什么。有什么想法吗?

谢谢!

你可以试试:

    ReHo_Group_Esc_1 %>% group_by(Group) %>% 
    summarise(Value=mean(Value,na.rm=T), se=sd(Value,na.rm=T)/sqrt(n()))

不要将新变量命名为 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

问题是当您计算 sd(Value) 时,长度为 21 的 Value 列已转换为长度为 1 的列(每组)。两条线索:

  1. sd 任何长度 1 是 NA;

  2. 尝试用 length 替换 sd,你会看到它只得到一个值(错误,Value :-)(这是 上的一出戏):

    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