ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

POPGENE中文教程:从数据格式到Fst计算的群体遗传学分析实操指南

POPGENE中文教程:从数据格式到Fst计算的群体遗传学分析实操指南 简介这份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, headerNone) # 基本信息 n_pop df[0].nunique() # 群体数 n_ind df.shape[0] # 个体总数 n_loc (df.shape[1] - 2) // 2 # 位点数 # 位点名称按顺序生成 loc_names [fLocus{i1} for i in range(n_loc)] # 打开输出文件 with open(popgene_input.txt, w) as f: # 第一行标题可自定义位点数、群体数、个体数 f.write(fPOPGENE 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(fLocus {loc_idx1}\n) # 按群体分组 for pop_id in sorted(df[0].unique()): sub df[df[0] pop_id] f.write(fPop {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。这时会弹出几个子选项NaObserved number of alleles观测等位基因数直接由数据统计得出。NeEffective number of alleles有效等位基因数基于等位基因频率计算公式为1/Σp²。HNeis gene diversityNeis基因多样性也叫期望杂合度。IShannons Information indexShannon信息指数常用于衡量遗传多样性。这四个指标通常一起输出不需要单独选择。但要注意POPGENE默认会同时计算所有位点和所有群体的平均值。如果你只想看某个群体的结果需要在“Options”里指定群体编号。参数设置上有一个容易忽略的点“Gametic phase”选项。对于共显性标记选“Known”或“Unknown”会影响单倍型频率的估算。如果你没有家系信息一般选“Unknown”。这个选项在数据量大的时候对结果影响不大但在位点间连锁不平衡分析时会影响显著性。3.2 遗传距离与聚类分析Nei和Nei’s标准遗传距离的区别POPGENE提供多种遗传距离矩阵最常用的是Neis genetic distanceD和Neis standard genetic distanceDs。两者的区别在于是否校正小样本偏差。对于群体数较少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 Cockerham1984方法它对样本量不均衡更稳健。输出结果里Fst是最常被引用的。一般来说Fst 0.05表示遗传分化很小0.05–0.15为中等分化0.15–0.25为较大分化0.25为极大分化。但要注意Fst的显著性需要置换检验permutation testPOPGENE里可以设置置换次数通常设1000次。如果置换次数太少比如100p值会不稳定。参数设置里有一个“Number of permutations”选项默认可能是100建议改成1000或更高。计算时间会变长但结果更可靠。另外如果某些位点在某个群体里是单态只有一个等位基因Fst计算可能会报错或输出NaN这时需要手动剔除该位点或该群体。注意POPGENE对缺失数据的处理比较粗糙通常用“0”或“.”表示缺失。如果缺失比例超过10%结果可靠性会明显下降。建议在数据整理阶段就剔除缺失率过高的位点。4. POPGENE结果文件解读哪些数字能写进论文哪些是黑匣子POPGENE的输出文件通常是一个.txt或.out文件里面包含多个表格。很多人拿到结果后不知道哪些指标该报告、哪些该忽略。下面按论文写作的常见需求拆解。4.1 遗传多样性表格的提取与整理POPGENE输出的遗传多样性结果通常按位点列出Na、Ne、H、I然后给出平均值和标准差。写论文时通常需要报告每个群体的平均等位基因数Na、平均有效等位基因数Ne、Neis基因多样性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(i1): 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、BPOPGENE可能无法识别建议统一改成数字编码。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可能写入失败。提示如果以上方法都解决不了最稳妥的办法是换用更现代的替代工具比如GenAlExExcel插件、adegenetR包或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) # 期望杂合度Neis 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的Fstbasic.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分钟但能帮你提前发现格式错误或参数误设。希望帮到你。本文还有配套的精品资源点击获取
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进