确定组中最大的贡献者


9

我对统计信息了解不多,请多多包涵。假设我有一组1000名工人。我想弄清楚谁是最努力的人,但我只能以一个小时的工作量为一组,以1-100人为单位来衡量完成的工作量。假设每个工人总是做相同数量的工作,那么在大量的试验和组合中,我能按谁最努力的方式对工人进行排名吗?

注意:这只是一个隐喻,因此不必担心实际运行测试,只需假设我已经有大量数据即可。

编辑: 当我说“假设每个工人总是做相同数量的工作”时,我的意思是每个人每天都做相同数量的工作。因此,乔伊每天将做大约100个工作单元,格雷格将做大约50个工作单元。问题是我只能观察小组完成的工作单元数。

更多编辑: 关于一次工作的工人数量及其工作频率。可能有许多工人同时工作。一些工人可能最终会比其他工人工作更多,也就是说,我们可以假设一些工人将近90%的时间在工作,而其他工人几乎永远不会。

我知道这很困难,但是我将拥有一个非常大的数据集,因此希望这会使它变得容易一些。

对于每个小时,我们知道哪些工人在工作以及完成了多少工作。从这些信息中,我想找出谁做得最多。

如果数据为JSON格式,则将如下所示:

[
  {
    "work_done": 12345,
    "Workers": [ "andy", "bob", "cameron", "david" ]
  },
  {
    "work_done": 432,
    "Workers": [ "steve", "joe", "andy"]
  },
  {
    "work_done": 59042,
    "Workers": [ "bob", "aaron", "michelle", "scott", "henry" ]
  },
  ...
]

3
是工作添加剂,例如某些产品的量吗?然后,您可以使用线性回归来估算每个工作人员的贡献,并按其系数对工作人员进行排序。如果不是可加的,那么您可能想要更复杂的东西。
道格拉斯·扎里

如果您假设知道每个小组完成了多少工作,并且假设该工作平均分配给每个小组的参与者,则只需将小组完成的工作量除以小组人数和总和即可增加每个工人在不同小组中所做的工作。不过,这实际上并没有统计数据。
Qnan

1
@DouglasZare是的,这项工作是可加的
Greg Guida

1
我认为说明很清楚。您只观察小组中的工人,并想对单个工人进行推断。例如,假设您总共有5名工人,在第一天,您一起观察到工人{1,2,3},在第二天,您看到了工人{1,4,5},在第三天{2,3,4 }等,您的数据就是每天的总输出。然后,您可以估计每个工人的平均产出吗?答案是肯定的-如果您可以得出工人总数的分布,则可以写下可能性并根据各个均值最大化。
2012年

1
我想念什么?我什至看不到您在何处获得个人收入。我们是否总是知道特定时间的数据中有哪些工作人员?每小时的总工作量是否固定?在问题定义中是否有明确的假设我不知道?
Michael R. Chernick

Answers:


10

大卫·哈里斯(David Harris)提供了一个很好的答案,但是由于该问题一直在编辑,因此可能会有助于查看其解决方案的详细信息。以下分析的重点是:

  • 加权最小二乘法可能比普通最小二乘法更合适。

  • 由于这些估计值可能反映出生产力的变化,超出了任何人的控制范围,因此请谨慎使用它们来评估单个工人。


为此,我们使用指定的公式创建一些实际的数据,以便我们评估解决方案的准确性。这可以通过以下方式完成R

set.seed(17)
n.names <- 1000
groupSize <- 3.5
n.cases <- 5 * n.names  # Should exceed n.names
cv <- 0.10              # Must be 0 or greater
groupSize <- 3.5        # Must be greater than 0
proficiency <- round(rgamma(n.names, 20, scale=5)); hist(proficiency)

在这些初始步骤中,我们:

  • 为随机数生成器设置种子,以便任何人都可以准确地再现结果。

  • 指定有多少个工人n.names

  • 用规定每组的期望工人数groupSize

  • 用指定可用的案例数(观察值)n.cases。(其中的一些将被淘汰,因为它们是随机发生的,与我们的综合劳动力中的任何工人都不对应。)

  • 安排工作量与根据每个小组的工作“熟练程度”之和预测的工作量随机不同。的值cv是典型的比例变化;例如,在0.10 此处给出的值对应于典型的10%变化(在某些情况下可能超过30%)。

  • 创建一支具有不同工作能力的人员队伍。此处给出的用于计算的参数proficiency在最佳工人和最差工人之间产生了超过4:1的范围(以我的经验,对于技术和专业工作而言,甚至可能有点狭窄,但对于常规制造业工作,则可能很宽)。

