I have a need to set-up a methodology to decompose the x-day yield curve moves into its underlying (3) PCAs. Specifically, for an example, to generate the 1-day moves in the EUR-swap yield curve; then explain each day's moves in terms of the 3 PCA's I have generated.

I have found that my PCA-based moves do not correspond to the realized moves; and I am not sure what I might have done wrong in my calculation methodology. My understanding is that, for a specified yield-curve move (from 1yr to 30yr), the moves across the term can be estimated from

yield(T) = w1 * PCA1(T) + w2 * PCA2(T) + w3 * PCA3(T)

where for example, w1, w2, w3 are the weights for each PCA1, 2 and 3. T is the tenor of the yield-rate, such as 1yr, 2yr... 30y.

My methodology is as follows

  1. extract EUR swap yield-rate data April 2016 - April 2019 (from 1yr to 30yr)
  2. extract 1-day move (absolute basis pt change)
  3. Extract sample set of 252 days (i.e. from April 2018 - April 2019).
  4. Generate the co-variance matrix of the term-structure movement (without removing the mean of the moves)
  5. Generate the eigenvalues, and eigenvectors (used python Numpy for this). Use the dominant 3 PCA, which is the parallel, twist and bowing movements. See picture of my PCA's below.

enter image description here

For the 1st day of my realized yield-move (such as 10th April 2019), I calculate the correlation between realized moves and PCA1, PCA2, PCA3. I obtain the following correlations : w1 = 0.70, w2 = 0.396, w3 - -0.342

With these weights, I should have been able to estimate the realized move, such that 1yr move = w1 * PCA1(1yr-pt) + w2 * PCA2(1yr-pt) + w3 * PCA3(1yr-pt).

However, my estimation is quite far off. I am not sure if my methodology had anything missing. I referred to some existing threads, but couldn't find something that addressed my practical calculations.

Applications of PCA to yield curve analysis

Principal component analysis for yield curve

Attributing the change in NII to Shift, Twist and Butterfly

enter image description here

  • $\begingroup$ should be almost equal. I assume your PCA is correct. Then decomposition is simply a projection to pca components. I guess you made mistake in this step $\endgroup$ – XYQ Apr 24 at 23:05
  • $\begingroup$ I can post my underlying data, and the derived 3 derived PCA vectors. I don't think they were done incorrectly, as it is a standard python-numpy transform. What I am unsure of, is how to extract the weight de-composition. I had thought it was a simple correlation exercise between the PCA vectors and the realized moves. $\endgroup$ – Kiann Apr 25 at 8:18

Your Answer

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

Browse other questions tagged or ask your own question.