跳转至

有效种群大小(Ne)估计方法

一句话概述:有效种群大小 Ne 是群体遗传学的核心参数,反映了群体中实际参与繁殖的"等效个体数",可通过连锁不平衡(LD)、GONE 和 PSMC 等方法从基因组数据中估计。


核心知识点速查表

概念白话解释
Ne(有效种群大小)一个理想群体要产生相同遗传漂变需要的个体数
Census size (N)实际可数的种群个体数
Ne 通常远小于 N因为不是所有个体都均等繁殖
LD 法利用连锁不平衡估计近期 Ne(几代内)
GONE利用全基因组 LD 估计历史 Ne(200代内)
PSMC利用单个基因组的杂合度估计远古 Ne(千~百万年)
NeEstimator基于 LD 的经典 Ne 估计软件
currentNe22025 年新工具,不需要遗传图谱

一、Ne 的概念(白话版)

比喻:一个村庄有 1000 人(N=1000),但实际只有 200 对夫妇生了后代。而且其中 10 对特别能生,贡献了大部分后代。从遗传学角度看,这个村庄"有效"只相当于一个 150 人的村庄(Ne=150)。

为什么 Ne 重要? - Ne 决定了遗传漂变的强度(Ne 越小,漂变越强,等位基因越容易随机丢失) - Ne 决定了选择的效率(Ne 越小,弱选择效果越弱) - 保护生物学中,Ne > 50 避免近交衰退,Ne > 500 维持进化潜力 - 面试常考:Ne/N 比值通常是 0.1~0.5


二、估计方法概览

Ne 估计方法分类

方法时间尺度输入数据代表工具
LD 法近期(1~几代)群体SNP数据NeEstimator, currentNe2
GONE历史(~200代)群体SNP+遗传图谱GONE, GONE2
PSMC远古(千~百万年)单个高深度基因组PSMC, SMC++
时序法两个时间点间两次采样的等位基因频率NeEstimator
杂合度法近期群体基因型数据currentNe

三、方法 1:NeEstimator(LD 法估计当代 Ne)

安装与运行

# 下载 NeEstimator V2.1
# 官网:http://www.molecularfisherieslaboratory.com.au/neestimator-software/
wget http://www.molecularfisherieslaboratory.com.au/download/NeEstimator-v2.1.zip
unzip NeEstimator-v2.1.zip  # 解压

# NeEstimator 有 GUI 和命令行两种模式
# 命令行模式需要准备参数文件

# 准备输入数据(GENEPOP格式)
# GENEPOP格式示例:
cat << 'EOF' > input.gen
Title: My Population
Locus1
Locus2
Locus3
Pop
Ind1, 0101 0203 0102
Ind2, 0102 0201 0101
Ind3, 0201 0203 0202
Pop
Ind4, 0103 0201 0101
Ind5, 0102 0103 0201
EOF

# 从VCF转换为GENEPOP格式
# 用 PGDSpider 或 radiator R包转换
# 准备 NeEstimator 参数文件
cat << 'EOF' > ne_option.txt
1                        # 输入格式:1=GENEPOP
input.gen                # 输入文件名
ne_output.txt            # 输出文件名
3                        # 方法:3=LD法
0.02                     # 最低等位基因频率阈值(Pcrit)
0                        # 0=不做时序估计
EOF

# 运行 NeEstimator
./Ne2-1 i:ne_option.txt  # 运行(i:表示参数文件输入)
# 如果数据是VCF格式,可以先用PLINK计算LD,再手动估计Ne
# 但建议直接用 NeEstimator 或 currentNe2

# PLINK 计算 r² 用于 LD-based Ne estimation
plink --vcf input.vcf.gz \    # 输入VCF
      --r2 \                    # 计算r²
      --ld-window-r2 0 \       # 输出所有r²值(包括0)
      --ld-window 999999 \     # 最大SNP间隔(对数)
      --ld-window-kb 10000 \   # 最大物理距离10Mb
      --out ld_results         # 输出前缀

