#added Promax option  (11/5/16)
"kaiser" <- function(f,rotate="oblimin", m=4,pro.m=4) {
 if((!is.matrix(f)) && (!is.data.frame(f)))  {f <- as.matrix(f$loadings)} else {f <- as.matrix(f)}
if(!requireNamespace('GPArotation')) stop('GPArotation is required for the Kaiser normalization')
h2 <- diag(f %*% t(f))
weighted <- f/sqrt(h2)
#rotated <- call(paste('GPArotation',rotate,sep="::"),list(weighted))
if(rotate == "Promax") {rotated <- Promax(weighted,m=pro.m)} else {
rotated <- do.call(getFromNamespace(rotate,'GPArotation'),list(weighted))}
normalized <- rotated$loadings * sqrt(h2)
rotated$loadings <- normalized
class(rotated) <- c("psych","fa")
return(rotated)}