有了这些综合性劳动力,让我们模拟他们的工作。这相当于schedule为每个观察值创建一组每个工人()(消除所有根本不涉及工人的观察值),将每个组中工人的熟练程度相加,然后将该总和乘以一个随机值(精确地平均1个)以反映不可避免的变化。(如果根本没有变化,我们可以将这个问题提交给数学站点,在该站点中,受访者可以指出这个问题只是一组联立线性方程组,可以精确地解决这些问题。)

schedule <- matrix(rbinom(n.cases * n.names, 1, groupSize/n.names), nrow=n.cases)
schedule <- schedule[apply(schedule, 1, sum) > 0, ]
work <- round(schedule %*% proficiency * exp(rnorm(dim(schedule)[1], -cv^2/2, cv)))
hist(work)

我发现将所有工作组数据放到一个数据框中进行分析很方便,但可以将工作值分开:

data <- data.frame(schedule)

这是我们从真实数据开始的地方:我们将用data(或schedule)编码工人分组,并在work数组中观察到的工作输出。

不幸的是,如果一些工人总是成对的,Rlm程序只是因错误而失败。 我们应该首先检查这种配对。一种方法是在时间表中找到完全相关的工人:

correlations <- cor(data)
outer(names(data), names(data), paste)[which(upper.tri(correlations) & 
                                             correlations >= 0.999999)]

输出将列出成对的总是成对的工人:这可以用于将这些工人组合为组,因为至少我们可以估计每个的生产率即使不是内的个人也是如此。我们希望它会吐出来character(0)。让我们假设它确实如此。

在前面的解释中隐含的一个微妙之处是,所做功的变化是乘法的,而不是累加的。这是现实的:在绝对规模上,一大批工人的产出差异将大于小批工人的产出差异。因此,通过使用加权最小二乘而不是普通的最小二乘,我们将获得更好的估计。在此特定模型中使用的最佳权重是工作量的倒数。(在某些工作量为零的情况下,我通过添加少量以避免被零除的方法来弄虚作假。)

fit <- lm(work ~ . + 0, data=data, weights=1/(max(work)/10^3+work))
fit.sum <- summary(fit)

这只需要一两秒钟。

在继续之前,我们应该执行一些合适的诊断测试。尽管讨论这些问题会使我们在这里走得太远,但R产生有用诊断的一个命令是

plot(fit)

(这将花费几秒钟:这是一个很大的数据集!)

尽管这几行代码完成了所有工作,并且为每个工作人员吐出了估计的熟练程度,但我们不想浏览所有1000行的输出-至少不是马上。 让我们使用图形显示结果

fit.coef <- coef(fit.sum)
results <- cbind(fit.coef[, c("Estimate", "Std. Error")], 
             Actual=proficiency, 
             Difference=fit.coef[, "Estimate"] - proficiency,
             Residual=(fit.coef[, "Estimate"] - proficiency)/fit.coef[, "Std. Error"])
hist(results[, "Residual"])
plot(results[, c("Actual", "Estimate")])

直方图(下图的左下方)是估计值与实际值之间的差异熟练度熟练度,表示为估计标准误差的倍数。对于一个好的程序,这些值几乎总是介于-22 并在周围对称分布 0。不过,在有1000名工人参与的情况下,我们完全希望看到其中一些标准化差异会扩展3 乃至 4 远离 0。这就是这里的情况:直方图就像人们希望的那样漂亮。(当然,这可能是一件好事:毕竟这些都是模拟数据。但是对称性确认权重在正确地完成其工作。使用错误的权重会倾向于创建不对称的直方图。)

