Simulazione di un'escursione Brownian usando un Brownian Bridge?


11

Vorrei simulare un processo di escursione browniana (un moto browniano condizionato è sempre positivo quando 0<t<1 a 0 at t=1 ). Poiché un processo di escursione browniana è un ponte browniano che è condizionato per essere sempre positivo, speravo di simulare il movimento di un'escursione browniana usando un ponte browniano.

In R, sto usando il pacchetto 'e1017' per simulare un processo di bridge browniano. Come posso utilizzare questo processo del ponte browniano per creare un'escursione browniana?


4
Non è sufficiente simulare il valore assoluto di un ponte browniano?
Alex R.,

1
@AlexR. no [imbottitura]
P.Windridge,

1
Tuttavia, vale la pena rifare che un movimento browniano condizionato ad essere positivo può essere realizzato riflettendo il BM attorno al suo massimo di corsa, il che è un risultato dovuto a Pitman. Un altro modo per realizzare un BM condizionato a rimanere positivo è il valore assoluto di un BM 3D .
P.Windridge,

1
@AlexR. - Ho aggiornato la mia risposta di seguito per dimostrare che anche per semplici passeggiate casuali, i risultati del condizionamento positivo inducono comportamenti diversi a prendere semplicemente il valore assoluto. Per i ponti browniani in modo specifico, intuitivo per le piccole , il comportamento di B B t è simile a | W t (perché B B t = W t - t W 1 ) e BM soddisfa la legge del logaritmo iterato (quindi " O p ( t ) " è irrilevante per t abbastanza piccolo t . Pertanto, | B B ttBBt|WtBBt=WttW1Op(t)tè come un BM riflesso per la piccola t . Questo ha un comportamento molto diverso da W t condizionato a rimanere positivo ...|BBt|tWt
P.Windridge

Risposte:


7

Un'escursione browniana può essere costruita da un ponte usando la seguente costruzione di Vervaat: https://projecteuclid.org/download/pdf_1/euclid.aop/1176995155

Una rapida approssimazione in R, usando il codice BB di @ whuber, è

n <- 1001
times <- seq(0, 1, length.out=n)

set.seed(17)
dW <- rnorm(n)/sqrt(n)
W <- cumsum(dW)

# plot(times,W,type="l") # original BM

B <- W - times * W[n]   # The Brownian bridge from (0,0) to (1,target)

# plot(times,B,type="l")

# Vervaat construction
Bmin <- min(B)
tmin <- which(B == Bmin)
newtimes <- (times[tmin] + times) %% 1
J<-floor(newtimes * n)
BE <- B[J] - Bmin
plot(1:length(BE)/n,BE,type="l")

inserisci qui la descrizione dell'immagine

Ecco un'altra trama (da set.seed (21)). Un'osservazione chiave con un'escursione è che il condizionamento si manifesta effettivamente come una "repulsione" da 0, e è improbabile che un'escursione si avvicini a all'interno di ( 0 , 1 ) . 0(0,1)inserisci qui la descrizione dell'immagine


A parte: la distribuzione del valore assoluto di un ponte browniano e l'escursione, ( B B t ) 0 t 1 condizionati per essere positivi , non sono uguali. Intuitivamente, l'escursione viene respinta dall'origine, perché i percorsi browniani che si avvicinano troppo all'origine rischiano di diventare negativi poco dopo e quindi sono penalizzati dal condizionamento.(|BBt|)0t1(BBt)0t1

Questo può anche essere illustrato con un semplice ponte a piedi casuale ed escursione su gradini, che è un analogo discreto naturale di BM (e converge in BM man mano che i gradini diventano grandi e si riscala).6

Effettivamente, prendi un SRW simmetrico a partire da . Innanzitutto, consideriamo il condizionamento del "ponte" e vediamo cosa succede se prendiamo semplicemente il valore assoluto. Prendere in considerazione tutti i percorsi semplici s di lunghezza 6 che iniziano e terminano a 0 . Il numero di tali percorsi è . Ci sono di questi per i quali . In altre parole, la probabilità che il valore assoluto del nostro "ponte" SRW (condizionato alla fine a ) abbia valore 0 al passaggio è .0s602× ( 4(63)=20| s2| =00212/20=0.62×(42)=12|s2|=00212/20=0.6

In secondo luogo, considereremo il condizionamento dell '"escursione". Il numero di percorsi semplici non negativi di lunghezza che terminano a è il numero catalano . Esattamente di questi percorsi hanno . Pertanto, la probabilità per la nostra "escursione" di SRW (condizionata a rimanere positivo e terminare a ) di avere valore 0 al passaggio è .6 = 2 3 0 C m = 3 = ( 2 ms6=2302s2=0022/5=0,4<0,6Cm=3=(2mm)/(m+1)=52s2=0022/5=0.4<0.6

Nel caso in cui dubiti che questo fenomeno persista nel limite, potresti considerare la probabilità per i ponti SRW e le escursioni di lunghezza colpiscono 0 al passaggio .2 n4n2n

Per l'escursione SRW: abbiamo usando gli aysmptotics di wikipedia https://en.wikipedia.org/wiki / Catalan_number . Cioè è come alla fine.cn - 3 / 2

P(S2n=0|Sj0,j4n,S4n=0)=Cn2/C2n(42n/πn3)/(42n/(2n)3π)
cn3/2

Per gli abs (ponte SRW): usando gli asintotici di wikipedia https://en.wikipedia.org/wiki/Binomial_coefficient . Questo è come .

P(|S2n|=0|S4n=0)=(2nn)2/(4n2n)(4n/πn)2/(42n/2nπ)
cn1/2

In altre parole, la probabilità asintotica di vedere il ponte SRW condizionato per essere positivo a vicino al centro è molto più piccola di quella per il valore assoluto del ponte. 0


Ecco una costruzione alternativa basata su un processo Bessel 3D anziché su un ponte browniano. Uso i fatti spiegati in https://projecteuclid.org/download/pdf_1/euclid.ejp/1457125524

Panoramica- 1) Simula un processo di Bessel 3d. Questo è come un BM condizionato per essere positivo. 2) Applicare un riscaling spazio-temporale appropriato per ottenere un ponte di Bessel 3 (Equazione (2) nel documento). 3) Usa il fatto (notato subito dopo il Teorema 1 nel documento) che un ponte di Bessel 3 ha effettivamente la stessa distribuzione di un'escursione browniana.

