【问题标题】:Storing For Loop values after simulation模拟后存储 For 循环值
【发布时间】:2014-03-11 17:41:25
【问题描述】:

我是 R 的新手,正在尝试实现一个处理公司债券违约的简单模型(稍后我将对其进行扩展)。

对于初学者,我只使用两个客户端。

参数: - 两个客户(我将其命名为“A”和“B”) - 如果在 10 年内没有违约,每个客户将获得 10,000 美元的现金流 - 使用标准正态随机变量、相关均匀随机变量和高斯 copula 将概念组合在一起 - 运行一些模拟 - 存储客户 A 现金流加上客户 B 现金流的总和,并存储在名为“结果”的向量中 - 最后,取结果向量的平均值

My code is:

# define variables
nSim <- 5           # of simulations
rho <- 0.3          # rho
lambda <- 0.01      # default intensity
T <- 10             # time to default

for (i in 1:nSim){

# Step 1: generate 2 independent standard normal random variables
z1 <- rnorm(1, mean=0, sd=1)
z2 <- rnorm(1, mean=0, sd=1)

# Step 2: map the normals into correlated normals
#         by Cholesky composition of the correlation matrix
# w1 = z1
# w2 = rho(z1)+sqrt(1-(rho^2))*z2

w1 <- z1
w2 <- rho*z1 - sqrt(1-(rho^2))*z2

# Step 3: using the correlated normals, generate two dependent uniform variables
u <- runif(1, min=0, max=1)
v <- runif(1, min=0, max=1)

# Step 4: using the dependent uniforms, generate two dependent exponentials

tau.A <- (-1/lambda)*log(u)
tau.B <- (-1/lambda)*log(v)

payout.A <- if (tau.A > 10) {10000} else {0}
payout.B <- if (tau.B > 10) {10000} else {0}

result[i] = (payout.A[i] + payout.B[i])
}

# calculate expected value of portfolio
mean(result)

当我运行此代码时,我收到“NA”错误并且无法弄清楚原因(再次说明,我是 R 的新手)。我不认为每个模拟值都存储在结果向量中,但不知道如何诊断问题。

提前感谢任何可以提供帮助的人!

--莎拉

【问题讨论】:

    标签: r for-loop vector lambda simulation


    【解决方案1】:

    results[i] &lt;- (payout.A[i] + payout.B[i]) 行之前一切正常。问题是你从来没有设置results

    在您的 for 循环之前,添加以下行:

    results <- vector('numeric', length = nSim)
    

    这将创建一个长度为 nSim 的 0 向量。在 R 中最好预先分配空间,而不是使用 c() 动态增长向量。

    【讨论】:

      【解决方案2】:

      不,问题是results[i] &lt;- (payout.A[i] + payout.B[i]) 行中存在[i] 分配。 [i] 分配对于结果参数是可以的,但对于两个支付参数来说是可以的,因为这些参数中的每一个都是在每个循环中生成的。所以只需将它们移除以形成行:

      results[i] <- (payout.A + payout.B) 
      

      将解决您的问题。如果您希望将每个支出保留在自己的向量中,那么您需要这样分配它,但似乎您不这样做。

      【讨论】:

      • 在你的代码前面放4个空格来格式化它。欢迎使用 Stack Overflow!
      猜你喜欢
      • 1970-01-01
      • 2021-03-04
      • 2022-01-11
      • 2013-12-07
      • 2015-08-25
      • 1970-01-01
      • 2016-08-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多