'Is calculated factor scores in robCompositions R package, correct?

Please have a look at the factor scores returned from robCompositions package in this example:

data(expenditures)
x <- expenditures
res.rob <- pfa(x, factors=1, score="regression") 

according to pfa help, since the covariance is not specified,
the covariance is estimated from isometric log-ratio transformed data internally, but the data used for factor analysis are back-transformed to the "clr" space.

So the clr transformed data obtain as follows:

 # ilr transformation
 ilr <- function(x){
 x.ilr=matrix(NA,nrow=nrow(x),ncol=ncol(x)-1)
 for (i in 1:ncol(x.ilr)){
 x.ilr[,i]=sqrt((i)/(i+1))*
 log(((apply(as.matrix(x[,1:i]), 1, prod))^(1/i))/(x[,i+1]))
 }
 return(x.ilr)
  }
 

 #construct orthonormal basis:  
 #(matrix with ncol(x) rows and   ncol(x)-1 columns)

V=matrix(0,nrow=ncol(x),ncol=ncol(x)-1)
for (i in 1:ncol(V)){
V[1:i,i] <- 1/i
V[i+1,i] <- (-1)
V[,i] <- V[,i]*sqrt(i/(i+1))
}
z=ilr(x) #ilr transformed data
y=z%*%t(V) #clr transformed data 

now the factor scores using regression method might be calculated as follows:

 loa<-c(0.970,0.830,0.986,0.876,0.977)  #res.rob object

 facscores<- y%*%loa

 head(facscores)
           
 -0.009485110
  0.009680645
  0.008426665
 -0.015401000
 -0.003610644
 -0.004584145

but calling res.rob$scores returns us

head(res.rob$scores)

Factor1 -755.2681 705.5309 4196.5652 -778.6955 -628.2141 -663.4534

So please check am I wrong or there is probably a bug in the pfa command? Yours, Hamid

r


Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source