简介:这份PDF面向遗传学、生态学与育种领域的初学者及科研人员,系统讲解POPGENE这一基于Windows的免费物种遗传分析软件的中文操作流程,帮助读者快速上手群体遗传参数计算与结果解读。资源包内仅含1个PDF文件,大小约1.03MB,内容以图文并茂的方式呈现,便于对照软件界面逐步学习。教程完整梳理了POPGENE的窗口菜单结构,涵盖File、Edit、Search、Co-Dominant、Dominant、Quantitative等八大模块,并重点展开Haploid Data Analysis与Diploid Data Analysis两个对话框的功能说明,包括基因频率、等位基因数量、有效等位基因数量、多态性位点、基因多样性、Shannon信息指数、F-统计量、基因流、遗传距离、树形图、中性检验及两位点连锁不平衡等分析项。同时,教程还给出输入文件格式规范,说明表头限定符号、群体与位点数量、位点名称及数据书写要求,并附有单倍体与二倍体数据的输入示例。目前已有346人学习,适合需要借助POPGENE完成群体遗传结构评估与遗传多样性分析的读者参考。
1. POPGENE中文使用教程参照.pdf:从零跑通群体遗传学分析的第一份实操地图
如果你手头有一批等位基因频率数据,想算遗传多样性、F统计量、Nei遗传距离,又不想从零写R脚本或Python代码,那POPGENE大概率是你绕不开的工具。它是一款经典的群体遗传学分析软件,在中文研究圈里被大量引用,尤其在植物、动物、微生物群体遗传结构分析中出场率极高。但它的原始界面是DOS风格的,操作逻辑和现代软件差别很大,很多人第一次打开就卡在数据格式上。这份“POPGENE中文使用教程参照.pdf”本质上就是帮你跨过这道门槛的操作手册——它不讲群体遗传学理论推导,而是告诉你数据怎么排、参数怎么填、结果怎么读。适合手里有分子标记数据(SSR、ISSR、RAPD、AFLP等)、需要快速出遗传多样性指标的研究生和一线科研人员。如果你正在找一份能照着做、不绕弯子的POPGENE上手路径,下面的内容就是按这个目标组织的。
2. POPGENE的数据格式与输入文件准备:把Excel表格变成软件认的格式
POPGENE对输入文件的格式要求非常死板,这是绝大多数人翻车的第一站。它不认Excel的.xlsx,也不认带表头的CSV,只认一种特定排列的纯文本文件。理解这个格式的逻辑,比死记硬背更重要。
2.1 POPGENE输入文件的底层结构
POPGENE的输入文件本质上是一个按位点排列的矩阵。文件开头是标题行和位点数、群体数、个体数等元信息,之后每个位点单独成块,块内按群体分组,每个个体占一行,用数字或字母表示等位基因型。对于共显性标记(如SSR),每个位点有两个等位基因,用空格或逗号分隔;对于显性标记(如RAPD),通常用1/0表示有带/无带。
常见做法是:先在Excel里把原始数据整理成“个体×位点”的矩阵,每个单元格填等位基因编号(如1、2、3),然后另存为制表符分隔的.txt文件,再用脚本转换成POPGENE要求的格式。手动改格式在群体数超过5个、位点超过10个时几乎必然出错,所以建议直接写脚本处理。
2.2 用Python把Excel数据转成POPGENE输入文件
下面这段代码读取一个Excel文件,假设第一列是群体编号,第二列是个体编号,从第三列开始每个位点占两列(两个等位基因),输出POPGENE可识别的.txt文件。
import pandas as pd # 读取Excel,假设无表头,第一列群体,第二列个体,后续每两列一个位点 df = pd.read_excel("raw_data.xlsx", header=None) # 基本信息 n_pop = df[0].nunique() # 群体数 n_ind = df.shape[0] # 个体总数 n_loc = (df.shape[1] - 2) // 2 # 位点数 # 位点名称,按顺序生成 loc_names = [f"Locus{i+1}" for i in range(n_loc)] # 打开输出文件 with open("popgene_input.txt", "w") as f: # 第一行:标题(可自定义),位点数、群体数、个体数 f.write(f"POPGENE input file\n") f.write(f"{n_loc} {n_pop} {n_ind}\n") # 第二行:位点名称 f.write(" ".join(loc_names) + "\n") # 第三行:每个位点的等位基因数(这里假设每个位点等位基因数已知,需手动确认) # 示例:假设每个位点最多4个等位基因,实际需根据数据调整 allele_counts = [4] * n_loc f.write(" ".join(map(str, allele_counts)) + "\n") # 按位点逐块输出 for loc_idx in range(n_loc): f.write(f"Locus {loc_idx+1}\n") # 按群体分组 for pop_id in sorted(df[0].unique()): sub = df[df[0] == pop_id] f.write(f"Pop {pop_id}\n") for _, row in sub.iterrows(): # 每个位点取两列 a1 = row[2 + loc_idx*2] a2 = row[3 + loc_idx*2] f.write(f"{a1} {a2}\n")这段代码的核心逻辑是:先统计元信息,再按位点分块,块内按群体分组,每个个体输出两个等位基因。参数方面,allele_counts需要根据实际数据填写,如果某个位点只有2个等位基因,就写2,写多了POPGENE会报错或读入空等位基因。loc_names可以改成你真实的位点名称,比如SSR引物名。输出文件建议用纯英文路径,避免中文路径导致的读取失败。
2.3 显性标记数据的特殊处理
如果你用的是RAPD、ISSR这类显性标记,数据通常是0/1矩阵。POPGENE对显性标记的处理方式不同,它需要你指定哪些位点是显性,并且等位基因编码通常用1表示有带、0表示无带。常见做法是:把0/1矩阵转成每个位点一列,每个个体一行,然后在POPGENE里选择“Dominant”标记类型。注意,显性标记不能直接计算杂合度,POPGENE会基于Hardy-Weinberg假设进行估算,这一点在结果解读时要特别小心。
提示:输入文件里的空格和换行必须严格一致,多一个空格或少一个换行都可能导致“Unexpected end of file”错误。建议用Notepad++打开,开启“显示所有字符”检查。
3. POPGENE参数设置与运行:从遗传多样性到遗传距离的完整操作
数据格式搞定后,下一步是在POPGENE里选择正确的分析选项。POPGENE的菜单是层级式的,很多选项名称缩写很隐晦,第一次用容易点错。下面按分析目标拆解参数设置。
3.1 遗传多样性分析:Na、Ne、H、I四个指标怎么选
打开POPGENE后,主菜单通常有“Data”、“Analysis”、“Results”等选项。做遗传多样性分析,路径一般是:Analysis → Genetic Diversity。这时会弹出几个子选项:
- Na(Observed number of alleles):观测等位基因数,直接由数据统计得出。
- Ne(Effective number of alleles):有效等位基因数,基于等位基因频率计算,公式为1/Σp²。
- H(Nei's gene diversity):Nei's基因多样性,也叫期望杂合度。
- I(Shannon's Information index):Shannon信息指数,常用于衡量遗传多样性。
这四个指标通常一起输出,不需要单独选择。但要注意,POPGENE默认会同时计算所有位点和所有群体的平均值。如果你只想看某个群体的结果,需要在“Options”里指定群体编号。
参数设置上,有一个容易忽略的点:“Gametic phase”选项。对于共显性标记,选“Known”或“Unknown”会影响单倍型频率的估算。如果你没有家系信息,一般选“Unknown”。这个选项在数据量大的时候对结果影响不大,但在位点间连锁不平衡分析时会影响显著性。
3.2 遗传距离与聚类分析:Nei和Nei’s标准遗传距离的区别
POPGENE提供多种遗传距离矩阵,最常用的是Nei's genetic distance(D)和Nei's standard genetic distance(Ds)。两者的区别在于是否校正小样本偏差。对于群体数较少(<10)或个体数较少(<20)的研究,建议用Ds,因为它对样本量更稳健。
操作路径:Analysis → Genetic Distance → 选择Nei或Nei’s standard → 选择输出格式(通常选下三角矩阵)。输出结果可以直接复制到MEGA或NTSYS里做聚类树。注意,POPGENE本身不画树,它只输出距离矩阵。如果你需要UPGMA树或NJ树,得把矩阵导出到其他软件。
一个血泪经验:POPGENE输出的距离矩阵默认是下三角格式,列之间用空格分隔。如果直接粘贴到MEGA,可能会因为空格数量不一致导致读取失败。建议用Excel打开,用“分列”功能整理成完整矩阵后再导入。
3.3 F统计量分析:Fis、Fit、Fst的计算与解读
F统计量是群体遗传结构分析的核心。POPGENE可以计算Fis(群体内近交系数)、Fit(总群体近交系数)和Fst(群体间分化指数)。操作路径:Analysis → F-statistics → 选择“Weir & Cockerham”或“Nei”方法。对于共显性标记,推荐Weir & Cockerham(1984)方法,它对样本量不均衡更稳健。
输出结果里,Fst是最常被引用的。一般来说,Fst < 0.05表示遗传分化很小,0.05–0.15为中等分化,0.15–0.25为较大分化,>0.25为极大分化。但要注意,Fst的显著性需要置换检验(permutation test),POPGENE里可以设置置换次数,通常设1000次。如果置换次数太少(比如100),p值会不稳定。
参数设置里有一个“Number of permutations”选项,默认可能是100,建议改成1000或更高。计算时间会变长,但结果更可靠。另外,如果某些位点在某个群体里是单态(只有一个等位基因),Fst计算可能会报错或输出NaN,这时需要手动剔除该位点或该群体。
注意:POPGENE对缺失数据的处理比较粗糙,通常用“0”或“.”表示缺失。如果缺失比例超过10%,结果可靠性会明显下降。建议在数据整理阶段就剔除缺失率过高的位点。
4. POPGENE结果文件解读:哪些数字能写进论文,哪些是黑匣子
POPGENE的输出文件通常是一个.txt或.out文件,里面包含多个表格。很多人拿到结果后不知道哪些指标该报告、哪些该忽略。下面按论文写作的常见需求拆解。
4.1 遗传多样性表格的提取与整理
POPGENE输出的遗传多样性结果通常按位点列出Na、Ne、H、I,然后给出平均值和标准差。写论文时,通常需要报告:每个群体的平均等位基因数(Na)、平均有效等位基因数(Ne)、Nei's基因多样性(H)、Shannon信息指数(I)。如果做的是群体间比较,还需要报告总群体和群体内的平均值。
常见做法是:把POPGENE输出的表格复制到Excel,用AVERAGE和STDEV函数重新计算平均值和标准差,因为POPGENE自带的平均值有时是按位点简单平均,而不是按群体加权。这个细节在审稿时可能被追问。
4.2 F统计量结果的显著性判断
Fst的显著性通常看置换检验的p值。POPGENE会在输出文件里给出p值,但格式可能是一列“Prob”或“P-value”。如果p < 0.05,说明群体间分化显著。但要注意,多重比较时需要进行Bonferroni校正。比如你有10个群体两两比较,做了45次检验,校正后的显著性水平是0.05/45 ≈ 0.0011。
另一个容易踩的坑:POPGENE输出的Fst可能是负值。负的Fst在理论上表示群体间分化小于随机期望,通常出现在样本量很小或位点信息量不足时。写论文时,负值一般报告为0,并在讨论中说明可能是抽样误差导致。
4.3 遗传距离矩阵的导出与聚类树构建
POPGENE输出的遗传距离矩阵可以直接用于构建聚类树。常见流程是:把矩阵粘贴到MEGA → 选择“Distance” → “Compute from matrix” → 选择UPGMA或NJ → 生成树文件。或者用NTSYS的SAHN模块做UPGMA聚类。
注意,POPGENE输出的距离矩阵可能是下三角格式,MEGA需要完整矩阵。转换方法:在Excel里把下三角补全为上三角对称矩阵。如果群体数多,手动补全容易出错,建议写一个简单的Python脚本处理。
import numpy as np # 假设下三角矩阵按行读取,对角线为0 # 示例:3个群体的下三角矩阵 lower_tri = [ [0], [0.12, 0], [0.25, 0.18, 0] ] n = len(lower_tri) mat = np.zeros((n, n)) for i in range(n): for j in range(i+1): mat[i][j] = lower_tri[i][j] mat[j][i] = lower_tri[i][j] # 输出完整矩阵 for row in mat: print(" ".join(f"{x:.4f}" for x in row))这段代码把下三角矩阵转成对称完整矩阵,输出格式可以直接粘贴到MEGA。参数方面,lower_tri需要替换成你从POPGENE输出文件里读到的实际数值。注意保留足够的小数位数,通常4位即可。
5. POPGENE避坑与常见问题排查:那些教程里不会写的翻车现场
POPGENE是个老软件,很多报错信息含糊不清,新手很容易卡住。下面是我在实际使用中遇到的5个高频问题,按“现象→原因→解决”整理。
5.1 报错“Error in data file”但看不出哪一行有问题
现象:打开数据文件时弹出“Error in data file”,不提示具体行号。原因:最常见的是位点数和实际数据列数不匹配,或者某个个体的等位基因数少于位点数。POPGENE对格式的容错率极低。解决:用文本编辑器打开输入文件,逐行检查。重点看:第一行的位点数、群体数、个体数是否和后面实际数据一致;每个位点块内的个体数是否和第一行声明的个体数一致;等位基因之间是否用了正确的分隔符(空格或逗号,不能混用)。建议写一个校验脚本,统计每个位点块的行数和列数。
5.2 遗传多样性结果里Ne为0或NaN
现象:输出的Ne列出现0或NaN。原因:某个位点在所有群体里都是单态(只有一个等位基因),此时Ne = 1/Σp² = 1/1² = 1,不应该为0。出现0通常是因为该位点所有个体都是缺失数据,或者等位基因编码里混入了非数字字符。解决:检查原始数据,剔除缺失率100%的位点。如果等位基因编码用了字母(如A、B),POPGENE可能无法识别,建议统一改成数字编码。
5.3 Fst计算结果全部为负值
现象:Fst矩阵里所有值都是负数。原因:样本量太小,或者位点信息量不足(比如每个群体只测了5个个体、每个位点只有2个等位基因)。负的Fst在统计上表示群体间分化小于随机期望,通常没有生物学意义。解决:增加样本量或增加位点数。如果无法补数据,在论文里报告Fst时取0,并说明可能是抽样误差。另外,检查是否误用了显性标记做Fst分析——显性标记的Fst估算偏差较大,建议改用共显性标记。
5.4 置换检验p值全是0.000或1.000
现象:Fst的显著性检验p值要么全是0.000,要么全是1.000。原因:置换次数设置太少(比如10次),或者数据里存在大量缺失值导致置换无法正常进行。解决:把置换次数改成1000或更高。如果还是异常,检查数据缺失情况,剔除缺失率超过20%的位点。另外,某些版本的POPGENE在Windows 10/11上兼容性不好,建议在Windows 7兼容模式下运行,或者用DOSBox模拟环境。
5.5 输出文件乱码或无法打开
现象:POPGENE输出的.txt文件用记事本打开是乱码。原因:POPGENE是DOS时代软件,输出文件可能用了ANSI编码,而现代编辑器默认UTF-8。解决:用Notepad++打开,选择“编码”→“ANSI”或“GBK”。如果还是乱码,试试用Excel的“从文本导入”功能,手动指定编码格式。另外,输出文件路径不要有中文或空格,否则POPGENE可能写入失败。
提示:如果以上方法都解决不了,最稳妥的办法是换用更现代的替代工具,比如GenAlEx(Excel插件)、adegenet(R包)或MEGA。POPGENE的优势是经典、引用多,但它的稳定性和兼容性确实不如新工具。
6. 用R复现POPGENE核心结果:验证与进阶的实用技巧
POPGENE虽然经典,但它的计算逻辑有时不够透明,尤其是Fst和遗传距离的估算方法。如果你想让结果更可靠,或者审稿人要求提供可重复的分析流程,建议用R的adegenet和hierfstat包复现POPGENE的核心结果。这样既能验证POPGENE的输出,又能获得更灵活的绘图和统计功能。
6.1 用adegenet读取数据并计算遗传多样性
library(adegenet) library(hierfstat) # 读取POPGENE格式的输入文件(需要先转成genepop格式) # 假设已经用脚本把数据转成了genepop格式 obj <- read.genepop("data.gen", ncode = 3) # 计算遗传多样性:Na、Ne、H、I div <- summary(obj) print(div$pop$allele.count) # Na print(div$pop$Hobs) # 观测杂合度 print(div$pop$Hexp) # 期望杂合度(Nei's gene diversity) # 计算Fst fst_result <- pairwise.fst(obj) print(fst_result)这段代码的核心是read.genepop读取数据,summary给出每个群体的等位基因数和杂合度,pairwise.fst计算群体间Fst。参数方面,ncode = 3表示等位基因编码用3位数字,如果你的数据编码位数不同,需要调整。pairwise.fst默认用Weir & Cockerham方法,和POPGENE的推荐方法一致。
6.2 用hierfstat计算F统计量并做置换检验
library(hierfstat) # 读取数据为hierfstat格式 data <- read.fstat("data.fstat") # 计算Fst、Fis、Fit fst_all <- pairwise.WCfst(data) fis_all <- basic.stats(data)$Fis fit_all <- basic.stats(data)$Fit # 置换检验 set.seed(123) perm_test <- test.g(data, nperm = 1000) print(perm_test$Fst)pairwise.WCfst计算的是Weir & Cockerham的Fst,basic.stats给出Fis和Fit。test.g做置换检验,nperm = 1000表示置换1000次。注意,test.g的输出里p值是基于置换分布的,和POPGENE的置换检验逻辑一致,但R的实现更透明,你可以自己检查置换过程。
6.3 结果对比与论文报告建议
用R复现后,把POPGENE和R的结果放在一起对比。通常Na、Ne、H、I这几个指标两者差异很小(<5%),但Fst可能有细微差别,因为POPGENE默认用Nei的方法,而R的hierfstat默认用Weir & Cockerham。写论文时,建议在方法部分明确说明用了哪种方法,并引用对应文献。
如果两者差异较大(比如Fst差0.05以上),优先检查数据格式和缺失值处理。POPGENE对缺失值的处理比较粗糙,而R的adegenet和hierfstat有更灵活的缺失值选项。我一般会以R的结果为准,因为它的计算过程可追溯,审稿人要求补充分析时也更容易调整。
最后一个习惯:每次分析前,先用一小部分数据(比如3个群体、5个位点)在POPGENE和R里各跑一遍,确认结果一致后再跑全量数据。这个步骤花不了10分钟,但能帮你提前发现格式错误或参数误设。希望帮到你。
本文还有配套的精品资源,点击获取