I would like to implement the method "Hierarchical PCA", as described in the following paper and compare it to a "standard" PCA. I like to do this in R

AVELLANEDA, Marco. Hierarchical pca and applications to portfolio management. Revista mexicana de economía y finanzas, 2020, 15. Jg., Nr. 1, S. 1-16.

My "standard" PCA is based on a T x n predictor matrix Predictors_train. Each of the predictors belongs to one of 5 "groups". I would use the following code:

pca_pred <- Predictors_train %>%
            prcomp(scale. = TRUE, center=TRUE) 

Now, implementing the method it seems I have to

  1. reestimate/adjust the correlation matrix
  2. estimate a new PCA based on the adjusted covariance matrix.

As for 2), it seems to be clear that I have to use prcomp() on the adjusted correlation matrix, e.g. in the following form

pca_pred <- AdjustedMatrix %>%
            prcomp(scale. = TRUE, center=TRUE) 

(Maybe I will not need the scaling, as I use a matrix as an input this time and not time series.

As for 1), the method in the paper suggests that I would a) calculate the standard correlation matrix b) use the results within the "blocks" of the predictors c) for elements of different blocks, use the simplified estimate beta_ibeta_jcorr(F_k(i), F_k(j)) , where the F_k()s are the first factors of PCA components within the blocks.

My approach would be to write all the low-level code myself (using some loops). But maybe there is an easier way to do this? In a sense, it seems to be a standard operation, but I cannot figure out the "generic" aspect that would help me to calculate the intra- and inter-block correlation efficiently.

Has anyone experienced similar problems?



Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.