rainer grohmann
2005-Jul-05 10:22 UTC
[R] PLS: problem transforming scores to variable space
Dear List! I am trying to calculate the distance between original data points and their position in the PLS model. In order to do this, I tried to predict the scores using the predict.mvr function and calculate the corresponding positions in variable space. The prediction of scores works perfectly: ------ data(trees) # build model t<-plsr(Volume~.,data=trees) # predict scores for training data and compare: # column 1: scores from model building # column 2: scores obtained with predict.mvr # column 3: scores from the corresponding matrix-multiplication # only the first dimension is compared here. # However, results the other component agrees as well cbind(t$scores[,1], predict(t,trees,type="scores")[,1], (scale(as.matrix(trees[,-3]),scale=FALSE,center=TRUE)%*% t$projection)[,1]) ------ However, when I try to map the scores back to variable space, I ran into problems: My guess was to use the loadings matrix. In order to check the results, I took the scores from the model, mapped them to variable space and mapped them back to scores using the predict function. The result of this procedure should again be the scores. I know the last step - prediting scores - works (see above). Therefore, if I ended up with the original scores after my transformations, I knew my first step - mapping of scores to variable space - was correct too, I would indeed obtain the original scores. Obviously, I am mistaken (otherwise, I wouldn't ask you for help). Here is, what I did (based on the code above) ------ # map scores to variable space and back to scores and compare: # column 1: original scores from model building # column 2: incorrectly mapped scores # only the first dimension is compared here. # However, results the other component disagrees as well cbind(t$scores[,1],(t$scores%*%(t$loadings)%*%t$projection)[,1]) ------ Any help or hint would be appreciated! Rainer> R.version_ platform i686-pc-linux-gnu arch i686 os linux-gnu system i686, linux-gnu status major 2 minor 1.0 year 2005 month 04 day 18 language R --
Bjørn-Helge Mevik
2005-Jul-15 11:21 UTC
[R] PLS: problem transforming scores to variable space
rainer grohmann writes:> However, when I try to map the scores back to variable space, I ran into > problems:[...]> cbind(t$scores[,1],(t$scores%*%(t$loadings)%*%t$projection)[,1])You need to transpose the loadings:> all.equal(unclass(t$scores),+ t$scores %*% t(t$loadings) %*% t$projection) [1] TRUE (A tip: Since 't' is used for transposing, it is usually a Good Thing(TM) to avoid using it as a varable name.) -- Bj??rn-Helge Mevik