Chi-Square Calculator for Genetics and Statistics (Goodness-of-Fit, Contingency Tables, Hardy-Weinberg)
Project description
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
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file genetics1003-2.1.0.tar.gz.
File metadata
- Download URL: genetics1003-2.1.0.tar.gz
- Upload date:
- Size: 17.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.8
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1300bd2a3335df13d98d13732bdfe78923396fe238164e14f7e3ff82609bcd0c
|
|
| MD5 |
2f96dadf7c757c4af52e700e53c46905
|
|
| BLAKE2b-256 |
44574febd1a798ea32a32820bc8180e25babfbeed12cfcbd6ba337af85a26642
|
File details
Details for the file genetics1003-2.1.0-py3-none-any.whl.
File metadata
- Download URL: genetics1003-2.1.0-py3-none-any.whl
- Upload date:
- Size: 16.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.8
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6048e20b00ba9c9b2d29b2a9de21da4faf24cd1274c6f830b4f1c0f996d50726
|
|
| MD5 |
b28a1bcd087c47f5c6f53c82c479d196
|
|
| BLAKE2b-256 |
cb788756970130a0cd4ece55893969f20be16ad048fcb202b10e30c41b825eb0
|