I'm trying to create an eigencor plot of clinical variables against principle components using the PCAtools guidelines. https://www.bioconductor.org/packages/devel/bioc/vignettes/PCAtools/inst/doc/PCAtools.html#correlate-the-principal-components-back-to-the-clinical-data I want to first eliminate batch effects as the batches are really noticeable in PCA plots. This is the script I currently have:
> analysis_PCA <- vst(analysis_dds, blind=FALSE)
mat <- assay(analysis_PCA)
mm <- model.matrix(~DM, colData(analysis_PCA))
mat <- limma::removeBatchEffect(mat, batch=analysis_PCA$Batch, design=mm)
assay(analysis_PCA) <- mat
p <- pca(analysis_PCA, metadata = DASCondition, removeVar = 0.1)
eigencorplot(p,
components = getComponents(p, 1:10),
components = getComponents(p, 1:10),
metavars = c("BMI", "LFVEF"),
col = c('darkblue', 'blue2', 'black', 'red2', 'darkred'),
cexCorval = 0.7,
colCorval = 'white',
fontCorval = 2,
posLab = 'bottomleft',
rotLabX = 45,
posColKey = 'top',
cexLabColKey = 1.5,
scale = TRUE,
main = 'PC1-27 clinical correlations',
colFrame = 'white',
plotRsquared = FALSE)
This produced this error:
Error in t.default(mat) : argument is not a matrix
I know that the plot runs if I don't use the removeBatchEffect portion and if i use the removeBatchEffect and then plotPCA to generate PCA plots it works.
1 answer
Like the error says, you have to feed a matrix. You are feeding an assay object instead.
At least assuming the error is coming from the pca call. Feed mat to it directly or extract the results from the assay (as.matrix(assay(analysis_PCA)).
Log in to answer this question.