Genetics1003: Chi-Square Calculator
一个功能完整的Python卡方检验计算器,支持:
- 拟合优度检验 (Goodness-of-fit test)
- 列联表独立性检验 (Contingency table test)
- 2×2列联表(支持Yates连续性校正)
- 2×3列联表
- R×C列联表(任意行列数)
- 哈温平衡检验 (Hardy-Weinberg Equilibrium test)
功能特点
拟合优度检验
- ✅ 计算卡方统计量
- ✅ 计算自由度
- ✅ 计算p值(使用Wilson-Hilferty近似)
- ✅ 支持等比例期望分布
- ✅ 支持自定义期望频数
- ✅ 支持自定义期望比例
- ✅ 数据输入验证
- ✅ 支持零期望频数的特殊处理
列联表检验
- ✅ 支持2×2、2×3及任意R×C列联表
- ✅ 标准卡方检验
- ✅ Yates连续性校正(仅适用于2×2表)
- ✅ 自动判断是否需要校正(当期望频数<5时)
- ✅ 支持手动强制使用或禁用校正
- ✅ 计算边际总计
- ✅ 计算期望频数
- ✅ 显示观察频数与期望频数对比
哈温平衡检验
- ✅ 自动计算等位基因频率
- ✅ 计算期望基因型频率
- ✅ 卡方检验判断是否符合哈温平衡
- ✅ 显示观察基因型与期望基因型对比
- ✅ 显示等位基因频率和基因型频率
安装要求
- Python 3.6+
- 无额外依赖(仅使用标准库)
使用方法
1. 运行示例
python genetics1003.py
这将运行多个预设的示例,包括拟合优度检验、列联表检验和哈温平衡检验。
2. 命令行参数
拟合优度检验 - 等比例期望分布
python genetics1003.py -o 10 15 20 25
拟合优度检验 - 指定期望频数
python genetics1003.py -o 10 15 20 25 -e 12 14 18 26
拟合优度检验 - 指定期望比例
python genetics1003.py -o 45 55 -p 0.5 0.5
2×2列联表检验
# 输入格式:按行输入所有值
python genetics1003.py -t 20 10 5 15
# 自动识别为2×2表:[[20, 10], [5, 15]]
2×2列联表检验 - 使用Yates校正
# 不带--yates参数:自动判断(期望频数<5时自动使用校正)
python genetics1003.py -t 4 20 20 99
# 输出会显示:(with Yates' continuity correction)
# 带--yates参数:强制使用校正(无论期望频数大小)
python genetics1003.py -t 20 10 5 15 --yates
# 带--no-auto-yates参数:禁用自动校正(即使期望频数<5)
python genetics1003.py -t 4 20 20 99 --no-auto-yates
# 输出不会显示:(with Yates' continuity correction)
Yates校正的使用规则:
-
默认行为(不带任何参数):
- 程序会自动检测所有单元格的期望频数
- 如果任何一个期望频数 < 5,自动使用Yates连续性校正
- 如果所有期望频数 ≥ 5,不使用校正
-
强制使用校正(
--yates):- 无论期望频数大小,强制使用Yates校正
-
禁用自动校正(
--no-auto-yates):- 即使期望频数 < 5,也不使用Yates校正
- 使用标准卡方检验
注意:--yates 和 --no-auto-yates 不能同时使用
2×3列联表检验
# 输入格式:按行输入所有6个值,然后指定行数和列数
python genetics1003.py -t 20 10 15 5 8 12 --rows 2 --cols 3
# 表格结构:
# [[20, 10, 15],
# [5, 8, 12]]
3×3列联表检验
python genetics1003.py -t 10 15 20 5 8 12 7 9 14 --rows 3 --cols 3
# 表格结构:
# [[10, 15, 20],
# [5, 8, 12],
# [7, 9, 14]]
哈温平衡检验
# 提供三种基因型的计数(AA Aa aa)
python genetics1003.py --hw 50 40 10
自定义显著性水平
python genetics1003.py -o 20 30 25 15 -a 0.01
3. 参数说明
通用参数
-a, --alpha: 显著性水平(可选,默认0.05)
拟合优度检验参数
-o, --observed: 观察频数(必需)-e, --expected: 期望频数(可选)-p, --proportions: 期望比例(可选,必须和为1.0)
列联表检验参数
-t, --table: 列联表的所有值,按行输入(必需)--rows: 表格行数(可选,2×2表会自动识别)--cols: 表格列数(可选,2×2表会自动识别)--yates: 强制使用Yates连续性校正(仅适用2×2表)--no-auto-yates: 禁用自动Yates校正,即使期望频数<5也不使用校正(仅适用2×2表)
重要说明:
- 对于2×2表(4个值),如果不指定
--rows和--cols,程序会自动识别为2×2表 - 对于其他尺寸的表格,必须同时指定
--rows和--cols参数 - 输入值按行的顺序输入,如2×3表:row1_col1 row1_col2 row1_col3 row2_col1 row2_col2 row2_col3
哈温平衡检验参数
--hw, --hardy-weinberg: 三种基因型的计数(必需,格式:AA Aa aa)
输出解释
拟合优度检验输出
计算器会输出:
- 卡方统计量
- 自由度
- p值
- 显著性水平
- 检验结论(拒绝或接受原假设)
- 观察频数与期望频数对比表
列联表检验输出
计算器会输出:
- 表格维度(如2×2、2×3等)
- 卡方统计量
- 是否使用Yates校正(仅2×2表)
- 自由度
- p值
- 显著性水平
- 检验结论(变量是否相关)
- 观察频数表(含行列边际总计)
- 期望频数表
哈温平衡检验输出
计算器会输出:
- 卡方统计量
- 自由度(双等位基因系统固定为1)
- p值
- 显著性水平
- 检验结论(是否符合哈温平衡)
- 等位基因频率(p和q)
- 观察基因型频率与期望基因型频率对比表
- 理论哈温平衡比例(p²:2pq:q²)
数学原理
拟合优度检验
卡方统计量计算
χ² = Σ[(观察频数 - 期望频数)² / 期望频数]
自由度计算
df = 类别数 - 1
列联表检验
R×C列联表格式
对于R行C列的列联表:
列1 列2 列3 ... 列C
行1 n11 n12 n13 ... n1C
行2 n21 n22 n23 ... n2C
... ... ... ... ... ...
行R nR1 nR2 nR3 ... nRC
期望频数计算
E_ij = (行i总计 × 列j总计) / 总计
卡方统计量计算
χ² = ΣΣ[(O_ij - E_ij)² / E_ij]
对所有行i和列j求和
自由度
df = (行数 - 1) × (列数 - 1)
例如:
- 2×2表:df = (2-1) × (2-1) = 1
- 2×3表:df = (2-1) × (3-1) = 2
- 3×3表:df = (3-1) × (3-1) = 4
Yates连续性校正(仅适用于2×2表)
当期望频数 < 5 时建议使用:
χ² = Σ[(|O_ij - E_ij| - 0.5)² / E_ij]
哈温平衡检验
等位基因频率计算
对于双等位基因系统(A和a),根据观察的基因型计数:
- p(等位基因A的频率)= (2×AA + Aa) / (2×总数)
- q(等位基因a的频率)= (2×aa + Aa) / (2×总数)
其中 p + q = 1
期望基因型频率(哈温平衡下)
在哈温平衡状态下,基因型频率应该满足:
- AA的频率 = p²
- Aa的频率 = 2pq
- aa的频率 = q²
其中 p² + 2pq + q² = 1
期望基因型计数
期望计数 = 期望频率 × 总数
- 期望AA数 = p² × N
- 期望Aa数 = 2pq × N
- 期望aa数 = q² × N
卡方统计量计算
χ² = Σ[(观察基因型数 - 期望基因型数)² / 期望基因型数]
自由度
df = 基因型数 - 等位基因数 = 3 - 2 = 1
p值计算
使用Wilson-Hilferty近似方法将卡方分布转换为正态分布进行计算。
示例输出
拟合优度检验示例
============================================================
CHI-SQUARE GOODNESS-OF-FIT TEST RESULTS
============================================================
Chi-square statistic: 4.6000
Degrees of freedom: 5
P-value: 0.467802
Significance level (α): 0.05
Conclusion: Fail to reject H0
Observed vs Expected Frequencies:
----------------------------------------
Category Observed Expected Difference
----------------------------------------
1 8 10.00 -2.00
2 12 10.00 2.00
3 10 10.00 0.00
4 15 10.00 5.00
5 7 10.00 -3.00
6 8 10.00 -2.00
============================================================
2×2列联表检验示例
============================================================
CHI-SQUARE TEST FOR 2×2 CONTINGENCY TABLE
============================================================
Chi-square statistic: 18.1818
(with Yates' continuity correction)
Degrees of freedom: 1
P-value: 0.000020
Significance level (α): 0.05
Conclusion: Reject H0 (variables are associated)
Observed Frequencies:
----------------------------------------
Column 1 Column 2 Total
Row 1 60 40 100
Row 2 30 70 100
Total 90 110 200
Expected Frequencies:
----------------------------------------
Column 1 Column 2
Row 1 45.00 55.00
Row 2 45.00 55.00
============================================================
2×3列联表检验示例
============================================================
CHI-SQUARE TEST FOR 2×3 CONTINGENCY TABLE
============================================================
Chi-square statistic: 5.8447
Degrees of freedom: 2
P-value: 0.053876
Significance level (α): 0.05
Conclusion: Fail to reject H0 (variables are independent)
Observed Frequencies:
------------------------------------------------------------
Col 1 Col 2 Col 3 Total
Row 1 20 10 15 45
Row 2 5 8 12 25
Total 25 18 27 70
Expected Frequencies:
------------------------------------------------------------
Col 1 Col 2 Col 3
Row 1 16.07 11.57 17.36
Row 2 8.93 6.43 9.64
============================================================
哈温平衡检验示例
============================================================
HARDY-WEINBERG EQUILIBRIUM TEST
============================================================
Chi-square statistic: 0.0000
Degrees of freedom: 1
P-value: 1.000000
Significance level (α): 0.05
Conclusion: Fail to reject H0 (in Hardy-Weinberg equilibrium)
Allele Frequencies:
----------------------------------------
Frequency of A allele (p): 0.6000
Frequency of a allele (q): 0.4000
p + q = 1.0000
Genotype Frequencies:
----------------------------------------
Genotype Observed Expected Difference
----------------------------------------
AA 36 36.00 0.00
Aa 48 48.00 0.00
aa 16 16.00 0.00
----------------------------------------
Total 100 100.00
Expected Hardy-Weinberg Proportions:
AA (p^2): 0.3600
Aa (2pq): 0.4800
aa (q^2): 0.1600
============================================================
注意事项
拟合优度检验
- 所有频数必须为非负数
- 期望比例必须和为1.0
- 期望频数可以为零,但有特殊处理:
- 如果期望频数为0且观察频数也为0:对卡方统计量的贡献为0
- 如果期望频数为0但观察频数不为0:卡方统计量为正无穷(拒绝原假设)
- 观察频数和期望频数(或比例)的长度必须相同
列联表检验
- 所有频数必须为非负数
- 表格必须至少有2行2列
- Yates校正的自动判断机制(仅适用2×2表):
- 程序会自动计算所有单元格的期望频数
- 当任何一个期望频数 < 5时,自动使用Yates校正
- 当所有期望频数 ≥ 5时,不使用校正
- 使用
--yates参数可以强制使用校正(无论期望频数大小) - 使用
--no-auto-yates参数可以禁用自动校正(即使期望频数<5) - 输出会明确显示是否使用了校正:"(with Yates' continuity correction)"
- 总计不能为0
- R×C表注意事项:
- 对于大于2×2的表格,不支持Yates校正
- 建议每个单元格的期望频数 ≥ 5
- 如果期望频数过小,考虑合并相邻类别
哈温平衡检验
- 必须提供恰好3种基因型的计数(AA, Aa, aa)
- 所有计数必须为非负数
- 总计数不能为0
- 适用于双等位基因系统
- 假设条件:
- 种群足够大(无遗传漂变)
- 随机交配
- 无突变
- 无迁入迁出
- 无自然选择
- 如果拒绝哈温平衡假设,可能原因包括:
- 非随机交配(近亲繁殖或异型交配)
- 自然选择作用
- 种群分层
- 基因型判定错误
- 样本量过小
应用场景
拟合优度检验应用
- 遗传学:检验观察比例是否符合理论比例
- 质量控制:检验产品缺陷率是否符合标准
- 市场调研:检验消费者偏好是否符合预期分布
- 教育评估:检验考试成绩分布是否符合正态分布
- 骰子/硬币公平性检验
列联表检验应用
2×2列联表:
- 医学研究:检验治疗效果与疾病结果的关联性
- 社会学:检验性别与偏好的独立性
- 流行病学:检验暴露因素与疾病的关联
- A/B测试:检验不同版本与转化率的关联
2×3列联表:
- 医学研究:检验三种治疗方案与疾病结果(治愈/未治愈)的关联
- 市场调研:检验产品类型(三种)与客户满意度(满意/不满意)的关系
- 教育研究:检验教学方法(三种)与学生成绩(及格/不及格)的关联
- 遗传学:检验基因型(三种)与表型(两种)的关联
R×C列联表(一般情况):
- 社会调查:检验年龄组与职业类别的关联性
- 生物学:检验物种类型与栖息地类型的关联
- 教育评估:检验专业与就业行业的关联
- 市场分析:检验地区与产品偏好的关联
哈温平衡检验应用
- 群体遗传学:检验种群是否处于遗传平衡状态
- 疾病基因研究:检验疾病相关基因型频率分布
- 进化生物学:检测选择压力或非随机交配
- 法医学:验证基因型频率数据库的可靠性
- 育种学:评估种群遗传结构
- 人类遗传学:检测种群分层或近亲繁殖
- 保护生物学:评估濒危物种的遗传多样性
更新日志
v2.1 (2025-12-02)
- ✨ 新增
--no-auto-yates参数,可手动禁用自动Yates校正功能 - 🐛 修复2×2表不带参数时无法自动使用Yates校正的bug
- 📝 完善Yates校正使用规则的文档说明
- 🔧 优化2×2表的校正逻辑判断
v2.0 (2025-12-02)
- ✨ 新增支持2×3及任意R×C列联表卡方检验
- ✨ 改进命令行参数处理,支持自动识别2×2表
- ✨ 统一列联表输入方式,使用更直观的行列参数
- 📝 更新README文档,添加详细的2×3列联表使用说明
- 🔧 优化代码结构,添加通用列联表计算器类
v1.0 (2025)
- 初始版本
- 支持拟合优度检验
- 支持2×2列联表检验(含Yates校正)
- 支持哈温平衡检验
作者
AI Assistant - 2025
Metadata
Release files for genetics1003 2.1.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| genetics1003-2.1.1.tar.gz | 17.3 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| genetics1003-2.1.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 33.8 kB
Release files / genetics1003-2.1.1.tar.gz
| Download URL | genetics1003-2.1.1.tar.gz |
|---|---|
| Size | 17.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
452ff6a739f3eddb7b924219d40b8d5ebe99e1a66376add95d54c0bcda0b7f6f
|
|
BLAKE2b-256 checksum How to use checksums |
f04d68c1d63719941c34a7c7b8c1ffd83e79113a1103e55d291db81c36e59fe8
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.14.0
|
Release files / genetics1003-2.1.1-py3-none-any.whl
| Download URL | genetics1003-2.1.1-py3-none-any.whl |
|---|---|
| Size | 16.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
14ba26d7efc8c031c6780f9aaec441ddaf5e9471911f46ea67df3172cf9fdfc5
|
|
BLAKE2b-256 checksum How to use checksums |
b8f8c8ad141e4bda36435a0e3f66b4ae1f696e72a7fb8d87160beaaf520b8154
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.14.0
|