群体遗传进化Pi和Fst、XP-CLR计算方法

在遗传学中,群体指的是一组具有共同遗传特征的个体,而个体则是指单个生物体。群体中的个体之间可以存在遗传交流和基因流动,这会导致群体中的基因频率发生变化。今天分享的笔记是群体进化与选择分析,包括Pi、Fst、TajimaD、XP-CLR的介绍和计算方法。

首先,咱们都知道时间不会停止,也就意味着历史的车轮不会停止,自然界一直在不断地演化,不管是动物还是植物,都在不停的选择和分化。例如玉米小麦等植物,在很久以前可能发源于杂草,后来经过人的驯化,才改良为现在适宜栽培的品种。

什么是正选择?

正选择可以用自然选择来解释:假如一个基因或位点能够使个体有着更强的生存力,这样就会使个体的后代更多,如此一来,这个基因或位点在群体中就越来越多。

举个例子:以前非洲大草原有短颈鹿,后来偶然的突变导致长颈鹿产生,由于长颈鹿能吃到更多的食物,有着更高的存活率,所以导致这个突变受到正选择。

负选择

如果群体中的某个个体出现一个致命的突变,从而使自己或者是后代从群体中被淘汰,这也导致群体中该位点的多态性的降低。

举个例子:假如正常生长中的玉米群体中偶然发生了一个突变,导致水分吸收受阻,这种缺陷导致后代被淘汰,因此该突变位点的多态性会降低。

平衡选择

平衡选择指多个等位基因在一个群体的基因库中以高于遗传漂变预期的频率被保留,如杂合子优势。

核酸多样性Pi

Pi指的是核苷酸多样性,Pi值越大说明核苷酸多样性越高。通常用于衡量群体内的核苷酸多样性,也可以用来推演进化关系,可以理解成先在群体内两两求Pi,再计算群体的均值,常用软件是vcftools。

vcftools --vcf input.vcf --window-pi 200000 --window-pi-step 100000 --keep 1.sample.list --out pi_window_1.sample.list
# 检查文件的行数
wc -l pi_window_1.sample.list.windowed.pi

批量计算Pi的脚本:

#!/bin/bash
#定义所有以.txt结尾的sample.list文件
sample_files=(*.txt)
#循环执行命令
for sample in "${sample_files[@]}";do
    #生成输出文件名
    output="pi_window_${sample}"

    #输出调试信息
    echo "Running vcftools for $sample,output file: $output"
    #确认文件存在
    if [ ! -f "$sample" ];then
        echo "Error:File $sample does not exist"
        continue
    fi
    #运行vcftools命令
    vcftools --vcf input.vcf --window-pi 200000 --window-pi-step 100000 --keep "$sample" --out "$output"
done

利用ggplot2画图的脚本:

# 读取数据
pi_window_1 <- read.table("pi_window_1.sample.list.windowed.pi",header = TRUE,sep = "\t")
pi_window_2 <- read.table("pi_window_2.sample.list.windowed.pi",header = TRUE,sep = "\t")
pi_window_3 <- read.table("pi_window_3.sample.list.windowed.pi",header = TRUE,sep = "\t")
pi_window_1$Group <- 1
pi_window_2$Group <- 2
pi_window_3$Group <- 3
df_plot_all <- rbind(pi_window_1,pi_window_2,pi_window_3)

# 绘制结果
library(ggplot2)
p1 <- ggplot(df_plot_all)+
  geom_smooth(aes(BIN_START,PI,color=as.factor(Group),group=Group),method = "loess",span = 0.1,se = F,linewidth = 1)+
  # geom_smooth(aes(BIN_START,PI,color=as.factor(Group),group=Group),method = "gam",span = 0.1,se = F,linewidth = 1)+
  scale_color_manual(values = c("red","green","blue"))+
  xlab("Physical Position")+
  ylab("Pi")+
  theme_bw()+
  theme(legend.position = "right")
  
# 输出图片
ggsave(filename="pi_200kwindow_100kstep.pdf",plot = p1,width = 16,height = 9)
p1

群体内选择检验TajimaD

Tajima's D是日本学者Tajima Fumio 1989年提出的一种统计检验方法,用于检验DNA序列在演化过程中是否遵循中性演化模型。

D > 0: 平衡选择,突然收缩,稀有等位基因以低频率存在。
D < 0: 经历瓶颈效应,随后群体扩张,稀有等位基因以高频率存在。
D = 0: 平衡演变,没有太大频率差异。

计算方法:

vcftools --vcf input.vcf --TajimaD 100000 --keep 1.sample.list --out TajimaD_1.sample.list

批量计算TajimaD的脚本:

#!/bin/bash
#定义所有以.txt结尾的sample.list文件
sample_files=(*.txt)
#循环执行命令
for sample in "${sample_files[@]}";do
    #生成输出文件名
    output="TajimaD_${sample}"
    #输出调试信息
    echo "Running vcftools for $sample,output file: $output"
    #确认文件存在
    if [ ! -f "$sample" ];then
        echo "Error: File $sample does not exist"
        continue
    fi
    #运行vcftools 命令
    vcftools --vcf input.vcf --TajimaD 100000 --keep "$sample" --out "$output"
done

群体间分歧度Fst

Fst叫固定分化指数,用于估计亚群间平均多态性大小与整个种群平均多态性大小的差异,反映的是群体结构的变化。Fst的取值范围是[0,1]

当Fst=1时,表明亚群间有着明显的种群分化,值越高表示分化程度越高。在中性进化条件下,Fst的大小主要取决于遗传漂变和迁移等因素的影响。

假设种群中的某个等位基因对特定环境的适应度较高而经历适应性选择,那该基因的频率在种群中会升高,种群的分化水平增大,群体Fst升高。

