【问题标题】:NAs when attempting to get standard error尝试获取标准错误时的 NA
【发布时间】:2020-10-29 10:29:03
【问题描述】:

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

我的汇总命令在为每个组生成平均值时没有问题,但它为我提供了标准错误的 NA,我不知道为什么。有什么想法吗?

谢谢!

【问题讨论】:

  • 已经得到回答,但您可能需要运行 ReHo_Group_Esc_1 %&gt;% group_by(Group) %&gt;% summarise(Value = mean(Value), n = n()) 以查看 n() 返回 1,而不是组中原始值的数量。
  • 不是n()的问题,而是summarise中的列命名问题

标签: r standard-error


【解决方案1】:

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

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

  1. sd 任何长度为 1 的都是 NA;

  2. 尝试用length 替换sd,你会发现它只得到一个值(错误,Value :-)(这是对@CalumYou's comment 的玩笑):

    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

【讨论】:

  • 啊,但是 se 通常出现在表示的意思之后。 ;)
  • 确实如此,所以这显然不是一个理智的解决方案,我一定是完全愚蠢的
  • 我受益于mutate 使变量立即可用于后续计算的能力,然后我会定期被这种行为所困扰......至少sd(...)NA canary,其他操作可能没有那么明显不正确。
  • 明白了!谢谢!
【解决方案3】:

你可以试试:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-23
    • 2017-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多