Alterar o comprimento das cargas (setas) no gráfico PCA usando ggplot2 / ggfortify?
Tenho lutado para redimensionar o comprimento das cargas (setas) em um PCA ggplot2 / ggfortify. Procurei extensivamente por uma resposta a isso, e as únicas informações que encontrei codificam novas funções biplot ou referem-se a outros pacotes totalmente diferentes para PCA (ggbiplot, fatoextra), nenhum dos quais aborda a pergunta que gostaria de responder:
É possível dimensionar / alterar o tamanho das cargas de PCA no ggfortify?
Abaixo está o código que tenho para plotar um PCA usando as funções R de estoque, bem como o código para plotar um PCA usando autoplot / ggfortify. Você notará nas parcelas R de estoque que posso escalar as cargas simplesmente multiplicando por uma escalar (* 20 aqui) para que minhas flechas não fiquem presas no meio da plotagem PCA. Usando autoplot ... nem tanto. o que estou perdendo? Vou mudar para outro pacote, se necessário, mas realmente gostaria de entender melhor o ggfortify.
Em outros sites que encontrei, os limites dos eixos dos gráficos nunca parecem exceder +/- 2. Meu gráfico vai +/- 20 e as cargas ficam firmemente próximas de 0, presumivelmente na mesma escala dos gráficos com eixos menores. Eu ainda gostaria de plotar o PCA usando o ggplot2, mas se o ggfortify não o fizer, preciso encontrar outro pacote que o faça.
#load data geology rocks frame
georoc <- read.csv("http://people.ucsc.edu/~mclapham/earth125/data/georoc.csv")
#load libraries
library(ggplot2)
library(ggfortify)
geo.na <- na.omit(georoc) #remove NA values
geo_matrix <- as.matrix(geo.na[,3:29]) #create matrix of continuous data in data frame
pca.res <- prcomp(geo_matrix, scale = T) #perform PCA using correlation matrix (scale = T)
summary(pca.res) #return summary of PCA
#plotting in stock R
plot(pca.res$x, col = c("salmon","olivedrab","cadetblue3","purple")[geo.na$rock.type], pch = 16, cex = 0.2)
#make legend
legend("topleft", c("Andesite","Basalt","Dacite","Rhyolite"),
col = c("salmon","olivedrab","cadetblue3","purple"), pch = 16, bty = "n")
#add loadings and text
arrows(0, 0, pca.res$rotation[,1]*20, pca.res$rotation[,2]*20, length = 0.1)
text(pca.res$rotation[,1]*22, pca.res$rotation[,2]*22, rownames(pca.res$rotation), cex = 0.7)
#plotting PCA
autoplot(pca.res, data = geo.na, colour = "rock.type", #plot results, name using original data frame
loadings = T, loadings.colour = "black", loadings.label = T,
loadings.label.colour = "black")
Os dados vêm de um arquivo on-line de uma classe que eu estou cursando, então você pode copiar isso se tiver os pacotes ggplot2 e ggfortify instalados. Gráficos abaixo.