rearrange
compares one set of axes for row points and column points (from the bootstrap
data matrix) to another (from the sample data matrix) by looking at all possible
reorderings and reflections (only) of the bootstrap axes and picking the one which
best matches the sample axes.
rearrange(
RS,
RB,
CS,
CB,
r,
reflectonly = FALSE,
catype = "sca",
mcatype = "Burt",
mcaindividualboot = FALSE,
maxrearrange = 6
)
Sample axes for row points (as columns)
Bootstrap axes for row points (as columns)
Sample axes for column points (as columns)
Bootstrap axes for column points (as columns)
Rank of the bootstrap matrix
TRUE to reflect the axes only, no reordering
Can be "sca" for simple or "mca" for multiple CA. If "sca" then the rearranging will use both row axes and column axes, if "mca" then this depends on the mcatype parameter
"Burt" if using Burt matrix rows and columns are the same, so only use column axes "indicator" if using indicator matrix, only use row axes
TRUE to use highly experimental method
Maximum number of axes to rearrange
list containing: T = matrix to rearrange xB so it is equivalent to xS, i.e. xS <- xB * T numre = number of axes checked for rearranging = min(r,maxrearrange) match = assign$objval from the Hungarian algorithm same = flag for whether there was no reordering of axes (but may have been reflection)
This is only intended for internal use by the cabootcrs
function.
Finds the rearrangement of columns of RB and CB to maximise match = tr( abs(RS'*RB + CS'*CB) )
Uses the Hungarian algorithm via lp.assign in lpSolve up to a maximum of maxrearrange vectors.
Algorithm assigns columns (B) to rows (S), hence transpose matrix so postmultiplication moves B to coincide with S.
In effect this is Procrustes rotation of bootstrap axes to best match sample axes, except that there is no rotation, only reflection and reordering of axes (aka rearranging).
Note that this seeks the best fit to all axes, not best fit just to the ones whose variances are being calculated, and does not weight the reordering by eigenvalues or restrict how far a vector can be reordered by. Hence a fairly low maxrearrange may be preferable.
Faster than full comparison when rank >= 4, for maxrearrange=6, but can take much longer if rearrange all axes
Rearranging more axes means higher chance of finding a matching axis, so std dev can be decreased by average of 1-2% if all axes are rearranged.
Limited testing suggests that rearranging all axes tends to over-reorder and hence underestimate variances, due to ignoring eigenvalues, hence seems best to rearrange 6 as before, unless very large numbers of close eigenvalues.
When mca bootstrap replicate has fewer "real" singular values (i.e. > 1/p) than the sample matrix then only the first B@realr axes will be compared, so that the last sample axis will get nothing from this replicate and the "real" bootstrap axes will be matched only with the same first few sample ones.
r = rank of bootstrap matrix, so if < sample rank will ignore last sample axis
# NOT RUN {
# Not intended for direct call by users
# }
Run the code above in your browser using DataLab