These functions first standardize the input SnpMatrix
in the
same way as does the function xxt
. The standardized
matrix is then either premultiplied (snp.pre.multiply
) or
postmultiplied (snp.post.multiply
) by a general matrix. Allele
frequencies for standardizing the input SnpMatrix may be supplied
but, otherwise, are calculated from the input SnpMatrix
1 2  snp.pre.multiply(snps, mat, frequency=NULL, uncertain = FALSE)
snp.post.multiply(snps, mat, frequency=NULL, uncertain = FALSE)

snps 
An object of class 
mat 
A general (numeric) matrix 
frequency 
A numeric vector giving the allele (relative)
frequencies to be used for standardizing the columns of 
uncertain 
If 
The two matrices must be conformant, as with standard matrix multiplication. The main use envisaged for these functions is the calculation of factor loadings in principal component analyses of large scale SNP data, and the application of these loadings to other datasets. The use of externally supplied allele frequencies for standardizing the input SnpMatrix is required when applying loadings calculated from one dataset to a different dataset
The resulting matrix product
David Clayton dc208@cam.ac.uk
xxt
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18  ##
## Calculate first two principal components and their loading, and verify
##
# Make a SnpMatrix with a small number of rows
data(testdata)
small < Autosomes[1:20,]
# Calculate the X.Xtranspose matrix
xx < xxt(small, correct.for.missing=FALSE)
# Calculate the first two principal components and corresponding eigenvalues
eigvv < eigen(xx, symmetric=TRUE)
pc < eigvv$vectors[,1:2]
ev < eigvv$values[1:2]
# Calculate loadings for first two principal components
Dinv < diag(1/sqrt(ev))
loadings < snp.pre.multiply(small, Dinv %*% t(pc))
# Now apply loadings back to recalculate the principal components
pc.again < snp.post.multiply(small, t(loadings) %*% Dinv)
print(cbind(pc, pc.again))

Questions? Problems? Suggestions? Tweet to @rdrrHQ or email at ian@mutexlabs.com.
All documentation is copyright its authors; we didn't write any of that.