I am very new to linear algebra...

I construct a rectangular matrix A1 from some sampled data which is m x n where m > n

[U1, S1, V1] = svd(A1)

If I then construct a new matrix A2 (also m x n, m > n) using resampling for e.g. bootstrapping of the original data I can then calculate a new SVD

[U2, S2, V2] = svd(A2)

Because of this that I read:

"Note that the decomposition of the resampled matrix is not guaranteed to produce a comparable set of latent variables, because both permutation and bootstrap resampling could induce arbitrary axis rotation (i.e. a change in the order of the latent variables) and/or axis reflection (i.e. a sign change for the weights)"

...I believe I need to correct using rotation using the original as a target?

[~, Q] = rotatefactors(U2, 'Method', 'procrustes', 'Target', U1, 'Type', 'orthogonal')

I want to then rotate my U2 and V2 matrices (is this the right way?):

U2r = U2 * S2 * Q;
V2r = V2 * S2 * Q;
  • however because the matrices A1 and A2 are not square, this fails in Matlab.

Finally, I want to calculate the new singular values S2r (is this necessary??) How do I scale them appropriately given that I have rotated U2 and V2?

Is this possible or have I completely misunderstood the process??

Thanks for any help, please bear in mind that I am a total beginner.


We have but a fragment of information, so the answer may suffer limited applicability.

In general, the singular value decomposition provides an orthonormal basis to the domain $(\mathbf{V})$ and the codomain $(\mathbf{U})$. Additionally, the spaces are aligned by the SVD. The relative rotations are sacred. You can't just change one.

In general $$ \mathbf{U} \, \Sigma \, \mathbf{V}^* \ne \mathbf{R}(\theta) \, \mathbf{U} \, \Sigma \, \left( \mathbf{R}(\theta) \mathbf{V} \, \right)^{*} $$


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.