Un leggero svantaggio è che è necessario eseguire il processo di Bessel per un bel po '(T = 100 in basso) su una griglia relativamente fine in modo che il ridimensionamento spazio / tempo inizi alla fine.

## Another construction of Brownian excursion via Bessel processes
set.seed(27092017)
## The Bessel process must run for a long time in order to construct a bridge
T <- 100
n <- 100001
d<-3 # dimension for Bessel process
dW <- matrix(ncol = n, nrow = d, data=rnorm(d*n)/sqrt(n/T))
dW[,1] <- 0
W <- apply(dW, 1, cumsum)
BessD <- apply(W,1,function(x) {sqrt(sum(x^2))})

times <- seq(0, T, length.out=n)
# plot(times,BessD, type="l") # Bessel D process


times01 <- times[times < 1]
rescaletimes <- pmin(times01/(1-times01),T)
# plot(times01,rescaletimes,type="l") # compare rescaled times

# create new time index
rescaletimeindex <- sapply(rescaletimes,function(x){max(which(times<=x))} )

BE <- (1 - times01) * BessD[rescaletimeindex]
plot(times01,BE, type="l")

Ecco l'output: inserisci qui la descrizione dell'immagine


5

Il principio di riflessione afferma

se il percorso di un processo di Wiener raggiunge un valore al tempo , allora il percorso successivo dopo il tempo ha la stessa distribuzione del riflesso del percorso successivo sul valoref(t)f(s)=at=ssa

Wikipedia , accesso al 26/09/2017.

Di conseguenza, possiamo simulare un ponte browniano e rifletterlo sul valore semplicemente prendendo il suo valore assoluto. Il ponte browniano viene simulato sottraendo la tendenza dal punto iniziale alla fine dallo stesso moto browniano(Senza alcuna perdita di generalità possiamo misurare il tempo in unità che fanno Quindi, al momento semplicemente sottrarre da .)a=0(0,0)(T,B(T))BT=1tB(T)tB(t)

