如何计算给定DataFrame分组数据的组间平方和SSB
Pandas 分组数据组间平方和(SSB)计算方法
示例数据集
本次计算使用的结构化DataFrame格式如下:
variable value 0 G1 1 1 G1 2 2 G2 3 3 G2 4 4 G3 5 5 G3 6
计算逻辑
组间平方和核心计算逻辑和给出的参考公式一致:
SSB = 所有分组的「组内观测值和的平方/组样本量」之和 - 「全体观测值和的平方/总样本量」
针对当前示例数据,手动代入计算的过程为:G1组和为3、G2组和为7、G3组和为11,总观测和为21、总样本量为6,最终SSB = (3²/2 + 7²/2 + 11²/2) - 21²/6 = 16。
代码实现
直接用pandas原生分组聚合即可完成计算,不需要额外依赖,同时兼容组样本量不一致的场景:
import pandas as pd # 1. 未加载数据时可先构造示例数据集,已有目标df可跳过此段 df = pd.DataFrame({ 'variable': ['G1', 'G1', 'G2', 'G2', 'G3', 'G3'], 'value': [1, 2, 3, 4, 5, 6] }) # 2. 分组统计每组的观测和、组内样本量 group_agg = df.groupby('variable')['value'].agg(group_sum='sum', group_size='count') # 3. 计算全局统计量 total_sum = df['value'].sum() total_count = len(df) # 4. 代入公式得到SSB结果 ssb = (group_agg['group_sum'] ** 2 / group_agg['group_size']).sum() - (total_sum ** 2 / total_count)
运行代码后得到的ssb值为16.0,和手动计算结果完全一致。
内容的提问来源于stack exchange,提问作者Malik Ergin
相关产品推荐
相关产品推荐

