繁体   English   中英

通过在R中使用嵌套的for循环创建矩阵

[英]Creating a matrix from using a nested for loop in R

我正在尝试做的概述:我目前正在使用已设法用R编写的特定函数来模拟股票价格:

for(i in 2:252){
  X[1]<- 83.26
  X[i] <- X[i-1]*(1+mu*dt)+sigma*X[i-1]*sqrt(dt)*rnorm(1)}

我将模拟252天以生成一条轨迹。 以上完美地工作。

我现在需要使用上面的代码生成100条轨迹,并被告知在上面的代码中添加一个额外的for循环,以便生成100条轨迹并将结果保存在矩阵中。

到目前为止,我有:

Y<- matrix(NA, nrow=100, ncol=252)
for(j in 1:dim(X)[1]){

  for(i in 2:dim(X)[2]){
    X[1]<- 83.26
    X[i] <- X[i-1]*(1+mu*dt)+sigma*X[i-1]*sqrt(dt)*rnorm(1)}
}

这是行不通的,也不做任何事情。

基本上我想做的是创建一个具有252列(代表不同股票价格的天)和100行(代表100条不同生成的路径)的矩阵

任何有关如何执行此操作的帮助将不胜感激。

mu=0.0009646
sigma=0.0001471
dt=0.00796813

编辑:

现在,我需要能够在图表上绘制作为单独线条创建的矩阵的每一行。 即绘制每个轨迹与时间t的关系。

mu <- 0.0009646
sigma <- 0.0001471
dt <- 0.00796813

X <- matrix(NA, nrow = 100, ncol = 252)

for (j in 1:dim(X)[2]) {
  X[1, j] <- 83.26
  for (i in 2:dim(X)[1]) {
    X[i, j] <-
      X[i - 1, j] * (1 + mu * dt) + sigma * X[i - 1, j] * sqrt(dt) * rnorm(1)
  }
}

i是单独的日子, j是单独的轨迹,因此每一列都是轨迹,其中行是不同的日子。

一种绘制数据的方法:

library(ggplot2)
library(reshape2)

X <- data.frame(X)
X$day <- 1:NROW(X)

X_melt <- melt(X, id.vars = "day")

ggplot(data = X_melt, aes(x = day, y = value, group = variable)) +
  geom_line()

每条线都是不同的轨迹

在此处输入图片说明

赞扬布雷特的解决方案,

Y<- matrix(NA, nrow=100, ncol=252)
for(j in 1:dim(Y)[1]){
  for(i in 2:dim(Y)[2]){
  X[1]<- 83.26
  X[i] <- X[i-1]*(1+mu*dt)+sigma*X[i-1]*sqrt(dt)*rnorm(1)}
Y[j, ] <- X
}

您遇到的一个问题是要求R计算dim(X) ,在给定您的第一个代码块的情况下,好像它应该是一个向量,因此具有length()而不是dim()

因此,此解决方案使用矩阵Y来生成用于迭代的维。

另一个问题是,您每次X 252次迭代之后,就没有存储这些值。 因此,当您放置Y[j, ] <- X ,您将获取为X创建的所有值并将它们存储在Yj行中。

我敢肯定,其他人会喜欢使用更佳的解决方案,但是这使用了您已经编写的大多数代码。

干杯。

暂无
暂无

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

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