I am doing something that is commmon practice in economics to uniquely identify matrices. After deriving 3 unrotated factors from PCA, I then want to rotate them to be able to interpret them in economic terms.

The usual procedure is to choose an orthogonal matrix $U$ (3x3 in my case) such that $UU'=I$. Being a 3x3 matrix I need 3 additional restrictions to uniquely identify it. So, first, I compute $UU'$:

$UU' = \begin{bmatrix} u_{11} & u_{12} & u_{13} \\ u_{21} & u_{22} & u_{23}\\ u_{31} & u_{32} & u_{33} \end{bmatrix} \begin{bmatrix} u_{11} & u_{21} & u_{31} \\ u_{12} & u_{22} & u_{32}\\ u_{13} & u_{23} & u_{33} \end{bmatrix} = \begin{bmatrix} 1 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1 \end{bmatrix}$

and I get 6 equations in 9 unkowns:

(1) $u_{11}^2 + u_{12}^2 + u_{13}^2 = 1$,

(2) $u_{21}^2 + u_{22}^2 + u_{23}^2 = 1$,

(3) $u_{31}^2 + u_{32}^2 + u_{33}^2 = 1$,

(4) $u_{11}u_{21} + u_{12}u_{22} + u_{13}u_{23} = 0$,

(5) $u_{21}u_{31} + u_{22}u_{23} + u_{23}u_{33} = 0$,

(6) $u_{11}u_{31} + u_{22}u_{23} + u_{23}u_{33} = 0$

Then I add 3 additional restrictions to uniquely identify the matrix:

(7) $0.45u_{12} + 0.65u_{22} + 0.88u_{32} = 0$,

(8) $0.45u_{13} + 0.65u_{23} + 0.88u_{33} = 0$,

(9) $VCov(U_3F)' = 0$ (where this is the first derivative of the variance-covariance)

and I get a system of 9 equations in 9 unkowns which I can then solve.

Now, my silly question is: shall I treat it as a sytem of quadratic equations? I find difficult to see the structure of it. As a result, I find difficult to find the right function in R to solve it. But the most important thing for me is to understand what type of system I am solving and how can I structure it in a way it's clearer to me. Then if anyone has any suggestion on how to solve it in R would be incredibly useful.

Thanks a lot for your help!


$U$ is an orthonormal matrix, with columns having norm $1$ and orthogonal to each other. The solution is not unique, so coming up with a solution should suffice for you I guess, if there are no other restrictions. You can create a random matrix, and then orthonormalize its columns using gram-schmidt process. The following R script does it for you:

U = GramSchmidt(replicate(3, rnorm(3)))

Of course, GS process needs linearly independent columns, but with random generation you'll highly likely get one.

  • $\begingroup$ Thanks so much, this is super helpful! But, as you rightly point it out, the matrix is not uniquely identified. Let's assume I have equations for the restrictions (I have 3 other restrictions in fact - question edited to show you the full picture). How would you solve it? I need a package who reads symbolic equations and what else? I lost 5 days on this, you would be life-saver if you could help $\endgroup$ – Rollo99 Jan 22 '20 at 16:04
  • 1
    $\begingroup$ Well, $x$ equations and $x$ unknowns doesn't mean unique solution. For example, if you intersect two circles, you'll have two solutions. I'm not familiar with your (9)-th condition, but I think it's better to post your updated question in Math SE. You can satisfy your 7,8-th condition by choosing your first column as normalized version of $[0.45,0.65,0.88]^T$. $\endgroup$ – gunes Jan 23 '20 at 22:52
  • $\begingroup$ thanks I will post into Math SE. I agree, indeed I will have 9 solutions for every $u_{ij}$ unkown but in so doing the matrix U will be uniquely identified. Now I am looking into nleqslv in R to see whether I could solve it $\endgroup$ – Rollo99 Jan 24 '20 at 10:45

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.