R中的布朗运动模拟

Brownian motion simulation in R

我有这个过程 =-3+2,我想用 R 模拟它。它是一个标准的布朗运动。

不过,我认为这不是布朗运动,因为它的均值是 []=[-3+2]=-3+[2]=-3(不是 0),方差是 [(2)^2]=4[^2]=4.

在网上查看如何模拟布朗运动时,我看到通常使用正态分布,例如rnorm(n,0,t)我的问题是,如果不是标准的布朗运动,我该如何模拟?

将线性项(或任何其他函数)与随机游走项结合起来是完全有效的。这是一个基本框架...

x <- 1:20
xt <- function (x) { .5*x +                       # linear term plus 
                      cumsum(rnorm(length(x)))    # random walk term
                   }   
                                                    
#xt(x) # display one instance if desired
matplot(rbind(0,replicate(100,xt(x))), type='l') # start at origin w/ rbind of 0's

当然,您希望 xt 看起来像:

xt <- function (x) { (-3)*x+cumsum(rnorm(length(x)))*2} # linear term plus 
                                                        # random walk term

回复。你的第二个问题(下面)你的意思是 2,而不是 4(这是方差值,不是 sd)。这两种方式都是一样的(除了浮点舍入误差,因此在这里使用 all.equal())。

xt <- function (x) { (-3)*x+cumsum(rnorm(length(x))*2)}
xt2 <- function (x) { (-3)*x+cumsum(rnorm(length(x),sd=2))}
set.seed(123L)
a <- xt(x)
set.seed(123L)
b <- xt2(x)
all.equal(a,b)

补充:我要提到的最后一件事是 matplot() 是一个很棒的工具,用于显示 Monte Carlo 模拟结果,例如随机游走。

添加#2:回复。布朗运动而不是简单的高斯随机游走,这是一个快速脚本。

x <- 1000    
xbt_gauss <- function (x) {cumsum(rnorm(x))}
# xbt_gauss(x) # examine 1 instance

plot(NULL,
     xlim=c(-100,100),
     ylim=c(-100,100))

for (i in 1:50) lines(cbind(xbt_gauss(x),xbt_gauss(x)),
                      type='l',
                      col=i)

注意:这是在 R 中合理使用 for 循环(少数之一,顺便说一句)。如果想在这里做大量模型,也可以在并行编码中使用 foreach()。

当然可以根据您的模型在此处包含附加项或其他项。