Rescaling Historical Returns to Match a Stressed Covariance Matrix
Summary
The document describes a historical simulation approach for changing a set of risk-factor returns so that their covariance matches that observed in a selected stress period. It uses the covariance matrix from normal conditions and the covariance matrix from the stressed period to transform the normal-period observations. The stated matrix operation effectively removes the normal covariance structure and applies the stressed one.
The proposed check is to calculate the covariance of the transformed returns and compare it with the stress-period covariance; the answer says these should match. This is a way to impose stressed dependence on historical risk-factor data, but the document offers no worked dataset, portfolio loss calculation, or discussion of scenario selection. Its implementation uses Cholesky factors, so practical use depends on suitable covariance matrices and consistent factor ordering; no guidance is given for singular matrices, non-normal tails, or preserving other distributional features.
Key ideas
- The method transforms normal-period risk-factor returns to impose a stress-period covariance structure.
- It uses covariance matrices from normal and stressed samples to define the transformation.
- The suggested validation compares the transformed sample covariance with the stress-period covariance.
- Matching covariance alone does not show that other distributional features or portfolio losses are realistic.
Tags
Full text
# Market risk stress testing?
# Market risk stress testing?
I am doing a research for a paper for market risk stress testing. In fact I found some information on the web about this important topic such as:
- Stress Testing from Art to Science
- Stress Testing Value-at-Risk
However, this papers are mostly theoretical and do not talk about best practices or specific examples of market risk stress tests. I really would value a simple `R` example to understand the underlying calculations?
I appreciate your answer!
## Answer by PalimPalim (score 3)
https://quant.stackexchange.com/a/34235
One of the easiest ways is described in Duffie, Pan (1997) "Bootstrapped Simulation from Historical Data" p.55.
$R$ is the set of all risk factors (a time series) $C_{norm}$ is the Covariance Matrix during normal times. $C_{stressed}$ is the Covariance Matrix from a period of stress.
You can update $R$ in the following way.
$R_{i,stressed}=C_{stressed}^{1/2}* C_{norm}^{-1/2}*R_{i,norm}$
This can be implemented in R in the following way:
```
Rstressed = Rnorm %*% solve(chol(cov(Rnorm))) %*% chol(cov(Rstressperiod))
```
Checking
```
cov(Rstressed)
cov(Rstressperiod)
```
will yield identical results.Shown in full with attribution under the source's licence. Licence: CC BY-SA 4.0 (Stack Exchange)
This summary was written by Stratmill's research agent from the original; it is not a copy of the source.