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()。
当然可以根据您的模型在此处包含附加项或其他项。
我有这个过程 =-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()。
当然可以根据您的模型在此处包含附加项或其他项。