----- Forwarded message from "Collyer, Michael" <michael.coll...@wku.edu> -----

Date: Sat, 27 Apr 2013 10:04:59 -0400
From: "Collyer, Michael" <michael.coll...@wku.edu>
Reply-To: "Collyer, Michael" <michael.coll...@wku.edu>
Subject: Re: 2B-PLS vs PLSR
To: "morphmet@morphometrics.org" <morphmet@morphometrics.org>

Just an addendum to Dean's suggestion, in case one would rather work with correlation matrices instead of covariance matrices (plus a bit of a warning).

One could use R.XY (the corss-correlation matrix) instead of S.XY, decompose R.XY via SVD, project the data onto singular vectors, and find their correlation.  This might be a wise decision if one of the matrices has variables on vastly different scales.  R.XY can be found in R by

R.XY <- cor(cbind(X, Y))

Using 'plsr' (as Dean showed), one must first standardize the matrices.  This can be done by

X <- scale(X, scale = T)*sqrt(n)/sqrt(n-1)
Y <- scale(Y, scale = T)*sqrt(n)/sqrt(n-1)

Note that the sqrt(n)/sqrt(n-1), where n is the number of subjects (rows) in X and Y, is essential to produce consistent results with the "by hand" approach.  R uses a sample standard deviation (not a population standard deviation) in its scale function.  This correction assures that e.g., 1/n*t(X)%*%X = cor(X), after X has been standardized.

However, if one uses a resampling approach to generate P-values for the correlation between PLS scores, the standard deviation correction is somewhat arbitrary, since it would be a constant in every permutation.

Cheers! -Mike

Michael Collyer

Assistant Professor
Department of Biology
Western Kentucky University
1906 College Heights Blvd. #11080 
Bowling Green, KY 42101-1080
Phone: 270-745-8765; Fax: 270-745-6856
Email: michael.coll...@wku.edu

On Apr 27, 2013, at 2:05 AM, <morphmet_modera...@morphometrics.org> wrote:


----- Forwarded message from Dean Adams <dcad...@iastate.edu> -----

Date: Fri, 26 Apr 2013 10:20:35 -0400
From: Dean Adams <dcad...@iastate.edu>
Reply-To: Dean Adams <dcad...@iastate.edu>
Subject: Re: 2B-PLS vs PLSR
To: morphmet@morphometrics.org

Rodrigo,

The two methods are identical; plsr() is just an implementation of two-block partial least squares. To obtain the PLS correlation between primary PLS vectors in plsr(), do: 

pls.res<- plsr(Y ~ X)
cor(pls.res$scores[,1],pls.res$Yscores[,1])

The same result could also be found 'by hand' following the steps in Rohlf and Corti 2000: obtain the cross-covariance matrix S.XY, decompose it via SVD, project the data onto the vectors, and find their correlation.

Dean
--
Dr. Dean C. Adams
Professor
Department of Ecology, Evolution, and Organismal Biology
Department of Statistics
Iowa State University
Ames, Iowa
50011
www.public.iastate.edu/~dcadams/
phone: 515-294-3834


On 4/25/2013 4:45 PM, morphmet_modera...@morphometrics.org wrote:

----- Forwarded message from Rodrigo Lima <rodrigo.l...@mail.mcgill.ca> -----

Date: Wed, 24 Apr 2013 09:57:46 -0400
From: Rodrigo Lima <rodrigo.l...@mail.mcgill.ca>
Reply-To: Rodrigo Lima <rodrigo.l...@mail.mcgill.ca>
Subject: 2B-PLS vs PLSR
To: "morphmet@morphometrics.org" <morphmet@morphometrics.org>

Dear morphometricians,

I have a question about the PLS analysis and I would be very thankful for any insight provided. 

What is the difference between two-block PLS (as in Rohf and Corti 2000) and PLS regression (PLSR) implemented in the pls package in R (Mevik and Wehrens 2007)? I'm trying to relate skull shape to climatic variables, which one would be more appropriate in this case?

Thank you,
Rodrigo 


----- End forwarded message -----






----- End forwarded message -----



----- End forwarded message -----





Reply via email to