r语言 - 存储模拟后的For循环值



我是一个全新的R,并试图实现一个简单的模型(我将稍后扩展),处理公司债券违约。

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

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

的平均值
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)。我不认为每个模拟值都存储在结果向量中,但不知道如何诊断问题。

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

——莎拉

一切正常,直到results[i] <- (payout.A[i] + payout.B[i])行。问题是你从来没有设置过results

for循环之前,添加一行:

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

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

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

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

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

最新更新