snpgdsPCA: Principal Component Analysis (PCA) on SNP genotype data

Description Usage Arguments Details Value Author(s) References See Also Examples

View source: R/PCA.r

Description

To calculate the eigenvectors and eigenvalues for principal component analysis in GWAS.

Usage

1
2
3
4
snpgdsPCA(gdsobj, sample.id = NULL, snp.id = NULL, autosome.only = TRUE,
	remove.monosnp = TRUE, maf = NaN, missing.rate = NaN, eigen.cnt = 32,
	num.thread = 1, bayesian = FALSE, need.genmat = FALSE,
	genmat.only = FALSE, verbose = TRUE)

Arguments

gdsobj

a GDS file object (gds.class)

sample.id

a vector of sample id specifying selected samples; if NULL, all samples are used

snp.id

a vector of snp id specifying selected SNPs; if NULL, all SNPs are used

autosome.only

if TRUE, use autosomal SNPs only

remove.monosnp

if TRUE, remove monomorphic SNPs

maf

to use the SNPs with ">= maf" only; if NaN, no MAF threshold

missing.rate

to use the SNPs with "<= missing.rate" only; if NaN, no missing threshold

eigen.cnt

output the number of eigenvectors; if eigen.cnt <= 0, then return all eigenvectors

num.thread

the number of CPU cores used

bayesian

if TRUE, use bayesian normalization

need.genmat

if TRUE, return the genetic covariance matrix

genmat.only

return the genetic covariance matrix only, do not compute the eigenvalues and eigenvectors

verbose

if TRUE, show information

Details

The minor allele frequency and missing rate for each SNP passed in snp.id are calculated over all the samples in sample.id.

Value

Return a snpgdsPCAClass object, and it is a list:

sample.id

the sample ids used in the analysis

snp.id

the SNP ids used in the analysis

eigenval

eigenvalues

eigenvect

eigenvactors, "# of samples" x "eigen.cnt"

TraceXTX

the trace of the genetic covariance matrix

Bayesian

whether use bayerisan normalization

genmat

the genetic covariance matrix

Author(s)

Xiuwen Zheng

References

Patterson N, Price AL, Reich D (2006) Population structure and eigenanalysis. PLoS Genetics 2:e190.

Price AL, Patterson NJ, Plenge RM, Weinblatt ME, Shadick NA, Reich D (2006) Principal components analysis corrects for stratification in genome-wide association studies. Nat Genet. 38, 904-909.

See Also

snpgdsPCACorr, snpgdsPCASampLoading, snpgdsPCASNPLoading

Examples

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# open an example dataset (HapMap)
genofile <- openfn.gds(snpgdsExampleFileName())

# get population information
#   or pop_code <- scan("pop.txt", what=character()), if it is stored in a text file "pop.txt"
pop_code <- read.gdsn(index.gdsn(genofile, "sample.annot/pop.group"))

# get sample id
samp.id <- read.gdsn(index.gdsn(genofile, "sample.id"))

# run PCA
RV <- snpgdsPCA(genofile)

# eigenvalues
RV$eigenval

# variance proportion
head(RV$eigenval / sum(RV$eigenval))
# [1] 0.122763042 0.058776373 0.010073833 0.009404113 0.008397200 0.007333046

# make a data.frame
tab <- data.frame(sample.id = samp.id, pop = factor(pop_code),
	EV1 = RV$eigenvect[,1],    # the first eigenvector
	EV2 = RV$eigenvect[,2],    # the second eigenvector
	stringsAsFactors = FALSE)
head(tab)
#   sample.id pop         EV1         EV2
# 1   NA19152 YRI  0.08405438  0.01243429
# 2   NA19139 YRI  0.08363225  0.01099277
# 3   NA18912 YRI  0.08104325  0.01196670
# 4   NA19160 YRI  0.08682153  0.01465503
# 5   NA07034 CEU -0.03096588 -0.07717809
# 6   NA07055 CEU -0.03212054 -0.08159248

# draw
plot(tab$EV2, tab$EV1, col=as.integer(tab$pop),
	xlab="eigenvector 2", ylab="eigenvector 1")
legend("topleft", legend=levels(tab$pop), pch="o", col=1:4)


# close the genotype file
closefn.gds(genofile)

Example output

Loading required package: gdsfmt
SNPRelate -- supported by Streaming SIMD Extensions 2 (SSE2)
Hint: it is suggested to call `snpgdsOpen' to open a SNP GDS file instead of `openfn.gds'.
Principal Component Analysis (PCA) on genotypes:
Excluding 365 SNPs on non-autosomes
Excluding 1 SNP (monomorphic: TRUE, MAF: NaN, missing rate: NaN)
Working space: 279 samples, 8,722 SNPs
    using 1 (CPU) core