La stessa procedura può essere applicata per visualizzare un movimento browniano condizionale non solo sul ritorno a un valore specificato al momento (il valore è per il ponte), ma anche sul rimanere tra due limiti (che includono necessariamente il valore iniziale di al momento e il valore finale specificato).T>0000

![Figura

Questo moto browniano inizia e termina con un valore pari a zero: è un ponte browniano.

figura 2

Il grafico rosso è un'escursione browniana sviluppata dal precedente ponte browniano: tutti i suoi valori sono non negativi. Il grafico blu è stato sviluppato allo stesso modo riflettendo il ponte browniano tra le linee tratteggiate ogni volta che le incontra. Il grafico grigio mostra il ponte browniano originale.

I calcoli sono semplici e veloci: dividere l'insieme di tempi in piccoli intervalli, generare incrementi normali distribuiti in modo identico indipendente per ogni intervallo, accumularli, sottrarre la tendenza ed eseguire qualsiasi riflessione necessaria.

Ecco il Rcodice. In esso, Wè l'originale moto browniano, Bè il ponte browniano ed B2è l'escursione vincolata tra due valori specificati ymin(non positivo) e ymax(non negativo). La sua tecnica per eseguire la riflessione usando l' %%operatore del modulo e il minimo componente pminè di interesse pratico.

#
# Brownian bridge in n steps from t=0 to t=1.
#
n <- 1001
times <- seq(0, 1, length.out=n)
target <- 0                        # Constraint at time=1
set.seed(17)
dW <- rnorm(n)
W <- cumsum(dW)
B <- W + times * (target - W[n])   # The Brownian bridge from (0,0) to (1,target)
#
# The constrained excursion.
#
ymax <- max(abs(B))/5              # A nice limit for illustration
ymin <- -ymax * 2                  # Another nice limit
yrange2 <- 2*(ymax - ymin)
B2 <- (B - ymin) %% yrange2
B2 <- pmin(B2, yrange2-B2) + ymin

per favore, potresti condividere il codice per la tua "escursione browniana" (trama rossa). A occhio sembra più una specie di moto browniano riflesso costretto a finire a . Penso che questo abbia una distribuzione piuttosto diversa da un'escursione, che sperimenta la repulsione dall'origine, cioè la tua realizzazione (in rosso) sembra piuttosto atipica. 0
P.Windridge,

@ P.Windridge Siamo spiacenti; Ho dimenticato: l'escursione è abs(B). Ricorda, questo è destinato ad essere un moto browniano subordinato a due vincoli: è uguale targetal momento ed è ovunque non negativo. 1
whuber

1
Non ho dimenticato :) Sto dicendo che credo ha una distribuzione piuttosto diversa da condizionata a sii positivo (es. un'escursione) :) ( B B t ) 0 t 1(abs(BBt))0t1(BBt)0t1
P.Windridge,

4
Le distribuzioni sono diverse, quindi mi scuso per il voto.
P.Windridge,

2

È possibile utilizzare un metodo di rifiuto: simulare i ponti browniani e mantenere quelli positivi. Funziona.

Ma. È molto lento, poiché molte traiettorie di campioni vengono respinte. E maggiore è la "frequenza" impostata, minore è la probabilità di trovare traiettorie.

succeeded <- FALSE
while(!succeeded)
{
  bridge <- rbridge(end = 1, frequency = 500)
  succeeded=all(bridge>=0)
}
plot(bridge)

Puoi accelerarlo mantenendo anche le traiettorie negative.

while(!succeeded)
{
  bridge <- rbridge(end = 1, frequency = 500)
  succeeded=all(bridge>=0)||all(bridge<=0)
}
bridge = abs(bridge)
plot(bridge)

inserisci qui la descrizione dell'immagine


2
Il problema con questo metodo è che se si simula con un passo più piccolo, la probabilità che un ponte browniano sia negativo ad un certo punto va a 1 vicino . t=0
Alex R.,

In effetti, c'era un piccolo disclaimer;) "E maggiore è la" frequenza "impostata, minore è la probabilità di trovare traiettorie." ... Sono solo metà soddisfatto della mia risposta, ma questa è l'unica cosa che potrei pensare se dovessi iniziare con un ponte browniano. Alla ricerca (e in attesa) di una risposta migliore!
RUser4512,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.