TATECHATLAS
◎ 简体中文
数学与模型

将组平均值与其实际分母结合

了解为什么不同大小的组会产生合并平均值 18 而不是 15,并附有简短的 Python 示例。

本文内容

要合并兼容观测值的算术平均值,应按每个组平均值实际使用的观测数量对其进行加权。一个由2个观测值组成、平均值为10的组,与一个由8个观测值组成、平均值为20的组,合并结果为 (2*10 + 8*20)/10 = 18。它们的未加权平均值为15,回答的是另一个不同问题。请始终在报告的每个平均值中保留其分母,尤其是在排除了缺失值的情况下。

明确正在平均的量

在合并摘要之前,请确认它们描述的是相同单位下、在兼容的纳入规则下相同的量。以秒为单位测量的响应时间不能直接与以毫秒为单位报告的响应时间合并,除非进行转换。还要区分每个观测值的平均值与每个组的平均值。两者都可能有意义,但它们对小组和大组赋予的重要性不同。

保留每个平均值所使用的分母

对于算术平均值,将平均值乘以其观测数量可以重构组总量(受舍入影响)。将这些总量相加,再除以总计数,即可得到不相交的兼容组的合并平均值。该计数必须指的是对平均值有贡献的观测值。如果只有部分成员提供了测量值,那么标称的部门规模是错误的分母。

计算不等组的示例

构造组 A,其计数为 2,平均值为 10,因此其总量为 20。组 B 的计数为 8,平均值为 20,总量为 160。合并总量为 180,观测数为 10,因此平均值为 18。直接对 10 和 20 求平均得到 15,因为它为两个组分配了相等的权重。这些假设的摘要展示了区别,并不声称来自观测数据集或基准测试。

使用简短的 Python 计算

Python 3.11 及更高版本支持在 statistics.fmean 中使用权重。该示例提供了平均值及其匹配的计数,生成的预期值为 18.0。该代码不会检索数据集,也不会验证计数是否收集正确。请将其视为对所提供输入的计算。如果需要精确的十进制会计,请单独考虑数值表示,而不要假设浮点输出对所有值都是精确的。

from statistics import fmean

group_means = [10, 20]
observed_counts = [2, 8]
combined_mean = fmean(group_means, weights=observed_counts)
print(combined_mean)

通过兼容计数合并百分比

假设一个组有 2 次试验中有 1 次成功,另一个组有 8 次试验中有 4 次成功。合并成功比例为 5/10,即 50%。一般来说,应保留成功计数和试验计数,而不是在没有分母的情况下对显示的百分比求平均。试验的不同定义或重叠的组都会使简单的合并解释无效。计数还避免了因百分比为了展示而被舍入而导致的一些信息损失。

一致地处理缺失观测值

在排除缺失值后计算的平均值,必须与同一变量和同一纳入规则下的非缺失观测值数量配对。即使在一个组内,不同列的有效计数也可能不同。pandas 的 mean 可以跳过缺失值,因此原始行计数并不是自动合适的权重。如果缺失是系统性的,正确的算术运算无法消除由此产生的代表性问题。

诊断意外的相等加权

当合并后的数字看起来令人惊讶时,请在更改公式之前写下每个平均值、计数和重构的总量。检查预期问题是对组赋予相等重要性,还是对个体观测值赋予相等重要性。组平均值的相等加权适用于明确的组层面问题,并且当组计数相等时可能与合并一致。但当计数不同时,不应将其悄悄地呈现为整体观测值层面的平均值。

认识摘要合并的局限性

中位数的算术加权平均值无法恢复合并中位数。诸如速度之类的速率可能需要根据所保持的暴露不同而采用不同的公式。重叠的组可能会将同一观测值计算多次。舍入的平均值会引入重构误差,总权重为零则没有定义的合并平均值。在可行的情况下保留原始总量和计数,并说明摘要不包含哪些信息。

检查清单

  • 检查单位和纳入规则。
  • 在每个平均值中保留实际的非缺失值计数。
  • 区分观测值层面和组层面的问题。
  • 百分比应优先使用原始分子和分母计数。
  • 不要使用平均值公式来合并中位数。

合并假设的是具有对应计数的兼容算术平均值,且不存在无意的重复计数。它无法修复缺失数据偏差、恢复合并中位数,也无法为每一种速率确定正确的公式。Python 加权示例需要 Python 3.11 或更高版本。

参考来源

  1. Python: statistics and weighted fmean ↗
  2. pandas: DataFrame mean and missing values ↗
返回顶部 ↑