plot carico Correlazione da PLSR con le osservazioni utilizzando ggplot2

voti
1

Sto indagando la correlazione tra dati sensoriali e misurazioni chimiche che utilizzano regressione PLS dal plspacchetto. In ultima analisi, voglio visualizzare i risultati in un tracciato di correlazione di carico come illustrato dall'esempio seguente. Finora sono riuscito a fare la trama con X e Y matrici di correlazione, ma non ho trovato un modo per proiettare le osservazioni sul terreno.

!

Come esempio, utilizzo i oliveoildati impostati dalla plsconfezione. I Computerizzata i carichi di correlazione (secondo il metodo descritto qui ) e creato un tracciato di correlazione utilizzando ggplot2(Questo può essere fatto in modo semplice utilizzando il plsdepotpacchetto, ma mi piace la versatilità di ggplot):

library(pls)
data(oliveoil)
oil <- plsr(sensory ~ chemical, scale = TRUE, data = oliveoil)

scores <- oil$scores
sc1 <- scores[,1]
sc2 <- scores[,2]
scores <- as.data.frame(cbind(sc1, sc2))
cl_plsr <- cor(model.matrix(oil), scores)
df_cor <- as.data.frame(cl_plsr)
df_depend_cor <- as.data.frame(cor(oliveoil$sensory, scores))
plot_loading_correlation  <-  rbind(df_cor, df_depend_cor)
plot_loading_correlation1 <- setNames(plot_loading_correlation, c(comp1, comp2))

#Function to draw circle
circleFun <- function(center = c(0,0),diameter = 1, npoints = 100){
  r = diameter / 2
  tt <- seq(0,2*pi,length.out = npoints)
  xx <- center[1] + r * cos(tt)
  yy <- center[2] + r * sin(tt)
  return(data.frame(x = xx, y = yy))
}

dat_plsr <- circleFun(c(0,0),2,npoints = 100)

library(ggplot2)
library(ggrepel)

p <- ggplot(data=plot_loading_correlation1, aes(comp1, comp2))+
  theme_bw() +
  geom_hline(aes(yintercept = 0), size=.2, linetype = 3)+ 
  geom_vline(aes(xintercept = 0), size=.2, linetype = 3)+
  geom_text_repel(aes(label = rownames(plot_loading_correlation1), 
              colour = c(black,black,black,black,black, 
                         red,red,red,red,red,red)))+
  scale_color_manual(values=c(blue,red))+
  scale_x_continuous(breaks = seq(-1,2.5, by=0.5))+
  scale_y_continuous(breaks = seq(-1.5,2.5, by=0.5))+
  coord_fixed(ylim=c(-1, 1), xlim=c(-1, 1)) + xlab(PC 1) + ylab(PC 2)+ 
  geom_path(data=dat_plsr ,
        aes(x,y), colour = darkgrey)+
  theme(legend.title=element_blank())+
  theme(axis.ticks = element_line(colour = black))+
  theme(axis.title = element_text(colour = black))+
  theme(axis.text = element_text(color=black))+
  theme(legend.position='none')+
  theme(panel.grid.minor = element_blank()) +
  theme(panel.grid.major = element_blank()) +
  geom_point(data = plot_loading_correlation1,
         aes(x=comp1, y=comp2), 
         colour = c(blue,blue,blue,blue,blue,
                    red,red,red,red,red,red), 
         shape = c(21,21,21,21,21,22,22,22,22,22,22),          
         fill = c(blue,blue,blue,blue,blue,
                  red,red,red,red,red,red),
         size = 2.2)
p

tracciato

Come posso proiettare singole osservazioni in quella trama come illustrato nell'esempio di cui sopra? Qualora i punteggi essere scalati in modo che appoggino sulla scala carichi di correlazione (da -1 a 1)? Ed è che accettabile scientificamente?

È pubblicato 20/10/2018 alle 13:51
fonte dall'utente
In altre lingue...                            

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more