Simulación de un proceso gaussiano (Ornstein Uhlenbeck) con una función de covarianza exponencialmente decadente

8

Estoy tratando de generar muchos sorteos (es decir, realizaciones) de un proceso gaussiano ei(t), 1tT con media 0 y función de covarianza γ(s,t)=exp(|ts|).

¿Hay una manera eficiente de hacer esto que no implique el cálculo de la raíz cuadrada de un T×T¿Matriz de covarianza? Alternativamente, ¿alguien puede recomendar un Rpaquete para hacer esto?

usuario603
fuente
2
Es un proceso estacionario (se parece a una versión simple de un proceso OU). ¿Se muestrea de manera uniforme?
cardenal
El paquete R mvtnormtiene rmvnorm(n, mean, sigma)dónde sigmaestá la matriz de covarianza; tendrías que construir la matriz de covarianza para tu muestra / seleccionadotes usted mismo, sin embargo.
jbowman
2
@jb Presumiblemente Tes enorme, de lo contrario , el OP no estaría pidiendo evitar la descomposición de la matriz (que está implícita en rmvnorm).
whuber
1
@cardinal Estoy de acuerdo, este es un proceso gaussiano de Ornstein-Uhlenbeck. (Sería genial si la palabra clave "Ornstein Uhlenbeck" se pudiera editar en la pregunta y / o título.
Obtendría

Respuestas:

11

Si. Existe un algoritmo muy eficiente (tiempo lineal), y su intuición proviene directamente del caso de muestra uniforme.

Supongamos que tenemos una partición de [0,T] tal que 0=t0<t1<t2<<tn=T.

Estuche uniformemente muestreado

En este caso tenemos ti=iΔ dónde Δ=T/n. DejarXi:=X(ti) denotar el valor del proceso discretamente muestreado en el momento ti.

Es fácil ver que el Xi formar un proceso AR (1) con correlación ρ=exp(Δ). Por lo tanto, podemos generar una ruta de muestra{Xt} para la partición de la siguiente manera

Xi+1=ρXi+1ρ2Zi+1,
dónde Zi son iid N(0,1) y X0=Z0.

Caso general

Entonces podríamos imaginar que podría ser posible hacer esto para una partición general . En particular, dejemosΔi=ti+1ti y ρi=exp(Δi). Tenemos eso

γ(ti,ti+1)=ρi,
y entonces podríamos adivinar que
Xi+1=ρiXi+1ρi2Zi+1.

En efecto, EXi+1Xi=ρi y así al menos tenemos la correlación correcta con el término vecino.

El resultado ahora se obtiene mediante la telescopía a través de la propiedad de la torre de expectativa condicional. A saber,

EXiXi=E(E(XiXiXi1))=ρi1EXi1Xi==k=1ρik,
y los telescopios del producto de la siguiente manera
k=1ρik=exp(k=1Δik)=exp(titi)=γ(ti,ti).

Esto prueba el resultado. Por lo tanto, el proceso se puede generar en una partición arbitraria a partir de una secuencia de iidN(0,1) variables aleatorias en O(n) tiempo donde n es el tamaño de la partición

NB : Esta es una técnica de muestreo exacta , ya que proporciona una versión muestreada del proceso deseado con las distribuciones finitas dimensionales correctas . Esto contrasta con los esquemas de discretización de Euler (y otros) para las SDE más generales, que incurren en un sesgo debido a la aproximación por discretización.

cardenal
fuente
Solo unas pocas observaciones más. (1) Para tener una buena idea de cómo es el proceso de tiempo continuo,n y T debe ser elegido para que Δ es pequeño, digamos menos de 0.1. (2) La matriz de covarianza inversa ( precisión ) para el vector de series temporales es tri-diagonal, al igual que su raíz de Cholesky.
Yves
@Yves: Gracias por tus comentarios. Para ser claros, el procedimiento que describí da una realización exacta del proceso de tiempo continuo muestreado en la partición correspondiente; en particular, no hay error de discretización como existe en la aproximación típica del esquema de Euler a las SDE más generales. El Cholesky inverso, como lo muestra la construcción en la respuesta, tiene términos distintos de cero solo en diagonal y fuera de diagonal inferior, por lo que es un poco más simple que tridiagonal.
cardenal
¡Gran respuesta! ¿Esto se generaliza al proceso general de OU con escala arbitraria,γ(ti,tj)=exp(α|titj|)? Parece que podría ser.
redmoskito
1

Calcule la matriz de covarianza descompuesta por descomposición de Cholesky incompleta o cualquier otra técnica de descomposición de matriz. La matriz descompuesta debe ser TxM, donde M es solo una fracción de T.

http://en.wikipedia.org/wiki/Incomplete_Cholesky_factorization

Steven
fuente
2
¿Puedes dar una forma explícita de la descomposición de Cholesky aquí? Creo que la respuesta del cardenal logra exactamente eso, si lo piensas, expresandoXien función de la historia.
StasK
1
El algoritmo es demasiado largo para resumirlo. Puede encontrar una excelente descripción aquí: Kernel ICA , página 20. Tenga en cuenta que este algoritmo está incompleto , lo que significa que no calcula la descomposición completa sino más bien una aproximación (por lo tanto, es mucho más rápido). He publicado el código para este algoritmo en la caja de herramientas KMBOX, puede descargarlo aquí: km_kernel_icd .
Steven