Simuler une excursion brownienne à l'aide d'un pont brownien?


11

Je voudrais simuler un processus d'excursion brownienne (un mouvement brownien conditionné est toujours positif quand à à ). Puisqu'un processus d'excursion brownienne est un pont brownien qui est conditionné pour être toujours positif, j'espérais simuler le mouvement d'une excursion brownienne en utilisant un pont brownien.0 t = 10<t<10t=1

Dans R, j'utilise le paquet «e1017» pour simuler un processus de pont brownien. Comment puis-je utiliser ce processus de pont brownien pour créer une excursion brownienne?


4
Ne suffit-il pas de simuler la valeur absolue d'un pont brownien?
Alex R.

1
@AlexR. non [rembourrage]
P.Windridge

1
Cependant, il vaut la peine de refaire cependant qu'un mouvement brownien conditionné pour être positif peut être réalisé en reflétant le BM autour de son maximum de fonctionnement, ce qui est un résultat dû à Pitman. Une autre façon de réaliser un BM conditionné pour rester positif est la valeur absolue d'un BM 3d .
P.Windridge

1
@AlexR. - J'ai mis à jour ma réponse ci-dessous pour montrer que même pour de simples promenades aléatoires, les résultats de conditionnement positifs induisent un comportement différent pour simplement prendre la valeur absolue. Pour les ponts browniens en particulier, intuitivement pour les petits , le comportement de est comme (parce que ) et BM satisfait à la loi du logarithme itéré (donc " " n'a pas d'importance pour assez petit Ainsi, est comme un BM réfléchi pour les petits . Cela a un comportement assez différent de conditionné pour rester positif ...B B t | W t B B t = W t - t W 1 O p ( t ) t | B B t | t W ttBBt|WtBBt=WttW1Op(t)t|BBt|tWt
P.Windridge

Réponses:


7

Une excursion brownienne peut être construite à partir d'un pont en utilisant la construction suivante par Vervaat: https://projecteuclid.org/download/pdf_1/euclid.aop/1176995155

Une approximation rapide dans R, en utilisant le code BB de @ whuber, est

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")

entrez la description de l'image ici

Voici une autre intrigue (de set.seed (21)). Une observation clé avec une excursion est que le conditionnement se manifeste en fait comme une "répulsion" à partir de 0, et il est peu probable que vous voyiez une excursion approcher de à l'intérieur de . ( 0 , 1 )0(0,1)entrez la description de l'image ici


A part: La distribution de la valeur absolue d'un pont brownien et l'excursion, conditionnée pour être positive , sont pas le même. Intuitivement, l'excursion est repoussée de l'origine, car les chemins browniens trop proches de l'origine risquent de devenir négatifs peu de temps après et sont donc pénalisés par le conditionnement. ( B B t ) 0 t 1(|BBt|)0t1(BBt)0t1

Cela peut même être illustré par un simple pont de marche aléatoire et une excursion sur étapes, qui est un analogue discret naturel de BM (et converge vers BM lorsque les étapes deviennent grandes et que vous redimensionnez).6