PCA:    the sum of all selected genotypes (0,1,2) = 2446510
CPU capabilities: Double-Precision SSE2
Wed Dec 27 13:38:26 2017    (internal increment: 408)

[..................................................]  0%, ETC: ---    
[==================================================] 100%, completed in 0s
Wed Dec 27 13:38:26 2017    Begin (eigenvalues and eigenvectors)
Wed Dec 27 13:38:26 2017    Done.
  [1] 33.985988 16.234579  2.810976  2.634050  2.345686  2.047077  2.043451
  [8]  2.013669  2.001622  1.959272  1.955244  1.930364  1.903491  1.884951
 [15]  1.868337  1.860615  1.842754  1.819743  1.806393  1.797601  1.781820
 [22]  1.773507  1.750451  1.742917  1.726706  1.708286  1.695359  1.681574
 [29]  1.671071  1.651085  1.634008  1.602839       NaN       NaN       NaN
 [36]       NaN       NaN       NaN       NaN       NaN       NaN       NaN
 [43]       NaN       NaN       NaN       NaN       NaN       NaN       NaN
 [50]       NaN       NaN       NaN       NaN       NaN       NaN       NaN
 [57]       NaN       NaN       NaN       NaN       NaN       NaN       NaN
 [64]       NaN       NaN       NaN       NaN       NaN       NaN       NaN
 [71]       NaN       NaN       NaN       NaN       NaN       NaN       NaN
 [78]       NaN       NaN       NaN       NaN       NaN       NaN       NaN
 [85]       NaN       NaN       NaN       NaN       NaN       NaN       NaN
 [92]       NaN       NaN       NaN       NaN       NaN       NaN       NaN
 [99]       NaN       NaN       NaN       NaN       NaN       NaN       NaN
[106]       NaN       NaN       NaN       NaN       NaN       NaN       NaN
[113]       NaN       NaN       NaN       NaN       NaN       NaN       NaN
[120]       NaN       NaN       NaN       NaN       NaN       NaN       NaN
[127]       NaN       NaN       NaN       NaN       NaN       NaN       NaN
[134]       NaN       NaN       NaN       NaN       NaN       NaN       NaN
[141]       NaN       NaN       NaN       NaN       NaN       NaN       NaN
[148]       NaN       NaN       NaN       NaN       NaN       NaN       NaN
[155]       NaN       NaN       NaN       NaN       NaN       NaN       NaN
[162]       NaN       NaN       NaN       NaN       NaN       NaN       NaN
[169]       NaN       NaN       NaN       NaN       NaN       NaN       NaN
[176]       NaN       NaN       NaN       NaN       NaN       NaN       NaN
[183]       NaN       NaN       NaN       NaN       NaN       NaN       NaN
[190]       NaN       NaN       NaN       NaN       NaN       NaN       NaN
[197]       NaN       NaN       NaN       NaN       NaN       NaN       NaN
[204]       NaN       NaN       NaN       NaN       NaN       NaN       NaN
[211]       NaN       NaN       NaN       NaN       NaN       NaN       NaN
[218]       NaN       NaN       NaN       NaN       NaN       NaN       NaN
[225]       NaN       NaN       NaN       NaN       NaN       NaN       NaN
[232]       NaN       NaN       NaN       NaN       NaN       NaN       NaN
[239]       NaN       NaN       NaN       NaN       NaN       NaN       NaN
[246]       NaN       NaN       NaN       NaN       NaN       NaN       NaN
[253]       NaN       NaN       NaN       NaN       NaN       NaN       NaN
[260]       NaN       NaN       NaN       NaN       NaN       NaN       NaN
[267]       NaN       NaN       NaN       NaN       NaN       NaN       NaN
[274]       NaN       NaN       NaN       NaN       NaN       NaN
[1] NaN NaN NaN NaN NaN NaN
  sample.id pop         EV1         EV2
1   NA19152 YRI -0.08411287 -0.01226860
2   NA19139 YRI -0.08360644 -0.01085849
3   NA18912 YRI -0.08110808 -0.01184524
4   NA19160 YRI -0.08680864 -0.01447106
5   NA07034 CEU  0.03109761  0.07709255
6   NA07055 CEU  0.03228450  0.08155730

SNPRelate documentation built on May 2, 2019, 4:56 p.m.