princomp#
Purpose#
Computes principal components of a data matrix.
Format#
- { p, v, a } = princomp(x, j)#
- Parameters:
x (NxK data matrix) – \(N > K\), full rank.
j (scalar) – number of principal components to be computed (\(j <= K\)).
- Returns:
p (NxJ matrix) – the first j principal components of x in descending order of amount of variance explained.
v (Jx1 vector) – fractions of variance explained.
a (JxK matrix) –
factor loadings such that:
\[x = p*a + error.\]
Remarks#
Adapted from a program written by Mico Loretan.
The algorithm is based on Theil, Henri “Principles of Econometrics.” Wiley, NY, 1971, 46-56.
Example#
// Create matrix with percent return
// of 4 stocks over 11 time periods
pcnt_return = { 0.0646 1.2326 0.0508 -0.0346,
-0.1632 0.1806 0.1104 0.1276,
1.3477 1.3347 0.1424 0.0159,
-0.4465 -0.5691 -0.1524 -0.1719,
1.6232 1.4690 -0.0192 0.0979,
0.3381 0.5307 0.0610 0.0374,
-0.0383 0.2556 0.0370 0.0518,
0.4493 0.3140 0.0177 0.1001,
0.5896 0.0542 0.1991 0.2669,
-0.2218 0.3772 0.1189 0.1234,
1.1778 -0.0464 -0.1282 0.2171 };
// Compute: all 4 principal component vectors,
// percent variance explained
// matrix of factor loadings
{ p, v, a } = princomp(pcnt_return, 4);
After the code above:
p = 0.2662 -0.6077 0.0965 -0.2951 v = 0.8394 a = 2.4244 2.3264 0.1321 0.2227
0.0059 -0.1702 -0.3938 -0.1569 0.1436 0.9506 -0.9977 -0.1402 0.1566
0.5631 -0.0350 0.0953 0.6146 0.0144 0.0317 0.0153 -0.2757 -0.3420
-0.2170 0.0709 0.4012 -0.0219 0.0026 0.0208 -0.0188 0.1455 -0.1162
0.6491 0.0491 0.2359 -0.2269
0.1823 -0.1085 -0.0554 0.0444
0.0456 -0.1485 -0.1299 -0.1762
0.1624 0.0654 -0.1032 -0.1584
0.1445 0.2677 -0.6520 0.2598
0.0337 -0.3008 -0.3926 -0.2472
0.2447 0.6267 -0.0115 -0.5214
From the results above, we can see that approximately 83.9% of the variance in the pcnt_return is included in the first principal component vector and another 14.36% is included in the second principal component.