计算方法:

 vcftools --vcf all_2229.vcf --fst-window-size 200000 --fst-window-step 100000 --weir-fst-pop 1.sample.list --weir-fst-pop 2.sample.list --out fst.1.sample.list.2.sample.list

批量计算Fst的脚本:

#!/bin/bash
#定义所有的sample.list文件
sample_files=("W.sample.list.txt" "S.sample.list.txt")
#获取样本文件的数量
num_samples=${#sample_files[@]}
#确保有足够的文件进行成对比较
if ((num_samples < 2));then
    echo "Error: Not enough sample files.At least two are required."
    exit 1
fi
#循环执行命令,两两比较sample.list文件
for ((i=0;i<num_samples; i++ ));do
    for ((j=i+1;j<num_samples; j++ ));do
        sample1="${sample_files[i]}"
        sample2="${sample_files[j]}"
        #生成输出文件名
        output="fst.${sample1%.sample.list.txt}.${sample2%.sample.list.txt}"
        #输出调试信息
        echo "Running vcftools for $sample1 and $sample2,output file: $output"
        #确认文件存在
        if [ ! -f "$sample1"];then
            echo "Error: File $sample1 does not exist"
            continue
        fi
        if [ ! -f "$sample2" ];then
            echo "Error: File $sample2 does not exist"
            continue
        fi
        #运行vcftools命令
        vcftools --vcf input.vcf --fst-window-size 2000 --fst-window-step 1000 --weir-fst-pop "$sample1" --weir-fst-pop "$$
    done
done

跨群体复合似然比检验XP-CLR

XP-CLR 是陈华老师等在 2010 年开发的方法,全称叫 the cross-population composite likelihood ratio test(跨群体复合似然比检验),是一种是基于选择扫荡(selective sweeep)的似然方法。

选择扫荡可以增加群体之间的遗传分化,导致等位基因频率偏离中性条件下的预期值。XP-CLR利用两个群体之间的多基因座等位基因频率差异(multilocus allele frequency differentiation)建立模型,使用布朗运动来模拟中性下的遗传漂移,并使用确定性模型来近似地对附近的单核苷酸多态性(SNPs)进行选择性扫描,以下是计算方法:

#!/bin/bash
# 定义样本文件数组
sample_files=("1.sample.list.txt" "2.sample.list.txt" "3.sample.list.txt")
# 获取所有染色体编号
chromosomes=$(bcftools view -h input.vcf | grep '^##contig' | cut -d '=' -f3 | cut -d ',' -f1)
echo "Chromosomes: $chromosomes"
# 定义输出目录
output_dir="./out"
mkdir -p $output_dir
# 循环遍历样本文件两两组合
for i in 0 1 2; do
    for j in $(seq $((i+1)) 2); do
        samplesA=${sample_files[$i]}
        samplesB=${sample_files[$j]}
        # 获取无后缀样本名
        samplesA_name=$(basename "${samplesA%.sample.list.txt}")
        samplesB_name=$(basename "${samplesB%.sample.list.txt}")

        # 定义组合编号
        combo="${samplesA_name}${samplesB_name}"     
        # 定义组合输出文件
        output_file="${output_dir}/chr_all_${combo}.txt"
        # 循环遍历每个染色体,并运行 xpclr,输出到临时文件
        for chr in $chromosomes
        do
            echo "Running XPCLR for chromosome $chr with samples ${samplesA_name} and ${samplesB_name}..."
            temp_output="${output_dir}/temp_${chr}_${combo}.txt"
            xpclr --out "$temp_output" --format vcf --input input.vcf --samplesA $samplesA --samplesB $samplesB --size 200000 --step 100000 --chr $chr
            # 将临时文件的内容追加到组合输出文件
            cat "$temp_output" >> "$output_file"
            # 删除临时文件
            rm "$temp_output"
        done
    done
done
echo "XPCLR analysis completed for all combinations and chromosomes."

以上就是今天分享的全部内容,如果对您有所帮助,欢迎转发收藏。

本文由 mdnice 多平台发布

  • 13
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
R语言是一种面向数学理论研究工作者的解释型语言,也具有统计分析和强大作图功能。它由贝尔实验室的研究成果演化而来,由奥克兰大学统计学系的Ross Ihaka和Robert Gentleman共同创立。R语言受到了S语言和Scheme语言的影响,因此与这两种语言非常相似。 在R语言中,计算FstPi可以使用一些统计分析的包和函数来实现。Fst(分子多样性)和Pi(核苷酸多样性)是用来衡量遗传多样性的常用指标。 要计算Fst,可以使用poppr包中的fst函数。该函数基于基因频率数据计算Fst值,根据不同的遗传模型和基因型数据类型,可以选择合适的参数和选项来计算Fst。 要计算Pi,可以使用ape包中的dist.dna函数。该函数用于计算DNA序列之间的差异,并返回Pi值,表示平均每个位点的核苷酸差异。 在使用这些函数之前,需要先安装相应的包,然后加载它们。例如,可以使用以下命令安装和加载poppr和ape包: install.packages("poppr") install.packages("ape") library(poppr) library(ape) 然后,根据你的具体数据和研究问题,使用相应的函数计算FstPi。注意,在计算之前,你需要准备好适当的数据输入格式,并了解如何解释结果。 总结一下,如果你想在R语言中计算FstPi,可以使用poppr包的fst函数和ape包的dist.dna函数。这些函数基于基因频率数据和DNA序列差异计算相应的指标,以衡量遗传多样性。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [R语言使用quantile函数计算评分值的分位数(20%、40%、60%、80%)、使用逻辑操作符将对应的分位区间...](https://blog.csdn.net/zhongkeyuanchongqing/article/details/122220759)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

生信分析笔记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值