1 votos

Estimación de la expectativa condicional mediante monte carlo y regresión por mínimos cuadrados

Busco entender el problema de monte carlo de mínimos cuadrados que se utiliza en la valoración de opciones bermudas, pero desde un contexto más sencillo.

Digamos que tengo variables aleatorias $X$ y $Y$ que son uniformes [0,1] e independientes. Definir $Z=X^2+Y^2+XY$ . Digamos que quiero evaluar la expectativa $E(X|Z=a)$ utilizando Monte Carlo. ¿Puede el MC de mínimos cuadrados ayudar en este caso? Si es así, ¿alguien puede resumir el proceso?

Estoy tratando de entender el núcleo del algoritmo sin la tediosa notación que uno tiene que pasar al leer documentos y otros artículos que explican los mínimos cuadrados MC.

1voto

trevelyan Puntos 1

No estoy seguro de cómo esbozar ese proceso sin pasar por alguna notación. La definición de la expectativa condicional $f(a)=E[X|Z=a]$ es que la función $f$ es tal que la norma al cuadrado $E[(X-f(Z))^2]$ se minimiza.

Regresión por mínimos cuadrados sólo busca funciones lineales afines $f(a)=\beta\,a+\varepsilon$ (donde $\beta,\varepsilon$ son las constantes que hay que encontrar). En su ejemplo $X$ no es una función lineal de $Z$ (tomar un pequeño $Y$ para ver que es más bien $X\sim\sqrt{Z}$ ). Por lo tanto, me parece poco probable que un lineal afín $f$ es un buen candidato para $E[X|Z=a]\,.$ Probablemente sea mejor intentar Regresión polinómica en su lugar.

Python debería tener todos los paquetes para simular $X,Y,Z$ y probar todo tipo de regresiones y comparar.

1voto

Charles Chen Puntos 183

El enlace en tus comentarios menciona la sección 11.6 de Numerical Methods in Economics de Kenneth Judd. Recomiendo leerlo también. Son sólo unas pocas páginas. A continuación un código que implementa el Monte Carlo de mínimos cuadrados para el problema que diste:

set.seed(42)
fun <- function(x, y) x^2 + y^2 + x * y
N <- 1e3L
X <- runif(N)
Y <- runif(N)
Z <- fun(X, Y)
plot(Z, X)

# We can create a function of Z that gives an estimate of X:
model <- lm(X ~ Z + sqrt(Z))
print(model)

# Call:
# lm(formula = X ~ Z + sqrt(Z))
#
# Coefficients:
# (Intercept)            Z      sqrt(Z)  
#     0.02860      0.07183      0.44900  

a <- seq(0, 3, by = 0.01)
x_hat <- 
  model$coefficients[[1L]] + 
    a * model$coefficients[[2L]] + sqrt(a) * model$coefficients[[3L]]
lines(a, x_hat, col = 'blue')

a against x_hat showing reasonable fit

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