LD衰减一半的距离怎么手动计算?

科技   2024-07-18 22:27   河南  

大家好,我是邓飞。

LD衰减图,可以形象的查看群体LD衰减的情况。LD衰减是由于连锁不平衡所致,LD衰减速度在不同物种或者不同亚种中差异不同,通常用LD衰减到一般的距离来作为群体的衰减距离(还有其它计算方法),如果LD衰减很快,则在进行GWAS分析时需要更多的位点才能达到一定的精度。(计算群体GWAS分析所需要的最少SNP个数


另外,LD衰减也可以反应群体受选择的情况,一般来说,野生群体比驯化改良群体LD衰减快,异花授粉比自花授粉植物LD衰减快。


之前写过推文教程(LD衰减图绘制--PopLDdecay



出的图是上面这个样子的,如果人为查看的衰减一半的距离,大约是100kb左右,如何更科学的计算呢?

网上看到了一个perl脚本可以根据PopLDdecay的结果自动计算衰减一半的距离:(https://www.jianshu.com/p/8205dbcb3839)


代码如下:calculate_LDlength.pl

#!/usr/bin/perl -wuse strict;
my $in0 = $ARGV[0]; ##- sarson.LD.stat.gz
open IN0, "gzip -dc $in0 | ";<IN0>;my $firstLine = <IN0>;chomp($firstLine);my @firstLine = split(/\t/, $firstLine);my $max = $firstLine[1];close IN0;
my %dis2Value = ();open IN1, "gzip -dc $in0 | ";<IN1>;while(<IN1>){ chomp; my @temp = split(/\t/, $_); $dis2Value{$temp[0]} = $temp[1];}close IN1;
my $halfValue = $max/2;
for my $key1(sort {$a<=>$b} keys %dis2Value){
my $next = $key1 + 1; if(exists $dis2Value{$next}) {
my $currentValue = $dis2Value{$key1}; my $nextValue = $dis2Value{$next}; if($currentValue >= $halfValue && $nextValue < $halfValue){ print "Processing ", $in0, "\n"; print "max LD: r2: ", $max, "\n"; print "half LD: r2: ", $halfValue, "\t", "LD length: ", $key1, "\n"; last; }
}
}


例如PopLDdecay生成的文件为:LDdecay.stat.gz,用上面的程序处理这个文件,就能得到衰减一半的距离,调用方法:

$ perl calculate_LDlength.pl LDdecay.stat.gz Processing LDdecay.stat.gzmax LD: r2: 0.8551half LD:  r2: 0.42755  LD length: 67

可以看到LD衰减一半的值是0.427,对应的距离是67kb。

以上。

推荐阅读:


想要更好的学习和交流,快来加入飞哥的知识星球,这是一个生物统计+数量遗传学+GWAS+GS的社区,在这里你可以向飞哥提问、帮你指定学习计划、跟着飞哥一起做实战项目,冲冲冲。点击这里加入吧:飞哥的学习圈子


1,快来领取 | 飞哥的GWAS分析教程


2,飞哥汇总 | 入门数据分析资源推荐


3,数量遗传学,分享几本书的电子版


4,R语言学习看最新版的电子书不香嘛?


5,书籍及配套代码领取--统计遗传分析导论


育种数据分析之放飞自我
本公众号主要介绍动植物育种数据分析中的相关问题, 算法及程序代码.
 最新文章