POPGENE中文教程:从.NTS数据格式到Fst与Nm计算避坑指南
简介:这份PDF文档是POPGENE软件的中文使用教程参照,面向从事物种遗传分析、群体遗传学研究的科研人员与相关专业学生。POPGENE是一款基于Windows的免费遗传分析软件,采用C++编写,提供数据显示窗口与对话框两类计算环境,可完成基因频率、等位基因数量、有效等位基因数量、多态性位点、基因多样性、Shannon信息指数、F-统计量、基因流、遗传距离、树形图及中性检验等分析。教程系统梳理了软件窗口菜单的八大模块,并分别讲解单倍体与二倍体数据分析对话框的操作逻辑,涵盖单群体、分组与多群体三个层级结构,同时给出输入文件格式规范与示例,帮助读者快速掌握数据准备与参数设置方法。资源包内仅含1个PDF文件,大小约1.03MB,轻量便携,便于随时查阅。目前已有346人学习,适合需要借助POPGENE完成遗传多样性评估与群体结构分析的研究者参考使用。
1. 从一份 32 位时代的遗传分析手册说起:POPGENE 中文教程到底能帮你做什么
如果你手里有一批同工酶、RAPD 或者早期 SSR 的群体遗传数据,需要算 Nei 遗传距离、Fst、基因流 Nm、Shannon 信息指数,又不想为了一个指标去啃整套 R 包,那 POPGENE 大概率是你绕不开的名字。它诞生于 1990 年代,是加拿大阿尔伯塔大学 Francis Yeh 团队开发的群体遗传分析工具,1.31/1.32 版本至今仍被大量中文论文引用。问题在于,软件界面是英文的,输入文件格式又极其挑剔,很多刚接触群体遗传的研究生拿到数据后第一步就卡在“格式报错”上。这份《POPGENE中文使用教程参照.pdf》解决的正是这个断层:它把软件界面、数据格式、参数含义和结果文件逐项翻译成中文,让你不用在英文帮助文档和报错信息之间反复横跳。适合谁?做群体结构、遗传多样性、遗传分化分析的硕士博士,以及需要复现老论文指标的科研人员。不适合谁?只想跑 GWAS 或全基因组选择的人,POPGENE 的位点规模撑不住。
2. POPGENE 的数据格式与输入文件:从 Excel 到 .NTS 的完整转换
2.1 为什么 POPGENE 对输入格式如此苛刻
POPGENE 读取的是纯文本文件,默认扩展名是 .NTS,本质上是按固定列宽组织的 ASCII 文本。它不像 GenAlEx 那样能直接吞 Excel,也不像 Arlequin 那样有图形化导入向导。软件在解析时按行读取,第一行是标题,第二行开始是位点数和个体数,之后每个个体占一行,基因型用数字或字母编码。只要列宽错一位、分隔符多一个空格,程序就会抛出 “Error in reading data file” 或者直接闪退。这种“黑匣子”式的报错让很多人第一次用就翻车。理解它的解析逻辑,比反复试错更重要:POPGENE 期望的是“显式声明 + 定长字段”,而不是“智能推断”。
2.2 从 Excel 整理到 .NTS 的实操步骤
假设你有一份 Excel,第一列是群体编号,第二列是个体编号,后面每两列是一个位点的两个等位基因。先把它整理成 POPGENE 要求的顺序:所有群体按顺序排列,每个个体一行,位点等位基因依次排列。下面是一个 Python 转换脚本,把常见的“宽表”转成 .NTS 格式。
import pandas as pd # 读取原始 Excel,假设第一行是表头 df = pd.read_excel("raw_data.xlsx") # 群体列名和个体列名按实际修改 pop_col = "Population" ind_col = "Individual" # 位点列:假设每个位点两列,列名如 L1_a, L1_b, L2_a, L2_b ... loci_cols = [c for c in df.columns if c not in [pop_col, ind_col]] # 按群体排序,保证同一群体个体连续 df = df.sort_values(by=[pop_col, ind_col]) # 位点数 n_loci = len(loci_cols) // 2 # 个体数 n_ind = len(df) lines = [] # 第一行标题,可自定义 lines.append("POPGENE data converted from Excel") # 第二行:位点数 个体数 lines.append(f"{n_loci} {n_ind}") for _, row in df.iterrows(): # 每个位点两个等位基因,用空格分隔 alleles = [] for i in range(n_loci): a = str(row[loci_cols[2*i]]).strip() b = str(row[loci_cols[2*i+1]]).strip() alleles.append(f"{a} {b}") # 行首加个体编号或群体编号,POPGENE 允许但非必须 lines.append(" ".join(alleles)) with open("output.NTS", "w", encoding="ascii") as f: f.write("\n".join(lines))这段脚本的逻辑很直接:先按群体排序,确保同一群体的个体在文件中连续,因为 POPGENE 后续计算群体间指标时依赖这个顺序。第二行的两个数字必须严格对应位点数和个体数,写反了程序不会报错但结果全错。每个位点的两个等位基因之间用空格分隔,位点之间也用空格,不要用制表符。等位基因编码建议用数字(如 1/2/3)或单字母(A/B/C),不要用多字符字符串,否则列宽会乱。常见做法是先把 Excel 另存为 CSV,用脚本处理后再手动检查前 10 行,确认没有多余空格或空行。
2.3 参数文件与运行配置
POPGENE 运行时会生成一个 .NTS 同名但扩展名不同的配置文件,或者通过菜单手动设置。关键参数包括:位点类型(共显性/显性)、遗传距离模型(Nei 1972 / Nei 1978)、是否计算 Hardy-Weinberg 平衡、置换检验次数。对于 RAPD 这类显性标记,必须把位点类型设为显性,否则杂合子会被误判。置换检验次数默认 1000,如果只是初步探索可以降到 100 加快速度,但正式发表建议保持 1000 以上。这些参数在中文教程里都有对应截图,照着勾选即可,但要注意版本差异:1.31 和 1.32 的菜单布局略有不同,教程如果基于 1.31,1.32 用户需要多找一步。
3. 核心指标计算与结果解读:Fst、Nm、Shannon 指数怎么用
3.1 遗传多样性指标:Na、Ne、H、I
POPGENE 输出的第一个大表是各群体的遗传多样性参数。Na 是观测等位基因数,Ne 是有效等位基因数,H 是 Nei 基因多样性,I 是 Shannon 信息指数。新手最容易混淆的是 H 和 He:POPGENE 里的 H 通常指 Nei 1973 的基因多样性,等同于期望杂合度 He。解读时注意,Ne 永远小于等于 Na,如果出现 Ne 大于 Na,说明数据里有位点等位基因频率计算异常,常见原因是某些位点在所有个体中只有一种等位基因,有效等位基因数会趋近于 1 而不是 0。Shannon 指数 I 对显性标记更稳健,RAPD 数据建议优先看 I 而不是 H。这些指标在中文教程里通常有公式说明,但公式里的符号和软件输出列名不一定一一对应,需要对照结果文件里的列标题逐列确认。
3.2 群体分化:Fst、Gst 与基因流 Nm
Fst 和 Gst 是衡量群体间遗传分化的核心指标。POPGENE 同时输出两者,Fst 基于方差分析,Gst 基于 Nei 基因多样性。对于共显性标记,两者差异不大;对于显性标记,Gst 更常用。基因流 Nm 由 Fst 推导:Nm = (1 - Fst) / (4 * Fst)。当 Nm 大于 1 时,通常认为群体间基因流较高,分化较小;小于 1 则分化明显。但这里有个血泪经验:Nm 的解读高度依赖标记类型和样本量,小样本下 Nm 波动极大,不要拿单个位点的 Nm 下结论。中文教程里一般会给出 Nm 的计算公式和阈值参考,但不会强调样本量影响,这是需要自己补课的地方。
3.3 遗传距离与聚类分析
POPGENE 可以输出 Nei 遗传距离(Nei 1972)和遗传一致度,然后用于构建 UPGMA 或 NJ 树。但 POPGENE 本身不画树,它只输出距离矩阵,你需要把矩阵复制到 MEGA 或 NTSYS 里建树。常见坑是:距离矩阵的格式在不同软件间不兼容,POPGENE 输出的是下三角矩阵,MEGA 需要完整矩阵或特定格式。我一般会先把矩阵粘贴到 Excel,补全对称部分,再导入 MEGA。另外,Nei 1972 和 Nei 1978 距离在群体数较少时差异明显,教程里如果只提了一种,建议两种都算一遍对比。聚类结果的 bootstrap 支持率在 POPGENE 里无法直接生成,需要额外做置换检验,这一步中文教程往往省略,导致很多人以为 POPGENE 能直接出带支持率的树。
4. 避坑与排查:POPGENE 报错、结果异常与版本兼容
4.1 报错 “Error in reading data file”
现象:双击运行后弹出错误框,或者命令行一闪而过。原因:.NTS 文件格式不符合定长或空格分隔规则,常见于 Excel 直接改扩展名、行尾有不可见字符、位点数和个体数写反。解决:用 Notepad++ 打开文件,显示所有字符,检查是否有 \r\n 混用或多余空格;确认第二行两个数字的顺序是“位点数 个体数”;把文件另存为 ANSI 编码,不要用 UTF-8 with BOM。
4.2 结果里 Fst 为负值或 Nm 无穷大
现象:Fst 出现负数,Nm 显示为 inf 或极大值。原因:Fst 为负通常是因为群体内观测杂合度高于期望,可能是数据里杂合子过多,或者位点类型设错(显性标记当共显性算)。Nm 无穷大是 Fst 接近 0 时的数学结果,不代表真实基因流无限大。解决:检查位点类型设置,RAPD 必须选显性;如果 Fst 负值只出现在个别位点,可以接受,但整体为负需要重新检查数据编码;Nm 极大值时直接报告 Fst 即可,不要强行解释 Nm。
4.3 软件在 Windows 10/11 上无法运行或闪退
现象:双击图标没反应,或者打开后菜单乱码。原因:POPGENE 是 16 位/32 位程序,现代 64 位 Windows 不兼容,且默认字体不支持中文路径。解决:右键属性设置兼容模式为 Windows XP SP3,勾选“以 256 色运行”;把软件和 .NTS 文件放在纯英文路径下,路径中不要有空格和中文;如果仍然闪退,用 DOSBox 模拟环境运行,这是目前最稳的方案。
4.4 中文教程与软件版本不匹配
现象:照着教程点菜单,找不到对应选项。原因:教程基于 1.31,你装的是 1.32,或者反过来。解决:先确认软件版本号(帮助菜单关于),然后对照教程目录找对应章节;1.32 在遗传距离部分多了几个选项,但核心流程一致;如果教程截图里的按钮名称和你的界面不同,优先按功能找,不要死记位置。
4.5 输出结果文件乱码或列不对齐
现象:结果文件用记事本打开是一堆乱码,或者列标题和数字错位。原因:POPGENE 输出的是固定列宽文本,用 Word 或某些编辑器打开会重新换行。解决:用 Notepad++ 或 VS Code 打开,关闭自动换行,设置字体为等宽字体;如果列错位,检查原始 .NTS 文件里是否有某个等位基因编码长度不一致,比如有的用 1 有的用 10,导致列宽漂移。
5. 进阶技巧:用脚本批量处理 POPGENE 输出与结果验证
5.1 批量提取 Fst 和 Nm 并整理成表
POPGENE 每次运行只处理一个数据文件,如果你有几十个群体组合要算,手动复制结果会疯。常见做法是用 Python 批量调用 POPGENE 命令行模式(如果版本支持),或者至少批量解析输出文件。下面脚本从 POPGENE 输出的 .FST 文件里提取所有位点的 Fst 和 Nm,汇总成 CSV。
import re import pandas as pd def parse_fst_file(filepath): # POPGENE 输出的 Fst 文件通常包含每个位点的 Fst 和 Nm with open(filepath, "r", encoding="ascii", errors="ignore") as f: text = f.read() # 匹配类似 "Locus1 0.1234 1.776" 的行,具体正则按实际输出调整 pattern = re.compile(r"(\S+)\s+([-\d.]+)\s+([-\d.]+)") records = [] for line in text.splitlines(): m = pattern.match(line.strip()) if m: locus, fst, nm = m.groups() # 过滤掉表头行 if locus.lower() in ("locus", "mean", "total"): continue records.append({"Locus": locus, "Fst": float(fst), "Nm": float(nm)}) return pd.DataFrame(records) # 批量处理多个输出文件 import glob all_dfs = [] for fp in glob.glob("outputs/*.FST"): df = parse_fst_file(fp) df["File"] = fp all_dfs.append(df) final = pd.concat(all_dfs, ignore_index=True) final.to_csv("fst_summary.csv", index=False)这段脚本的关键在于正则匹配。POPGENE 不同版本输出的列顺序可能不同,有的先 Fst 后 Nm,有的相反,所以先用一个文件测试正则,确认捕获组对应正确。errors="ignore"是为了跳过可能的非 ASCII 字符。汇总后的 CSV 可以直接丢进 R 或 SPSS 做后续统计。注意:如果输出文件里有多行表头或分隔线,正则要相应调整,不要指望一个模式通吃所有版本。
5.2 用模拟数据验证 POPGENE 结果
POPGENE 没有内置的模拟模块,但你可以用 Python 生成已知 Fst 的模拟数据,跑一遍 POPGENE,看输出是否接近理论值。比如用msprime或简单的随机漂变模拟,生成两个群体、每个群体 50 个体、10 个 SSR 位点的数据,设置真实 Fst 为 0.05,然后转成 .NTS 格式跑 POPGENE。如果输出 Fst 在 0.03 到 0.07 之间,说明流程没问题;如果偏离很大,检查位点类型和样本量。这个验证步骤在中文教程里通常没有,但它是区分“会点菜单”和“真正理解工具”的分水岭。我一般会在正式分析前用模拟数据走一遍全流程,确认参数设置和输出解读没有系统性偏差。
5.3 结果报告里必须写清楚的三个参数
最后,不管你算多少指标,报告里一定要写清楚:位点类型(共显性/显性)、置换检验次数、样本量(每个群体的个体数)。这三个参数直接影响 Fst 和 Nm 的可信度。中文教程可能只教你点按钮,但审稿人会追问这些。从那以后我每次跑 POPGENE,都会在结果文件旁边建一个README.txt,把这三项和软件版本号写进去,免得半年后自己都忘了当时怎么设的。希望帮到你。
本文还有配套的精品资源,点击获取