LD修剪
在运行PCA之前,我们使用LD剪枝来选择一组独立的snp进行分析。我们使用snpgdsLDpruning
在SNPRelatepackage,它返回snp id的列表。
library(SNPRelate) # read in GDS data GDS <- snpgdsOpen(gdsfile) snpset <- snpgdsLDpruning(GDS, method="corr", slide.max. data)bp=10e6, ld.threshold=sqrt(0.1), verbose=FALSE) pruned <- unlist(snpset, use.names=FALSE)
## [1] 3826
(修剪)
## [1] 6 7 15 17 22 31
snpgdsClose (gds)
血统差异的两两测量
仅根据成对的遗传相关性测量(即亲属关系系数),就有可能在样本中确定一个相互不相关的个体子集。然而,为了获得整个样本的准确群体结构推断,样本中所有个体的祖先至少由这个子集中的一个个体表示是重要的。为了确定一个相互不相关的和具有祖先代表性的个体子集,PC-AiR还利用祖先差异的措施。使用king -鲁棒亲属系数估计器(Manichaikul et al., 2010)计算这些测量值,该估计器为具有不同血统的不相关个体对提供系统性的负估计。一个人拥有的负的成对估计的数量提供了关于这个人的祖先与样本的其他部分有多大不同的信息,这有助于优先考虑应该保留在祖先代表子集中的个人。
KING软件的相关输出是两个扩展名为.kin0和.kin的文本文件。的kingToMatrix
函数可用于从输出中提取亲缘系数(我们将其用作分歧度量),并创建一个可供* *(创世纪)(//www.anjoumacpherson.com/packages/3.10/GENESIS)
功能。
#创建KING估计库的矩阵(GENESIS)文件(“extdata”、“MXL_ASW。kin0", package="GENESIS"),系统。文件(“extdata”、“MXL_ASW。kin", package="GENESIS")), estimator ="亲缘关系")
NA19649 -0.0656 -0.0497 -0.0486 ## NA19649 -0.0761 0.5000 0.2513 -0.0187 -0.0141 ## NA19650 -0.0656 0.2513 0.5000 -0.0037 -0.0033 ## NA19651 -0.0497 -0.0187 -0.0037 0.5000 0.0112 ## NA19652 -0.0486 -0.0141 -0.0033 0.0112 0.5000
矩阵的列名和行名是个体id,每个非对角线条目是指定个体对的king -鲁棒估计。
运行KING软件的替代方案是snpgdsIBDKING
函数从SNPRelate包可以直接从GDS文件中计算king -鲁棒估计。此函数的输出包含一个成对估计的矩阵,可由《创世纪》功能。
运行pc航空
PC-AiR算法需要对亲缘关系和祖先差异进行成对测量,以便将样本划分为“不相关子集”和“相关子集”。亲属关系系数估计值用于确定亲属,因为一组亲属中只有一个人可以被包括在“无亲属子集”中,其余的人必须被分配到“有亲属子集”。由KING-robust计算的祖先差异度量用于帮助从一组亲属中选择哪个个体具有最独特的祖先,并应优先纳入“不相关子集”。
上面读到的KING-robust估计值通常用于衡量不相关个体对的祖先差异,但它们也可以用于衡量亲属的亲属关系(注:对于不同血统的混合亲属,它们可能是有偏见的亲属关系衡量标准)。的pcair
功能执行PC-AiR分析。
我们使用GWASTools包来创建所需的GenotypeData对象《创世纪》.
library(GWASTools) HapMap_geno <- GdsGenotypeReader(filename = gdsfile) #创建一个基因类型数据类对象HapMap_genoData <-基因类型数据(HapMap_geno) HapMap_genoData
文件:/tmp/RtmpWTBzI6/Rinst608e7d808899/GENESIS/extdata/HapMap_ASW_MXL_geno。gds (901.8K) ## +[] * ## |- +样本。id {Int32,因子173 ZIP(40.9%), 283B} * ## |—+ snp。id {Int32 20000 ZIP(34.6%), 27.1K} ## |- + snp。位置{ Int32 20000 ZIP(34.6%), 27.1K } ## |--+ snp.chromosome { Int32 20000 ZIP(0.13%), 103B } ## \--+ genotype { Bit2 20000x173, 844.7K } * ## | SNP Annotation: ## NULL ## | Scan Annotation: ## NULL
mypcair <- pcair(HapMap_genoData, kinobj = KINGmat, divobj = KINGmat, snp。包括=修剪)
##基因型的主成分分析(PCA): ##不包括16,174个SNP(非常染色体或非选择)##不包括0个SNP(单态:TRUE, MAF: NaN,缺失率:NaN) ##工作空间:97个样本,3,826个SNP ##使用1 (CPU)核心## PCA:所有选择的基因型(0,1,2)的总和= 185850 ## CPU能力:双精度SSE2 ## 2019年11月2日21:09:01(内部增量:33400)## [..................................................0%等 : --- [==================================================] 100%,完成1 # #坐2019年11月2 21:09:02开始(特征值和特征向量)# #坐11月2 21:09:02 2019完成。## SNP加载:##工作空间:97个样本,3826个SNP ##使用1 (CPU)核心##使用前32个特征向量## SNP加载:所有选择的基因型(0,1,2)的总和= 185850 ## 11月2日星期六21:09:02 2019(内部增量:65536)## [..................................................0%等 : --- [==================================================] 100%,完成0 # #坐11月2 21:09:02 2019完成。##样本加载:##工作空间:76个样本,3826个SNPs ##使用1 (CPU)核心##使用前32个特征向量##样本加载:所有选定的基因型(0,1,2)的总和= 144468 ## 11月2日星期六21:09:02 2019(内部增量:65536)## [..................................................0%等 : --- [==================================================] 100%,完成0 # #坐11月2 21:09:02 2019完成。
genoData
是一个GenotypeData
类对象
kinobj
是一对亲属系数估计矩阵吗
divobj
是成对测量祖先差异的矩阵(king -鲁棒估计)
snp.include
是snp id的向量
如果有更好的亲属关系系数估计,那么kinobj
输入可以用这些估计的类似矩阵代替。的divobj
输入应始终保持king -鲁棒估计。
参考总体样本
由于PCA是一种无监督的方法,通常很难确定每个顶级pc所代表的总体结构。为了提供对推断结构的一些理解,有时建议在分析中包括已知祖先的参考人群样本。如果数据集包含这样的参考总体样本,我们可能希望确保这些参考总体样本包含在“不相关子集”中。这可以通过设置输入来实现unrel.set
等于一个向量,id
为参考总体样本的个别id。
mypcair <- pcair(HapMap_genoData, kinobj = KINGmat, divobj = KINGmat, snp。包括=修剪,unrel。set = id)
这将强制使用unrel.set
进入“不相关子集”,将它们的任何亲属移动到“相关子集”,然后对剩余的样本执行PC-AiR分区算法。
在不运行PCA的情况下划分一个样本
在不进行主成分分析的情况下,将样本划分为具有祖先代表性的个体“不相关子集”和个体“相关子集”可能是有意义的。的pcairPartition
方法中调用的pcair
函数,允许用户执行此操作。
part <- pcairPartition(kinobj = KINGmat, divobj = KINGmat)
输出包含两个向量,分别给出“不相关子集”和“相关子集”的单独id。
头(部分unrels美元);头(rel美元部分)
##[1]“na19708”“na19711”“na19712”“na19737”“na19740”“na19741”
##[1]“na19686”“na20346”“na20345”“na20347”“na19664”“na19677”
就像pcair
函数,输入unrel.set
可用于指定必须属于“不相关子集”的某些个人。
PC-AiR输出
类返回的对象pcair
函数有类pcair
.一个总结
类对象的方法pcair
提供,以获得结果的快速概述。
总结(mypcair)
##调用:## .pcair(gdsobj = gdsobj, kinobj = kinobj, divobj = divobj, kin。谷粒=谷粒。打, ## div.thresh = div.thresh, unrel.set = unrel.set, sample.include = sample.include, ## snp.include = snp.include, num.cores = num.cores, verbose = verbose) ## ## PCA Method: PC-AiR ## ## Sample Size: 173 ## Unrelated Set: 97 Samples ## Related Set: 76 Samples ## ## Kinship Threshold: 0.02209709 ## Divergence Threshold: -0.02209709 ## ## Principal Components Returned: 32 ## Eigenvalues: 2.946 1.717 1.326 1.292 1.277 1.255 1.242 1.223 1.219 1.201 ... ## SNPs Used: 3826
输出提供了总样本量以及分配到不相关和相关子集的个体数量,以及用于确定哪些个体对是相关的或祖先发散的阈值。并给出了顶部pc的特征值,有助于确定反映结构的pc数量。还指定了用于排除snp的次要等位基因频率(MAF)过滤器,以及过滤后分析的snp总数。使用该命令可以详细描述如何修改分析参数和函数的可用输出帮助(pcair)
.
绘图PC-AiR pc
的《创世纪》包还提供了情节
类对象的方法pcair
快速可视化电脑对。这些PC对图中的每个点代表一个样本个体。这些图有助于可视化样本中的种群结构,并识别具有相似祖先的个体集群。
# plot top 2 PCs plot(mypcair) # plot PCs 3和4 plot(mypcair, vx = 3, vy = 4)
默认是将PC值分别绘制为“不相关子集”和“相关子集”中的个人的黑点和蓝色加号。控件的标准输入可更改绘图颜色和字符以及其他标准绘图参数情节
函数。