Description Usage Arguments Details Value Author(s) References See Also Examples
To calculate the eigenvectors and eigenvalues for principal component analysis in GWAS.
1 2 3 4 |
gdsobj |
a GDS file object ( |
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 |
The minor allele frequency and missing rate for each SNP passed in snp.id
are calculated over all the samples in sample.id
.
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 |
Xiuwen Zheng
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.
snpgdsPCACorr
, snpgdsPCASampLoading
,
snpgdsPCASNPLoading
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)
|
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
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.