散点图(该图的右下方)直接将估计的熟练程度与实际熟练程度进行比较。当然,实际上这将是不可用的,因为我们不知道实际的熟练程度:这在于计算机仿真的力量。观察:

  • 如果工作中没有随机变化(设置cv=0并重新运行代码以查看此情况),则散点图将是一条完美的对角线。所有估计都将是完全准确的。因此,此处看到的分散反映了这种变化。

  • 有时,估计值与实际值相差很远。例如,在(110,160)附近有一个点,其估计熟练程度比实际熟练程度高约50%。在任何大批量数据中,这几乎是不可避免的。如果将估计数用于个人,例如用于评估工人,请记住这一点。总体而言,这些估计值可能是极好的,但是在某种程度上,工作生产率的差异是由于任何个人无法控制的原因造成的,那么对于一些工人来说,这些估计值是错误的:有些过高,有些过低。而且,没有办法确切地说出谁受到了影响。

这是此过程中生成的四个图。

情节

最后,请注意,此回归方法很容易适用于控制可能与小组生产率相关的其他变量。这些可能包括小组人数,每次工作的持续时间,时间变量,每个小组经理的因素等等。只需将它们作为其他变量包括在回归中即可。


哇,这有很多好处。不过,我想我不确定如何从这些图表中分辨出谁是最努力的工人。
格雷格·古达

这些图表是按每个工人编制的吗?
格雷格·吉达

右下角的面板显示所有1,000个估算值。最高的大约是200:它一直显示在右边。水平直方图和残差直方图还描绘了1,000名工人的结果。右上方的面板是工作的直方图,显示了将近5,000个工作的总工作量。
Whuber

好的,我了解了每个图表的含义,但是我不确定如何使用它们对工作人员进行排名。
格雷格·圭达

在右下方面板中从上到下。该代码还创建了这些结果的表格(称为results):您可以按估算值对其进行排序。你可以将它导出到电子表格,等等
whuber

7

您想要设置这样的数据,其中1表示该人是完成该行工作的团队的一部分:

 work.done Alice Bob Carl Dave Eve Fred Greg Harry Isabel
 1.6631071     0   1    1    0   1    0    0     0      0
 0.7951651     1   1    0    0   0    0    0     1      0
 0.2650049     1   1    1    0   0    0    0     0      0
 1.2733771     0   0    0    0   1    0    0     1      1
 0.8086390     1   0    1    0   0    0    0     0      1
 1.7323428     1   0    0    0   0    0    1     0      1
 ...

然后,您可以进行线性回归(假设所有内容都是累加的,等等,如您在评论中所述)。在中R,命令将是

lm(work.done ~ . + 0, data = my.data)

公式” work.done ~ . + 0用英语表示,完成的工作量取决于所有其他列(即“。”),没有工人的组将不执行任何工作(即“ + 0”)。这将为您提供每个工人对平均小组产出的大概贡献。

如评论中所述,如果您有一对总是在一起的工作人员,则该模型将不会区分两个工作人员的贡献,并且其中一个将获得“ NA”。


有1000个工人有关系吗?他以1-100为一组是什么意思?即使从2个编辑中得到澄清,我也看不到每个数据集在哪里标识组中的个人?我所知道的是每个人每天的工作量大致相同。由于你们中的一些人认为有可能通过回归明确地找到解决方案,那么基本的假设是什么?如何识别一个人的工作?我也对所有关于合作工作的讨论感到困惑。除了独立工作外,没有任何其他假设。
Michael R. Chernick

我看到的唯一约束是,每个人都可以通过大量试验设法完成相同数量的工作?似乎我们正在尝试翻译该inot明智的做法。但是很明显这就是OP的意图吗?
Michael R. Chernick

@MichaelChernick我不确定我是否理解您的关注。是同一个人在不同的试验中可以贡献不同的金额,还是更多?
David J. Harris

@DavidHarris如果您的假设正确,我认为您有一个不错的解决方案。但是我担心拥有这么多工人的每个人的可识别性。OP认为大样本量会有所帮助。但是需要有像您给出的结构和一些建模假设。我只是认为他没有指定解决问题所需的一切。
Michael R. Chernick

@MichaelChernick我认为,如果我们假设工人是独立的,那么线性模型是相当安全的,线性也可以保护我们免受可能遇到的某些问题的困扰。权重可能是正确的,这会有所帮助。如果存在可识别性问题,对工人和团体的随机影响可以帮助使参数估计保持理智。可能还有更多可以改进的地方,但是我仍然认为这是正确的,前提是假定工人基本上是独立的。
戴维·哈里斯
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.