如何在Excel中基于Category列对Value列执行CHITEST?
如何在Excel中基于多组Category数据执行CHITEST卡方检验?
嘿,我懂你的痛点——Excel自带的CHITEST示例大多只用两行数据,但其实这个函数完全支持任意行数和列数的矩阵,只要观测值和期望值的维度完全匹配就行。结合你的数据,我给你一步步拆解实现方法:
1. 先搞懂CHITEST的核心规则
CHITEST的语法很简单:
=CHITEST(actual_range, expected_range)
两个参数的核心要求:
actual_range:你的观测频数矩阵(按Category分组后,不同Value区间的实际数量)expected_range:对应的期望频数矩阵(通过统计公式算出的理论值)
两者必须是行数、列数完全一致的单元格区域——这是唯一的硬性要求,根本不限定只能两行。
2. 构建观测值矩阵
首先得把你的原始数据转换成「Category × Value分组」的频数统计表:
第一步:给Value划分区间
根据你的数据分布,我把Value分成了3个区间(你可以按需调整规则):
- 低:≤50
- 中:51-99
- 高:≥100
第二步:统计每个Category在各区间的数量
对着你的原始数据统计后,得到观测频数表:
| 低(≤50) | 中(51-99) | 高(≥100) | |
|---|---|---|---|
| Category A | 1 | 1 | 2 |
| Category B | 2 | 1 | 0 |
把这个表格的数值部分输入到Excel的空白区域(比如A10:C11)。
3. 计算期望值矩阵
期望值的计算公式是:(当前行的总计 × 当前列的总计) / 总样本数
举个例子,Category A的「低」组期望值:(4×3)/7 ≈1.714(A组共4个样本,低区间共3个样本,总样本数为7)
按这个公式算出所有单元格的期望值,得到:
| 低(≤50) | 中(51-99) | 高(≥100) | |
|---|---|---|---|
| Category A | ~1.714 | ~1.143 | ~1.143 |
| Category B | ~1.286 | ~0.857 | ~0.857 |
把这个结果放到另一个空白区域(比如E10:G11)。
4. 执行CHITEST计算
现在直接调用函数,把观测值和期望值的区域填进去:
=CHITEST(A10:C11, E10:G11)
按下回车,就能得到卡方检验的p值了。
额外注意事项
- 如果你的需求是检验「Category和Value的关联性」,上面的方法完全适用;如果是检验拟合度(比如看Category A的Value是否符合某个理论分布),只需要把期望值换成对应的理论频数即可。
- 要是期望频数里有单元格数值小于5,CHITEST的结果可能会不准确——这时候可以合并相邻的分组来解决这个问题。
内容的提问来源于stack exchange,提问作者Kasra
相关产品推荐
相关产品推荐

