3 votos

Muestra de la distribución de la cartera agregada frente a la distribución de los activos individuales

Supongamos que tengo tres activos $x_1,x_2,x_3$ en una cartera con pesos $W=\begin{bmatrix} w_1 \\ w_2 \\ w_3 \end{bmatrix} $ , rendimientos esperados $R=\begin{bmatrix} \mu_1 \\ \mu_2 \\ \mu_3 \end{bmatrix}$ y una matriz de covarianza $V$ .

La rentabilidad esperada de mi cartera es $\mu_p=W^TR$ y la varianza de mi cartera es $\sigma^2_p=W^TVW$ .

Me gustaría realizar simulaciones de Monte Carlo en mi cartera utilizando una distribución normal.

Puedo hacer esto por:

  1. Muestreo de la distribución de los rendimientos de la cartera $N(\mu_p,\sigma^2_p)$ .
  2. Tomar una muestra de los tres rendimientos individuales de los activos y utilizar esos tres rendimientos para calcular el rendimiento global de mi cartera.

En primer lugar, ¿cómo podría llevar a cabo el segundo enfoque (estaría tomando muestras de una distribución normal multivariante)?

En segundo lugar, ¿son equivalentes estos dos enfoques siempre que suponga que las ponderaciones $W$ de mi cartera se mantiene igual?

3voto

Tofystedeth Puntos 255

En el primer caso, se muestrearía directamente $n$ normales al azar $x$ y computa: $$R^p_i = \mu_p + \sigma_p x_i, i \in [1,n]$$

Para el segundo caso, se puede probar $n$ x $3$ normales independientes, calcular la matriz de descomposición de Cholesky $C$ de $V$ que es la matriz $C$ tal que $V=C^t C$ y obtener $n$ muestras de vectores $X$ de tamaño 3.

El retorno $R_i$ para el sorteo aleatorio $i$ está dada por: $$R_i = \mu_p + C . X_i, i \in [1,n]$$ Puede comprobar si hay valores altos de $n$ la convergencia hacia los valores límite: $$E(R_i) = R$$ $$Cov(R_i) = V$$ La rentabilidad de la cartera se calcula entonces como $$R^p_i = W.T R_i$$ y puedes comprobar que converge hacia la misma media y varianza $\mu_p$ , $\sigma_p^2$ para un tamaño lo suficientemente grande $n$ .

Los dos enfoques son matemáticamente equivalentes, ya que una combinación lineal de normales independientes se distribuye normalmente. Esto funciona siempre que las variables normales aleatorias generadas sean normales gaussianas iid.

Con numpy, las normales iid se pueden generar con np.random.normal. Como se señala más adelante, np.random.multivariate_normal puede utilizarse para generar el vector gaussiano multivariado.

0voto

jerry Puntos 19

Básicamente lo que dijo @sebapi. "Los dos enfoques son equivalentes siempre que las variables aleatorias normales generadas sean normales gaussianas iid".

P: ¿Cómo se compara esto con el uso de docs.scipy.org/doc/numpy-1.15.1/reference/generated/ ?

R: Puede utilizar scipy.stats.multivariate_normal (rv = multivariate_normal(mean=None, cov=1, allow_singular=False))

Finanhelp.com

FinanHelp es una comunidad para personas con conocimientos de economía y finanzas, o quiere aprender. Puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X