繁体   English   中英

如何在用户定义函数中使用矩阵作为输入并在R中循环?

[英]How to use a matrix as an input in a User-Defined Function and Loop it in R?

这是我当前拥有的脚本:

delta <- 1/52
T <- 0.5
S0 <- 25
sigma <- 0.30
K <- 25
r <- 0.05
n <- 1000000
m <- T/delta
S <- numeric(m + 1)
S[1] <- S0
#Payoff asian option
asian_option_price <- function() {
  for(j in 1:m) {
    W <- rnorm(1)
    S[j + 1] <- S[j] * exp((r - 0.5 * sigma^2) * delta + sigma * sqrt(delta) * W)
  }
  Si.bar <- mean(S)
  exp(-r * T) * max(Si.bar - K, 0)
}
#Loops
C <- raply(n, asian_option_price(), .progress = "text")

我的问题是,完成此操作后,我需要立即使用“ -W”进行第二次仿真。 脚本的制作方式“ W”在我的循环内,这使得(我认为)之后无法使用相应的“ -W”。 我认为我需要使用一个填充有rnorm()的独立矩阵mat(x) = matrix(rnorm(m*n,mean=0,sd=1), m, n)这样我可以简单地使用-mat(x )在我的第二个模拟中。 我不知道如何从循环中取出“ W”,仍然使用它的对应矩阵。 任何帮助将非常有用。 谢谢!

您预分配所有随机数的想法是正确的。 然后,您可以遍历各个条目。 但是,采用矢量化方法更快:

delta <- 1/52
T <- 0.5
S0 <- 25
sigma <- 0.30
K <- 25
r <- 0.05
n <- 100000
m <- ceiling(T/delta)

W <- matrix(rnorm(n*m), nrow = m, ncol = n)
S <- apply(exp((r - 0.5 * sigma^2) * delta + sigma * sqrt(delta) * W), 2, cumprod)
S <- S0 * rbind(1, S)

Si_bar <- apply(S, 2, mean)
mean(pmax(Si_bar -K, 0)) * exp(-r*T)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM