我想以模拟布朗偏移处理(即空调总是正的一个布朗运动时到在)。由于Brownian偏移过程是一个条件为始终为正的Brownian桥,因此我希望使用Brownian桥来模拟Brownian偏移的运动。0 t = 1
在R中,我正在使用“ e1017”包来模拟布朗桥过程。如何使用该布朗桥过程创建布朗漂移?
我想以模拟布朗偏移处理(即空调总是正的一个布朗运动时到在)。由于Brownian偏移过程是一个条件为始终为正的Brownian桥,因此我希望使用Brownian桥来模拟Brownian偏移的运动。0 t = 1
在R中,我正在使用“ e1017”包来模拟布朗桥过程。如何使用该布朗桥过程创建布朗漂移?
Answers:
可以使用Vervaat的以下构造从桥梁构造布朗旅行:https ://projecteuclid.org/download/pdf_1/euclid.aop/1176995155
使用@whuber的BB代码对R进行快速近似是
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")
这是另一幅图(来自set.seed(21))。关于偏移的一个关键观察结果是,条件实际上表现为从0开始的“排斥”,并且您不太可能在的内部看到偏移接近于。 (0 ,1 )
除了:一个布朗桥的绝对值的分布和偏移,调节为正,是不一样。从直觉上讲,偏移是从原点排斥的,因为太靠近原点的布朗路径很可能在不久之后变为负值,因此受到条件的影响。(乙乙吨)0 ≤ 吨≤ 1
甚至可以通过一个简单的随机步行桥和步骤的偏移进行说明,这是BM的自然离散模拟(并且随着步骤变大并重新缩放,会收敛到BM)。
实际上,采用从开始的对称SRW 。首先,让我们考虑“桥接”条件,看看如果我们只取绝对值会发生什么。考虑所有长度为简单路径,它们从开始和结束。这样的路径数为。其中有,其中。换句话说,对于概率绝对值我们的SRW“桥”(在调节至端的)在步骤以具有值0是。秒6 0
其次,我们将考虑“游览”条件。长度为以结尾的非负简单路径的数量是加泰罗尼亚语数。恰好这些路径具有。因此,对于我们的SRW“偏移”(在调节以保持积极和结束的概率),在步骤以具有值0是。
如果您仍然怀疑这种现象是否仍然存在,可以考虑在步骤 SRW桥和长度为偏移到达0 的概率。
对于SRW偏移:我们有使用来自维基百科的渐近线https://en.wikipedia.org/wiki / Catalan_number。即最终就像。
对于abs(SRW桥):使用来自维基百科https://en.wikipedia.org/wiki/Binomial_coefficient的渐近线。这就像。
换句话说,看到SRW桥在中间附近为为正的渐近概率远小于桥的绝对值。
这是基于3D贝塞尔(Bessel)过程而不是布朗桥的替代构造。我使用https://projecteuclid.org/download/pdf_1/euclid.ejp/1457125524中解释的事实
概述-1)模拟3d Bessel过程。这就像将BM调整为正数一样。2)应用适当的时空缩放,以获得Bessel 3桥(本文中的公式(2))。3)利用贝塞尔3桥实际上具有与布朗漂移相同的分布(在论文定理1之后立即注意到)。
一个轻微的缺点是,您需要在相对较细的网格上运行Bessel程序相当长的时间(以下T = 100),以便最后进行时空缩放。
## 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")
该反射原理断言
如果维纳进程的路径达到一个值在时间,则随后的路径时间之后具有相同的分布作为随后路径的有关值的反射
Wikipedia,访问9/26/2017。
因此,我们可以模拟布朗桥,并通过取绝对值简单地将其反映在值。通过从布朗运动本身减去从起点到终点的趋势来模拟布朗桥。(在不失一般性的情况下,我们可以以使单位来度量时间。因此,在时间只需从减去。)
可以应用相同的过程来显示布朗运动条件,该条件不仅是在时间返回到指定值(桥梁的值为)时,而且是在保持在两个极限(必须包括起始值)之间时的在时间和指定的结束值)。
布朗运动的开始和结束都是零值:它是布朗桥。
红色图是从先前的布朗桥发展而来的布朗漂移:其所有值均为非负值。每次遇到虚线时,通过反射虚线之间的布朗桥,以相同的方式开发了蓝色图形。灰色图形显示原始的布朗桥。
计算简单,快速:将时间集分成小间隔,为每个间隔生成独立的,均匀分布的正态增量,进行累加,减去趋势,然后执行所需的任何反射。
这是R
代码。其中,W
是原始布朗运动,B
是布朗桥,并且B2
是限制在两个指定值ymin
(非正值)和ymax
(非负)之间的偏移。其使用模量%%
算子和按分量的最小值进行反射的技术pmin
可能具有实际意义。
#
# 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
abs(B)
。请记住,这旨在成为有两个约束条件的布朗运动:它等于target
时间并且在各处都是非负的。
您可以使用拒绝方法:模拟布朗桥并保留正桥。有用。
但。这很慢,因为许多样本轨迹被拒绝。设置的“频率”越大,找到轨迹的可能性就越小。
succeeded <- FALSE
while(!succeeded)
{
bridge <- rbridge(end = 1, frequency = 500)
succeeded=all(bridge>=0)
}
plot(bridge)
您也可以加快速度,同时保持负轨迹。
while(!succeeded)
{
bridge <- rbridge(end = 1, frequency = 500)
succeeded=all(bridge>=0)||all(bridge<=0)
}
bridge = abs(bridge)
plot(bridge)