首页 > 解决方案 > 测量观察组之间值的“传播”

问题描述

这可能是一个相当基本的统计问题,因为我将在 R 中实现。

我想测量个人之间和组之间的测试分数的“分布”(例如,查看哪个测试问题的结果差异最大)。我知道我可以使用标准差来比较个体之间的分布,但是组之间的分布呢?最好先取每组的平均分,然后测量这些平均值的标准差吗?

举一个具体的例子:

假设我正在收集 9 个人(p1 到 p9)的考试成绩,每个人都属于三个组(g1 到 g3)之一。将收集三个测试分数(metric1、metric2 和 metric3)。

以下是一些示例数据:

library(tidyverse)
my_df <- data.frame(stringsAsFactors=FALSE,
      person = c("p1", "p2", "p3", "p4", "p5",
                 "p6", "p7", "p8", "p9"),
       group = c("g1", "g1", "g1", "g2", "g2", "g2",
                 "g3", "g3", "g3"),
      metric1 = c(34, 43, 9, 70, 95, 81, 70, 33, 49),
      metric2 = c(38, 83, 81, 53, 20, 41, 89, 65, 41),
      metric3 = c(39, 87, 76, 88, 35, 85, 63, 29, 54)
)

对于个人,我知道我可以使用标准差来衡量分数的分布;例如:

my_df %>% summarise(
  sd1 = sd(metric1), 
  sd2 = sd(metric2), 
  sd3 = sd(metric3)
  )

衡量群体之间传播的最佳方法是什么?是不是先取每组的平均值,然后测量这些平均值的标准差?直觉上这是有道理的,但我想知道我是否会通过首先取组平均值而以某种方式“丢失”在个人观察水平上可用的信息。

感谢您可能有的任何意见。

标签: r

解决方案


我们可以用summarise_at

library(dplyr)
my_df %>% 
    summarise_at(vars(starts_with('metric')), sd)

如果我们需要按“组”执行此操作

my_df %>%
   group_by(group) %>%
   summarise_at(vars(starts_with('metric')), sd)

推荐阅读