Simulating Stock Returns from a Multi-Factor Risk Model
Summary
The document outlines how to simulate one-day returns for many stocks using factor-model inputs: factor returns, factor covariance, stock factor loadings, and idiosyncratic risk. It proposes drawing correlated factor shocks through a Cholesky decomposition, adding the factor-return baseline, mapping simulated factor returns to stocks with the loading matrix, and adding stock-specific noise. The described matrix shapes allow multiple scenarios to be generated together.
The author then considers the problem that a normally simulated simple return can fall below negative one. Two possible treatments are raised: reject and redraw invalid outcomes, or interpret the simulated value as a log return and convert it with an exponential transformation. The document does not resolve which interpretation is valid or establish that the transformed model matches geometric Brownian motion. It is a question and proposed procedure rather than a validated implementation; notably, the idiosyncratic shocks are described as a single shared draw across stocks, which would not represent independent stock-specific residuals.
Key ideas
- Correlated factor shocks can be generated by applying a Cholesky factor of the factor covariance matrix to standard normal draws.
- Factor simulations are mapped to stock returns using the stocks’ factor loadings.
- Idiosyncratic risk must be added to the factor-driven return contribution.
- Normally simulated simple returns can fall below negative one.
- Exponentiating a simulated value assumes it represents a log return, an assumption the document leaves unresolved.
Tags
Full text
# How can we simulate daily return based on multi-factor model? # How can we simulate daily return based on multi-factor model? This is an interesting question for simulation. The question is a bit lengthy but I'm trying my best to make it super clear here. Now I have some multi-factor model, say some US barra risk model from MSCI. I have the factor return, factor covariance, factor loadings and idiosyncratic risk. The question is that, how can we effectively simulate multi-day stock daily return from the factor model? Here is my thought and steps: Define: $f$ is number of factors $s$ is number of stocks $nsim$ is number of simulations $FR$ as factor return ($f$ x $1$) matrix from day $t_0$ $FC$ as factor covariance ($f$ x $f$) matrix from day $t_0$ $FL$ as factor loadings ($s$ x $f$) matrix from day $t_0$ $SRISK$ as idiosyncratic risk ($s$ x $1$) matrix from day $t_0$ - Generate a ($f$ x $nsim$) matrix from standard normal as $Z1$ - Do cholesky decomposition for factor covariance, let $FC=A*A^T$ - Then, the simulated factor return is $SRF = FR + A*Z1$, note that one need to handle the shape of factor return here. $SRF$ is with shape ($f$ x $nsim$) - So we need to multiply with factor loadings, that is $FL * SRF$, with shape ($s$ x $nsim$). This is the effective contribution of return from factor piece. - Generate another ($1$ x $nsim$) matrix from standard normal as $Z2$ - The effective contribution of return from idiosyncratic piece is $SRISK * Z2$, with shape ($s$ x $nsim$). - Adding step 4 and 6 together would give us the simulated daily return, say $SR$, which is also shape as ($s$ x $nsim$), meaning $nsim$ simulation for $s$ stocks. Now the problem is that output from step 7 is daily return, which should be larger than -1. But we don't have this guarantee. Notice that there is a reason why people simulate stock price, because if you assume stock price follow geometric brownian motion, then you would never get negative stock price, and further no daily return smaller than -1. I'm having trouble linking my simulated daily return with GBM. Having said that, let me share my thought and please correct me: - First and naive way is do rejection. When there is daily return smaller than -1, one need to re-do the simulation. This is not ideal and not matrix friendly. - Second way. Notice that log(1+x) ~= x, we can let $log(1+R) = SR$, which will give us $R = exp(SR) - 1$, where $R$ is the final daily return we want and prevent "bad" simulated return. However, I'm not sure how this is related with GBM model and more importantly whether this is a valid approach.
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.