# Ne ≈ 1/(3 × (r²_adjusted - 1/S))
# r²_adjusted = r² - 1/(2S),S=样本量
# 这只是粗略估计,建议用专业软件

四、方法 2:GONE(历史 Ne 变化轨迹)

# GONE 利用全基因组LD模式估计最近200代的Ne变化
# 优点:能看到Ne随时间的变化趋势(如瓶颈、扩张)

# 安装 GONE
git clone https://github.com/esrud/GONE.git  # 克隆仓库
cd GONE
chmod +x GONE                                  # 添加执行权限

# 准备输入文件(PLINK ped/map 格式)
plink --vcf input.vcf.gz \      # 输入VCF
      --recode \                 # 转换为ped/map格式
      --allow-extra-chr \        # 允许非标准染色体名
      --out mydata               # 输出前缀

# 准备遗传图谱文件(按染色体的遗传距离)
# 如果没有遗传图谱,可以用物理距离近似(1 Mb ≈ 1 cM)

# 运行 GONE
bash script_GONE.sh mydata       # 运行GONE

# 输出文件:
# Output_Ne_mydata — 每一代的 Ne 估计值
# 格式:代数  Ne估计值

# 可视化 Ne 变化曲线
cat << 'EOF' > plot_gone.R
ne <- read.table("Output_Ne_mydata", header=FALSE)  # 读取结果
colnames(ne) <- c("Generation", "Ne")                # 命名列

pdf("Ne_trajectory_GONE.pdf", width=10, height=6)    # 创建PDF
plot(ne$Generation, ne$Ne,                            # 画Ne变化曲线
     type="l", col="blue", lwd=2,                    # 蓝色线
     xlab="Generations ago",                          # X轴
     ylab="Effective population size (Ne)",           # Y轴
     main="Historical Ne estimated by GONE",          # 标题
     log="y")                                         # Y轴取对数
dev.off()
EOF
Rscript plot_gone.R

GONE2(2025 年更新)

# GONE2 是 2025 年发布的升级版
# 新增功能:
# - 可以处理群体结构(FST、迁移率、亚群数量估计)
# - 支持单倍体数据
# - 处理基因分型错误和低深度测序数据

# 安装 GONE2
git clone https://github.com/esrud/GONE2.git  # 克隆GONE2
cd GONE2
chmod +x GONE2

# 运行(用法类似 GONE)
bash script_GONE2.sh mydata

五、方法 3:PSMC(远古 Ne 变化)

# PSMC 用单个二倍体基因组的杂合度分布估计 Ne 随时间变化
# 适用范围:约 1万 ~ 100万年前

# 安装 PSMC
git clone https://github.com/lh3/psmc.git  # 克隆仓库
cd psmc
make                                         # 编译
cd utils
make                                         # 编译工具

# 第1步:从BAM生成一致性序列(consensus sequence)
# 需要高深度(>20X)的全基因组测序数据
samtools mpileup -C 50 -uf ref.fa sample.bam | \  # 生成pileup
    bcftools call -c | \                            # 变异检测
    vcfutils.pl vcf2fq -d 10 -D 100 | \           # 转换为fastq,深度10-100
    gzip > consensus.fq.gz                          # 压缩

# 第2步:转换格式
psmc/utils/fq2psmcfa -q20 consensus.fq.gz > input.psmcfa  # 转换为psmc输入格式

# 第3步:运行 PSMC
psmc -N25 \                      # 最大迭代次数25
     -t15 \                       # 最大时间参数
     -r5 \                        # 初始θ/ρ比值
     -p "4+25*2+4+6" \           # 时间区间模式
     -o output.psmc \             # 输出文件
     input.psmcfa                 # 输入文件

# 第4步:Bootstrap(评估置信区间)
# 先分割输入文件
psmc/utils/splitfa input.psmcfa > split.psmcfa

