||
软件介绍系列
在群体遗传中,GCTA中做PCA非常方便, 下面介绍一下GCTA的安装方法.
使用conda自动安装
conda install -c biobuilds gcta
手动安装
这里, 应该键入gcta64
, 而不是gcta
(base) [dengfei@localhost bin]$ gcta64 ******************************************************************* * Genome-wide Complex Trait Analysis (GCTA) * version 1.26.0 * (C) 2010-2016, The University of Queensland * MIT License * Please report bugs to: Jian Yang <jian.yang@uq.edu.au> ******************************************************************* Analysis started: Wed Apr 24 14:07:43 2019 Options: Error: no analysis has been launched by the option(s). Analysis finished: Wed Apr 24 14:07:43 2019 Computational time: 0:0:0
显示上面信息, 表明软件安装成功.
输入文件:
--bfile test
: 类似plink
的参数格式. 支持binary文件(test.fam
,test.bim
,test.bed
)
--dosage-mach test.mldose test.mlinfo
支持其它数据格式
输出文件:
--out result
: 类似plink的--out
参数, 定义输出文件名
ID保留和删除
如果不写, 默认全部使用
--keep test.indi.list
定义分析个体列表
--remove test.indi.list
删除个体列表
选择SNP
--chr 1
:选择染色体--autosome
选择所有SNP
--make-grm
会生成三个文件:
如何你想在R中读取二进制文件, 可以使用如下代码:
ReadGRMBin=function(prefix,AllN=F,size=4){ sum_i=function(i){return(sum(1:i))} BinFileName=paste(prefix,".grm.bin",sep="") NFileName=paste(prefix,".grm.N.bin",sep="") IDFileName=paste(prefix,".grm.id",sep="") id = read.table(IDFileName) # read the ID of the gmatrix n=dim(id)[1] BinFile=file(BinFileName,"rb") grm=readBin(BinFile,n=n*(n+1)/2,what=numeric(0),size=size) # generate the fack gmatrix NFile=file(NFileName,"rb"); if(AllN==T){ N=readBin(NFile,n=n*(n+1)/2,what=numeric(0),size=size) }else{ N=readBin(NFile,n=1,what=numeric(0),size=size) } i=sapply(1:n,sum_i) return(list(diag=grm[i],off=grm[i],id=id,N=N)) }
计算近交系数
--ibc
: 会用三种方法计算近交系数.
示例:
gcta64 --bfile test --autosome --make-grm --out grm
这里:
--bfile
读取的是plink的二进制文件
--autosome
是利用常染色体上的所有SNP信息, 这个不能省略
--make-grm
生成grm矩阵
--out
生成前缀名
会生成如下三个文件夹:
(base) [dengfei@localhost plink_file]$ ls grm* grm.grm.bin grm.grm.id grm.grm.N.bin
--grm test
: 这里的xx是前缀, 它其实包括三个文件:
test.grm.bin, test.grm.N.bin test.grm.id
命令:
gcta64 --grm grm --pca 3 --out out_pca
--grm
grm文件
--pca
PCA的数目为3
--out
结果输出文件
结果生成两个文件:
(base) [dengfei@localhost plink_file]$ ls out_pca.eigenv* out_pca.eigenval out_pca.eigenvec
在R语言中, 设置好工作路径, 键入如下命令:
dd=read.table("out_pca.eigenvec",header=F) head(dd) names(dd) = c("Fid","ID","PC1","PC2","PC3") plot(dd$PC1,dd$PC2,pch=c(rep(1,112),rep(2,103)),col=c(rep("blue",112),rep("red",103)),main="PCA",xlab="pc1",ylab="pc2") legend("bottomright",c("TEXT1","TEXT2"),pch=c(rep(1),rep(2)),col=c(rep("blue"),rep("red")))
结果:
b.ped
和b.map
使用gcta64做PCA分析将ped文件, 转化为bed文件
plink --file b --make-bed --out test
生成test.bed
, test.bim
,test.fam
三个文件
构建G矩阵grm
gcta64 --bfile test --autosome --make-grm --out grm
生成三个文件:
grm.grm.bin grm.grm.id grm.grm.N.bin
生成PCA, 数目为3
gcta64 --grm grm --pca 3
生成两个文件:
gcta.eigenval gcta.eigenvec
作图
dd=read.table("gcta.eigenvec",header=F) head(dd) names(dd) = c("Fid","ID","PC1","PC2","PC3") plot(dd$PC1,dd$PC2,pch=c(rep(1,112),rep(2,103)),col=c(rep("blue",112),rep("red",103)),main="PCA",xlab="pc1",ylab="pc2") legend("bottomright",c("TEXT1","TEXT2"),pch=c(rep(1),rep(2)),col=c(rep("blue"),rep("red")))
结果:
b.ped
和b.map
使用plink
做PCA分析看完gcta
, 发现plink
也可以构建G矩阵, 也可以进行PCA分析, 本数据使用plink
的解决方案:
只用一行代码, 就可以生成PCA的数据, 比gcta64简单太多了.
plink --file b --pca 3
比较两个数据的结果, 可以看出, plink
和gcta64
结果一致.
对PCA作图:
结果一致, 因为plink调用的是gcta64的算法, 构建G矩阵, 构建PCA.
福利1
计算gcta64或者plink可以构建矩阵, asreml
也支持下三角的G矩阵或者G逆矩阵, 问题来了, 两者怎么联系到一起呢?
这样asreml
就可以愉快的进行GBLUP的分析了.
福利2
之前的博客中有提到利用H矩阵构建PCA
分析, 那么如何操作呢?
欲听后事如何, 请听下回分解.
公众号后台回复:plink, 获得测试数据:b.ped
和b.map
, 用于本次分析.
如果您对于数据分析,对于软件操作,对于数据整理,对于结果理解,有任何问题,欢迎联系我。
Archiver|手机版|科学网 ( 京ICP备07017567号-12 )
GMT+8, 2024-12-28 16:48
Powered by ScienceNet.cn
Copyright © 2007- 中国科学报社