Creo que el principal problema es que, como dice @KurtG, la función senoidal de tu ejemplo muestra un fuerte impulso (aunque con inversiones) y el ajuste de un proceso de Ornstein-Uhlenbeck a la misma da lugar a parámetros extraños.
Sin embargo, sería bueno comprobar que su código es correcto. Para ello, vamos a simular un proceso que sabemos que es OU con una vida media evidente:
e <- rnorm(n, 0, 1)
a <- array(data = NA, dim = n)
a[1] = 0
for (i in 2:n) { a[i] <- 0.5 * a[i - 1] + 0.1 * e[i] }
Ahora a
contiene una gran muestra de un proceso OU con media 0 y vida media de 1.
Comprobamos su código de adaptación:
y <- diff(a)
x <- a[1:(length(a)-1)]
lm <- lm(y~x)
halflife <- -log(2)/lm$coefficients[2]
y obtengo una vida media de (con mis números aleatorios) alrededor de 1,38. Lo cual está cerca, pero es erróneo y demasiado alejado del valor real para ser explicado sólo por el azar debido al gran tamaño de la muestra.
Revisemos las fórmulas de la vida media. En primer lugar, y más fácil de derivar, si tenemos el proceso OU (con media cero) $$ dX_t = -\theta X_t dt + \sigma dW_t $$ con $\theta > 0$ y $\sigma > 0$ entonces la vida media es $$ h = \frac{\log \left( 2 \right)}{\theta} $$ Si escribimos esto en tiempo discreto tenemos: $$ X_t = \phi X_{t-1} + \epsilon $$ con $0 < \phi < 1$ . Entonces la vida media es $$ h = -\frac{\log \left( 2 \right)}{\log \left( \phi \right)} $$ Pero su regresión utiliza la forma diferenciada de: $$ X_t - X_{t-1} = \left(\phi - 1 \right) X_{t-1} + \epsilon $$ Podemos definir $\beta = \phi - 1$ (y por lo tanto $\phi = 1 + \beta$ ) para conseguirlo: $$ X_t - X_{t-1} = \beta X_{t-1} + \epsilon $$ que es la regresión que está ejecutando. Específicamente, lm$coefficients[2]
te está dando $\beta$ . Reescribiendo una fórmula anterior obtenemos: $$ h = -\frac{\log \left( 2 \right)}{\log \left( 1 + \beta \right)} $$ Si lo intentamos:
halflife <- -log(2)/log(1 + lm$coefficients[2])
obtenemos un número que es casi exactamente 1, como se esperaba. Así que esa fórmula es probablemente la mejor para usar.
¿De dónde viene su fórmula original? Bueno, la función $\beta \mapsto \log \left( 1 + \beta \right)$ es aproximadamente lineal cerca de cero, por lo que sustituir $\log \left( 1 + \beta \right)$ con $\beta$ es una aproximación razonable. No obstante, probablemente merezca la pena utilizar la fórmula más exacta la mayor parte de las veces, ya que no es cara de evaluar.
2 votos
Una función de pecado no es una reversión de la media. La SDE de un proceso estocástico de reversión de la media (a cero) es como $dX_t=-\beta X_t\,dt+\sigma dW_t$ . Si se ignoran las fluctuaciones brownianas la solución es $X_t=X_0e^{-\beta t}$ .
0 votos
@KurtG. Entonces, ¿estás diciendo que debo generar una función utilizando esa última fórmula que diste, y tratar de aplicar el método que he probado para probar / asegurar que da un tiempo razonable de "reversión media"?
0 votos
Lo único que digo es que la reversión de la media a cero es un decaimiento exponencial (o aumento si $X_0<0$ ). No es algo que "parezca" una reversión de la media porque oscila alrededor de la media a largo plazo. Si quiere probar cómo un determinado método estadístico detecta la reversión a la media correcta en una serie temporal, podría simular correctamente una serie temporal con reversión a la media y luego soltar su método en ella.
0 votos
@KurtG. Entendido. Tengo una pregunta, sin embargo - la solución que sugirió es simplemente un único decaimiento exponencial. ¿Cómo podría hacer una serie de reversión repetida a partir de ella? Además, ¿la reversión media tiene que ser un decaimiento exponencial? Me parece que muchas series de reversión media tienen reversiones bruscas, no decaimientos lentos. (Por cierto, si publicas una respuesta, estaré encantado de aceptarla).
0 votos
@VladimirBelik, la exponencial también puede ser rápida/aguda, sólo hay que elegir el parámetro adecuado.
0 votos
@RichardHardy Gracias, lo tendré en cuenta. Antes de sumergirme en ajustar eso, quiero entender esto: quant.stackexchange.com/questions/70338/ . ¿Te importaría echarle un vistazo?
0 votos
Simulación de $X_t=X_0e^{-\beta t}+e^{-\beta t}\sigma\int_0^t e^{\beta s}dW_s$ debería ser fácil. Sólo hay que dar pasos de tiempo y dibujar $\epsilon$ s de $N(0,1)$ y multiplicarlos por $\sqrt{(1-e^{2\beta\Delta t})/2\beta}$ . Hay millones de posts de stackexchange sobre eso. Por favor, cree una nueva pregunta si tiene problemas específicos.
0 votos
@KurtG. Gracias, aprecio mucho tu tiempo. He creado una nueva pregunta (la he puesto en un comentario más arriba) para ayudar a mi comprensión más amplia de los conceptos en juego. También me di cuenta de que no estoy seguro de por qué estoy yendo a tales longitudes para obtener un valor (vida media) que parece tan fácil de calcular directamente de mi serie.