| SamplePCA {ClassDiscovery} | R Documentation |
Perform principal components analysis on the samples (columns) from a microarray or proteomics experiment.
SamplePCA(data, splitter = 0, usecor = FALSE, center = TRUE) ## S4 method for signature 'SamplePCA, missing': plot(x, splitter=x@splitter, col, main='', which=1:2, ...)
data |
Either a data frame or matrix with numeric values or an
ExpressionSet as defined
in the BioConductor tools for analyzing microarray data. |
splitter |
If data is a data frame or matrix, then splitter
must be either a logical vector or a factor. If data is an
ExpressionSet, then splitter can be a character string that
names one of the factor columns in the associated
phenoData subobject. |
center |
A logical value; should the rows of the data matrix be centered first? |
usecor |
A logical value; should the rows of the data matrix be scaled to have standard deviation 1? |
x |
A SamplePCA object |
col |
A list of colors to represent each level of the
splitter in the plot. If this parameter is missing, the
function will select colors automatically. |
main |
A character string; the plot title |
which |
A numeric vector of length two specifying which two principal components should be included in the plot. |
... |
Additional graphical parameters for plot |
.
The main reason for developing the SamplePCA class is that the
princomp function is very inefficient when the number of
variables (in the microarray setting, genes) far exceeds the number of
observations (in the microarray setting, biological samples). The
princomp function begins by computing the full covariance
matrix, which gets rather large in a study involving tens of thousands
of genes. The SamplePCA class, by contrast, uses singular
value decomposition (svd) on the original data matrix to
compute the principal components.
The SamplePCA function constructs and returns an object of the
SamplePCA class. We assume that the input data matrix has N
columns (of biological samples) and P rows (of genes).
The predict method returns a matrix whose size is the number of
columns in the input by the number of principal components.
Objects should be created using the SamplePCA function. In the
simplest case, you simply pass in a data matrix and a logical vector,
splitter, assigning classes to the columns, and the constructor
performs principal components analysis on the column. The
splitter is ignored by the constructor and is simply saved to
be used by the plotting routines. If you omit the splitter,
then no grouping structure is used in the plots.
If you pass splitter as a factor instead of a logical vector,
then the plotting routine will distinguish all levels of the factor.
The code is likely to fail, however, if one of the levels of the
factor has zero representatives among the data columns.
As with the class comparison functions (see, for example,
MultiTtest) that are part of OOMPA,
we can also perform PCA on
ExpressionSet objects
from the BioConductor libraries. In this case, we pass in an
ExpressionSet object along with a character string containing the
name of a factor to use for splitting the data.
scores:matrix of size NxN, where N is the
number of columns in the input, representing the projections of
the input columns onto the first N principal components. variances:numeric vector of length N; the
amount of the total variance explained by each principal component.components:matrix of size PxN (the same size
as the input matrix) containing each of the first P principal
components as columns.splitter:usecor:logical value; was the data standardized?shift:numeric vector of length P; the mean
vector of the input data, which is used for centering by the
predict method.scale:numeric vector of length P; the
standard deviation of the input data, which is used for scaling by
the predict method.call:call that records
how the object was created. signature(x = SamplePCA, y = missing): Plot the
samples in a two-dimensional principal component space. signature(object = SamplePCA): Project new
data into the principal component space. signature(x = SamplePCA): Produce a bar
chart of the variances explained by each principal component. signature(object = SamplePCA): Write out a
summary of the object.Kevin R. Coombes <kcoombes@mdanderson.org>
# simulate datda from three different groups
d1 <- matrix(rnorm(100*10, rnorm(100, 0.5)), nrow=100, ncol=10, byrow=FALSE)
d2 <- matrix(rnorm(100*10, rnorm(100, 0.5)), nrow=100, ncol=10, byrow=FALSE)
d3 <- matrix(rnorm(100*10, rnorm(100, 0.5)), nrow=100, ncol=10, byrow=FALSE)
dd <- cbind(d1, d2, d3)
kind <- factor(rep(c('red', 'green', 'blue'), each=10))
# perform PCA
spc <- SamplePCA(dd, splitter=kind)
# plot the results
plot(spc, col=levels(kind))
# mark the group centers
x1 <- predict(spc, matrix(apply(d1, 1, mean), ncol=1))
points(x1[1], x1[2], col='red', cex=2)
x2 <- predict(spc, matrix(apply(d2, 1, mean), ncol=1))
points(x2[1], x2[2], col='green', cex=2)
x3 <- predict(spc, matrix(apply(d3, 1, mean), ncol=1))
points(x3[1], x3[2], col='blue', cex=2)
# check out the variances
screeplot(spc)
# cleanup
rm(d1, d2, d3, dd,kind, spc, x1, x2, x3)