Performs a Two-Block PLS on two sets of data and assesses the significance of each score by permutation testing
pls2B( x, y, tol =1e-12, same.config =FALSE, rounds =0, useCor =FALSE, cv =FALSE, cvlv =NULL, mc.cores = parallel::detectCores(),...)
Arguments
x: array containing superimposed landmark data second block.Matrices are also allowed but the option 'same.config' will not work.
y: array containing superimposed landmark data of the first block. Matrices are also allowed but the option 'same.config' will not work.
tol: threshold for discarding singular values.
same.config: logical: if TRUE each permutation includes new superimposition of permuted landmarks. This is necessary if both blocks originate from landmarks that are superimposed together.
rounds: rounds of permutation testing.
useCor: if TRUE, the correlation matrix instead of the covariance matrix is used.
cv: logical: if TRUE, a leave-one-out cross-validation is performed
cvlv: integer: number of latent variables to test
mc.cores: integer: determines how many cores to use for the
...: arguments passed to ProcGPA
computation. The default is autodetect. But in case, it doesn't work as expected cores can be set manually. Parallel processing is disabled on Windows due to occasional errors.
Returns
svd: singular value decomposition (see svd) of the 'common' covariance block
Xscores: PLS-scores of x
Yscores: PLS-scores of y
CoVar: Dataframe containing singular values, explained covariation, correlation coeffictient between PLS-scores and p-values for singular values obtained from permutation testing
xlm: linear model: lm(Xscores ~ Yscores - 1)
ylm: linear model: lm(Yscores ~ Xscores - 1)
predicted.x: array containing matrices of cross-validated predictions for x(landmarks arrays will be vectorized using vecx)
predicted.y: array containing matrices of cross-validated predictions for y (landmarks arrays will be vectorized using vecx)
rv: RV-coefficient
p.value.RV: p-value for RV-coefficient determined by permutation testing
Details
The Two-Block PLS tries to find those linear combinations in each block maximising the covariance between blocks. The significance of each linear combination is assessed by comparing the singular value to those obtained from permuted blocks. If both blocks contain landmarks superimposed TOGETHER, the option same.config=TRUE requests superimposition of the permuted configurations (i.e. where the the landmarks of block x are replaced by corresponding landmarks of other specimen.
Examples
if(require(shapes)){### very arbitrary test:### check if first 4 landmarks covaries with the second 4proc <- procSym(gorf.dat)## we do only 50 rounds to minimize computation time## Not run:#same.config takes too long for CRAN checkpls1 <- pls2B(proc$rotated[1:4,,],proc$rotated[5:8,,], same.config=TRUE,rounds=50,mc.cores=2)## End(Not run)pls1 <- pls2B(proc$rotated[1:4,,],proc$rotated[5:8,,], same.config=FALSE,rounds=50,mc.cores=1)pls1
layout(matrix(1:4,2,2,byrow=TRUE))for(i in1:4) plot(pls1$Xscores[,i]~pls1$Yscores[,i])## predict first 4 landmarks from second 4 for first configlayout(1)predPLS <- predictPLSfromData(pls1,y=proc$rotated[5:8,,1])## show differences between prediction and originaldeformGrid2d(predPLS,proc$rotated[1:4,,1],pch=19)##plot the complete first configpoints(proc$rotated[,,1])##show effects of first latent variableplsEffects <- plsCoVar(pls1,i=1)deformGrid2d(plsEffects$x[,,1],plsEffects$x[,,2])##show on xdeformGrid2d(plsEffects$y[,,1],plsEffects$y[,,2],add=TRUE,pch=19)##show on y##show effects of 2nd latent variableplsEffects2 <- plsCoVar(pls1,i=2)deformGrid2d(plsEffects2$x[,,1],plsEffects2$x[,,2])##show on xdeformGrid2d(plsEffects2$y[,,1],plsEffects2$y[,,2],add=TRUE,pch=19)##show on y}
References
Rohlf FJ, Corti M. 2000. Use of two-block partial least-squares to study covariation in shape. Systematic Biology 49:740-753.