En effet, prenez un SRW symétrique à partir de . Tout d'abord, considérons le conditionnement "en pont" et voyons ce qui se passe si nous prenons simplement la valeur absolue. Considérez tous les chemins simples de longueur qui commencent et se terminent à . Le nombre de ces chemins est . Il y a d'entre eux pour lesquels . En d'autres termes, la probabilité que la valeur absolue de notre "pont" SRW (conditionné pour se terminer à ) ait la valeur 0 à l'étape est .s 6 0 ( 60s602× ( 4(63)=20| s2| =002douze/20=0,62×(42)=12|s2|=00212/20=0.6

Dans un deuxième temps, nous considérerons le conditionnement "excursion". Le nombre de chemins simples non négatifs de longueur qui se terminent à est le nombre catalan . Exactement de ces chemins ont . Ainsi, la probabilité que notre "excursion" SRW (conditionnée pour rester positive et se terminer à ) ait la valeur 0 à l'étape est .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

Dans le cas où vous doutez encore que ce phénomène persiste dans la limite, vous pouvez considérer la probabilité de ponts SRW et d'excursions de longueur atteignant 0 à l'étape .2 n4n2n

Pour l'excursion SRW: nous avons utilisant l'aysmptotique de wikipedia https://en.wikipedia.org/wiki / Catalan_number . C'est-à-dire que c'est comme finalement.cn - 3 / 2

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

Pour abs (pont SRW): utilisant les asymptotiques de wikipedia https://en.wikipedia.org/wiki/Binomial_coefficient . C'est comme .cn - une / 2

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

En d'autres termes, la probabilité asymptotique de voir le pont SRW conditionné pour être positif à près du milieu est beaucoup plus petite que celle de la valeur absolue du pont. 0


Voici une construction alternative basée sur un processus de Bessel 3D au lieu d'un pont brownien. J'utilise les faits expliqués dans https://projecteuclid.org/download/pdf_1/euclid.ejp/1457125524

Présentation- 1) Simuler un processus Bessel 3D. C'est comme un BM conditionné pour être positif. 2) Appliquer un redimensionnement spatio-temporel approprié afin d'obtenir un pont de Bessel 3 (équation (2) dans le papier). 3) Utilisez le fait (noté juste après le théorème 1 dans l'article) qu'un pont de Bessel 3 a en fait la même distribution qu'une excursion brownienne.

Un léger inconvénient est que vous devez exécuter le processus de Bessel pendant un certain temps (T = 100 ci-dessous) sur une grille relativement fine pour que la mise à l'échelle espace / temps se déclenche à la fin.

## 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")

Voici la sortie: entrez la description de l'image ici


5

Le principe de réflexion affirme

si le chemin d'un processus de Wiener atteint une valeur au temps , alors le chemin suivant après le temps a la même distribution que la réflexion du chemin suivant sur la valeurf(t)f(s)=at=ssa

Wikipedia , consulté le 26/09/2017.

En conséquence, nous pouvons simuler un pont brownien et le refléter sur la valeur simplement en prenant sa valeur absolue. Le pont brownien est simulé en soustrayant la tendance du point de départ à la fin du mouvement brownien lui-même. (Sans aucune perte de généralité, nous pouvons mesurer le temps en unités qui font Ainsi, au temps suffit de soustraire de .)a=0(0,0)(T,B(T))BT=1tB(T)tB(t)

La même procédure peut être appliquée pour afficher un mouvement brownien conditionnel non seulement au retour à une valeur spécifiée au temps (la valeur est pour le pont), mais aussi au maintien entre deux limites (qui incluent nécessairement la valeur de départ de au temps et la valeur finale spécifiée).T>0000

![Figure

Ce mouvement brownien commence et se termine par une valeur de zéro: c'est un pont brownien.

Figure 2

Le graphique rouge est une excursion brownienne développée à partir du pont brownien précédent: toutes ses valeurs sont non négatives. Le graphique bleu a été développé de la même manière en reflétant le pont brownien entre les lignes pointillées à chaque fois qu'il les rencontre. Le graphique gris affiche le pont brownien d'origine.

Les calculs sont simples et rapides: divisez l'ensemble des temps en petits intervalles, générez des incréments normaux indépendants répartis de manière identique pour chaque intervalle, accumulez-les, soustrayez la tendance et effectuez les réflexions nécessaires.

Voici le Rcode. Il Ws'agit du mouvement brownien d'origine, Bdu pont brownien et de B2l'excursion contrainte entre deux valeurs spécifiées ymin(non positives) et ymax(non négatives). Sa technique pour effectuer la réflexion en utilisant l' %%opérateur de module et le minimum par composant pminpeut être d'un intérêt pratique.

#
# 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

s'il vous plaît pourriez-vous partager le code de votre "excursion brownienne" (tracé rouge). À l'œil, il ressemble plus à une sorte de mouvement brownien réfléchi contraint de se terminer à . Je pense que cela a une distribution assez différente d'une excursion, qui subit une répulsion depuis l'origine, c'est-à-dire que votre réalisation (en rouge) semble plutôt atypique. 0
P.Windridge

@ P.Windridge Désolé; J'ai oublié: l'excursion est abs(B). Rappelez-vous, il s'agit d'un mouvement brownien conditionnel à deux contraintes: il est égal targetà l'instant et est partout non négatif. 1
whuber

1
Je n'ai pas oublié :) Je dis que je crois que a une distribution assez différente de conditionnée à être positif (c'est-à-dire une excursion) :) ( B B t ) 0 t 1(abs(BBt))0t1(BBt)0t1
P.Windridge

4
Les distributions sont différentes, donc je vote en bas désolé.
P.Windridge

2

Vous pouvez utiliser une méthode de rejet: simuler des ponts browniens et garder les ponts positifs. Ça marche.

Mais. C'est très lent, car beaucoup de trajectoires d'échantillonnage sont rejetées. Et plus la «fréquence» que vous définissez est grande, moins vous avez de chances de trouver des trajectoires.

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

Vous pouvez également l'accélérer en conservant les trajectoires négatives.

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

entrez la description de l'image ici


2
t=0

En effet, il y avait un petit avertissement;) "Et plus la" fréquence "que vous définissez est grande, moins vous êtes susceptible de trouver des trajectoires." ... Je ne suis qu'à moitié satisfait de ma réponse, mais c'est la seule chose que je pouvais penser si je devais commencer par un pont brownien. Vous cherchez (et attendez) une meilleure réponse!
RUser4512
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.