Run a PCA on a trait matrix and return axes scores, loadings and explained variance.
make.PCA <- function(TRAITS, dimensionsAux, savePCA) {
paranAux <- paran(TRAITS)
PCA_TRAITS <- list()
PCA_TRAITS$traits <- TRAITS
PCA_TRAITS$PCA <- princomp(PCA_TRAITS$traits)
PCA_TRAITS$dimensions <- dimensionsAux
PCA_TRAITS$variance <- (summary(PCA_TRAITS$PCA)[1][[1]]^2)[1:dimensionsAux] /
sum(summary(PCA_TRAITS$PCA)[1][[1]]^2)
PCA_TRAITS$loadings <- PCA_TRAITS$PCA$loadings
PCA_TRAITS$traitsUse <- data.frame(PCA_TRAITS$PCA$scores[, 1:PCA_TRAITS$dimensions])
if (!is.na(savePCA)) {
saveRDS(PCA_TRAITS, savePCA)
}
return(PCA_TRAITS)
}