# 运行100次bootstrap
seq 100 | xargs -i -P 4 \        # 并行4个任务
    psmc -N25 -t15 -r5 -b \       # -b 表示bootstrap模式
         -p "4+25*2+4+6" \
         -o round-{}.psmc \
         split.psmcfa

# 第5步:合并结果并画图
cat output.psmc round-*.psmc > combined.psmc  # 合并所有结果

psmc/utils/psmc_plot.pl \
    -g 5 \                        # 世代时间(年/代)
    -u 2.5e-8 \                   # 突变率(每位点每代)
    -p plot_output \              # 输出前缀
    combined.psmc                 # 输入合并后的文件

# 输出 plot_output.pdf — Ne 随时间变化的曲线
# X轴:年(对数刻度),Y轴:Ne

六、方法比较与选择指南

特征NeEstimatorGONE/GONE2PSMC
时间尺度当代(几代)历史(~200代)远古(千~百万年)
输入数据群体 SNP群体 SNP + 图谱单个高深度基因组
最少样本量≥25 个体≥50 个体1 个体
需要遗传图谱不需要需要(GONE2可选)不需要
群体结构影响敏感较敏感不敏感
保护遗传学适用最佳适用不适用于当代 Ne

七、常见报错与解决

报错信息原因解决方法
Ne = Infinity样本量太小或SNP太少增加样本量(≥25)或 SNP 数量
Negative r² values数据质量差或样本太少过滤低质量SNP,增加样本
GONE 结果 Ne 值异常大存在群体结构或基因流用 GONE2 处理结构
PSMC 曲线不平滑基因组覆盖度不够需要 >20X 深度
Too few chromosomesGONE 需要多条染色体确保有多条染色体的数据
NeEstimator 和 GONE 结果差很大估计的时间尺度不同正常,两者回答不同的问题

八、面试高频问题

Q1:Ne 和 N(普查种群大小)的关系?

Ne 通常远小于 N。比值 Ne/N 约 0.1~0.5。原因:不均等的性比(一个雄性配多个雌性)、世代重叠、种群大小波动(瓶颈效应使 Ne 接近最小值的调和平均数)。

Q2:Ne=50 和 Ne=500 的意义?

50/500 法则(Frankham et al.):Ne>50 可避免短期近交衰退;Ne>500 可维持长期进化适应能力。这是保护生物学中的重要阈值。

Q3:PSMC 和 GONE 能互相替代吗?

不能。PSMC 看远古(万~百万年),GONE 看近期(几百代)。两者时间尺度不重叠或只有少量重叠,应该联合使用以获得完整的历史 Ne 变化图景。


九、速查表

# === Ne 估计速查 ===

# 1. NeEstimator(当代Ne)
./Ne2-1 i:ne_option.txt

# 2. GONE(历史Ne,~200代)
plink --vcf input.vcf.gz --recode --out mydata
bash script_GONE.sh mydata

# 3. GONE2(2025新版,处理结构)
bash script_GONE2.sh mydata

# 4. PSMC(远古Ne,单基因组)
samtools mpileup -C 50 -uf ref.fa sample.bam | bcftools call -c | vcfutils.pl vcf2fq -d 10 -D 100 | gzip > consensus.fq.gz
fq2psmcfa -q20 consensus.fq.gz > input.psmcfa
psmc -N25 -t15 -r5 -p "4+25*2+4+6" -o output.psmc input.psmcfa
psmc_plot.pl -g 5 -u 2.5e-8 -p plot output.psmc

# Ne 重要阈值:
# Ne > 50  → 避免近交衰退
# Ne > 500 → 维持进化潜力
# Ne/N ≈ 0.1~0.5(经验值)

参考资料:GONE2/currentNe2 (Santiago et al. 2025, Nature Communications)、NeEstimator V2 (Do et al. 2014)、PSMC (Li & Durbin 2011)、Waples 2024 "The Idiot's Guide to Ne"