## extra - color BIPLOT 
### Pedro C. Silva

color_biplot<-function(data,
                       axes=1:2,
                       cex.ind=rep(1,nrow(data)),
                       cex.var=1,
                       labels.ind=1:nrow(X),
                       col.ind=rep("black",nrow(data)),
                       col.var=rep("red",ncol(data)),
                       main=""){
  data<-scale(data,scale=FALSE)
  M<-nrow(data)
  q<-ncol(data)
  X<-data 
  N <-nrow(X)
  p <-ncol(X)
  X.svd <- svd(X)
  X.pca<-prcomp(X)
  U <- X.svd$u
  D <- diag(X.svd$d)
  V<- X.svd$v
  scores <- U %*% D  
  sdev<-diag(D)/sqrt(N-1) ### PC's standard deviations = X.pca$sdev
  V.aux<-V
  G<-data %*% V.aux %*% solve(D)*sqrt(N-1)
  H=V.aux %*% D/max(abs(V.aux %*% D))*max(abs(G))/2
  plot(G,cex=.001,asp=TRUE,xlab="PC1",ylab="PC2",main=main)
  abline(h=0,lty=2,col="gray")
  abline(v=0,lty=2,col="gray")
  text(G[,1],G[,2],col=col.ind,cex=cex.ind,labels.ind)
  arrows(rep(0,p),rep(0,p),H[,1],H[,2],col=col.var,length=.1)
  text(H[,1]*1.3,H[,2]*1.3,col=col.var,cex=cex.var,labels=colnames(X))
}

### exemplo de utilizacao
color_biplot(iris[-5],col.ind = rep(c("red","blue","darkgreen"),c(50,50,50)))

