14.3.6 Robust Versus Classical Factor Analysis

# Fig 14.13: Loadings of robust and classical FA
library(StatDA)
data(moss)
data(kola.background)

X=moss[,"XCOO"]
Y=moss[,"YCOO"]

sel=c("Ag","Al","As","B","Ba","Bi","Ca","Cd","Co","Cr","Cu","Fe","Hg","K","Mg",
"Mn","Mo","Na","Ni","P","Pb","Rb","S","Sb","Si","Sr","Th","Tl","U","V","Zn")
x=log10(moss[,sel])

set.seed(100)
x.mcd=covMcd(x,cor=TRUE)

# robust scaling
x.rsc=scale(x,x.mcd$cent,sqrt(diag(x.mcd$cov)))

# robust PFA
res=pfa(x.rsc,factors=5,covmat=x.mcd,scores="regression",rotation="varimax")

# classical PFA
res1=pfa(scale(x),factors=5,scores="regression",rotation="varimax")


pdf("fig-14-13.pdf",width=8,height=8)
par(mfrow=c(2,1),mar=c(2,3,3,1))

loadplot(res,titlepl="Robust FA", crit=0.3)

loadplot(res1,titlepl="Classical FA", crit=0.3)


dev.off()