在模拟后存储For Loop值

时间:2014-03-11 17:41:26

标签: r for-loop vector lambda simulation

我是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)

当我运行此代码时,我收到的错误是&#34; NA&#34;并且无法弄清楚为什么(再次,我是R的全新品牌)。我不认为每个模拟值都存储在结果向量中,但不知道如何诊断问题。

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

- 萨拉

2 个答案:

答案 0 :(得分:1)

一切都有效,直到results[i] <- (payout.A[i] + payout.B[i])行。问题是你从未设置results

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

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

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

答案 1 :(得分:1)

问题不在于[i]行中results[i] <- (payout.A[i] + payout.B[i])分配的存在。 [i]赋值对于结果参数是可以的,但不是两个支付参数,因为每个循环中都生成了这些参数。所以只需删除它们就可以形成一条线:

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

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