最近在做群体结构分析,群体结构三剑客:structure、pac和kinship。这边我主要用的软件是structure,毕竟比较老牌,正常一个K值只要1天时间,我感觉还能接受。在structure获得输出结果后,需要利用CLUMPP对多次循环的K矩阵进行合并。
CLUMPP的安装
官网网址:https://web.stanford.edu/group/rosenberglab/clumpp.html,进行简单的一个注册之后,就可以跳转到下载链接。
下载与安装
wget https://web.stanford.edu/group/rosenberglab/software/CLUMPP_Linux64.1.1.2.tar.gz
tar zxvf CLUMPP_Linux64.1.1.2.tar.gz #解压即可用
CLUMPP的使用
- 对structure的循环结果进行提取,构建成CLUMPP的输入文件格式。
- CLUMPP的示例数据格式为:
因为这里他也是K值为3的时候,所以只有5列。
第1列:材料编号
第2-4列:K的成分比例
第5列:单株的数目(通常取1即可)
下面为我提取structure的结果的一个脚本,我设置的循环数为5,分别从0-4,结果文件分别为structure.out.3.0_f
,structure.out.3.1_f
,structure.out.3.2_f
,structure.out.3.3_f
,structure.out.3.4_f
。
my(@line,$flag,$num,$i);
open OUT, ">241map.popfile"; #文件输出名
for($i=0;$i<=4;$i++){
$flag=0;
$num=1;
open IN, "structure.out.3.".$i."_f"; # 只针对K=3
while(<IN>){
chomp;
if(/^Inferred ancestry/){
$flag=1;
}
if($flag==1){
@line=split/\s+/;
if(scalar(@line)==8){
print OUT $num.": ".$line[5]." ".$line[6]." ".$line[7]." 1\n";
}elsif(scalar(@line)==7){
print OUT $num.": ".$line[4]." ".$line[5]." ".$line[6]." 1\n";
}
}
if(/Estimated Allele Frequencies in each cluster/){
$flag=0;
}
$num++;
}
print OUT "\n";
}
- CLUMPP参数文件设置
- 初始文件在安装目录下的
paramfile
,直接cp过来就行,只用修改下面几个位置。
- 单株时用的参数,所以我这里选择是空值
- structure合并的结果文件,用上面的那个脚本提取
- 输出合并后的Q矩阵
- 相当于log文件
- strutcture时设置的K值
- 群体大小
- 循环数
- 直接在当前目录运行即可
~/software/CLUMPP_Linux64.1.1.2/CLUMPP
结果文件与输入文件类似,均为5列,直接提取中间3列数值去R语言绘图即可。