monte carlo模拟中的循环内部循环(或更好的解决方法)

monte carlo模拟中的循环内部循环(或更好的解决方法),r,montecarlo,risk-analysis,R,Montecarlo,Risk Analysis,这个问题与我在交叉验证部分中提出的一个问题有关,但它严格地集中在R编码上 我正在尝试进行蒙特卡罗模拟,以创建累计年度损失分布。它从离散分布(在本例中为泊松分布)中提取随机数损失频率,然后从连续分布(例如对数正态分布)中为每个损失提取随机严重性 它不是很长或很复杂的一段代码,但是我遇到了一个难题 首先我要说的是:我是在R中编写循环的初学者(我不使用lappy或sapply函数只for)。我设法为每个损失生成了具有一定严重性的随机数,我有两个版本: (本部分适用于两个版本,我现在使用“培训”值) 第

这个问题与我在交叉验证部分中提出的一个问题有关,但它严格地集中在R编码上

我正在尝试进行蒙特卡罗模拟,以创建累计年度损失分布。它从离散分布(在本例中为泊松分布)中提取随机数损失频率,然后从连续分布(例如对数正态分布)中为每个损失提取随机严重性

它不是很长或很复杂的一段代码,但是我遇到了一个难题

首先我要说的是:我是在R中编写循环的初学者(我不使用
lappy
sapply
函数只
for
)。我设法为每个损失生成了具有一定严重性的随机数,我有两个版本:

(本部分适用于两个版本,我现在使用“培训”值)

第1版:

第2版:

这些只是随机生成的数字,用来表示这些代码是如何工作的。我的问题是,我想我已经将这些循环放入另一个循环中,该循环将重复这些操作一定次数(由最终版本中的
simvect=n
确定,其中
n=10^5
n=10^6
)。我希望它看起来像这样(手工制作):

所以我想生成随机字符串,然后重复这个过程,并将这两个字符串相加,以创建一个数据帧或得到更好的解释-矩阵的行数等于最大绘制频率数,列数等于选择的重复次数(此处表示为
simvect


这是一篇很长的帖子,但我相信它解释了我的问题。提前谢谢大家

我不完全理解你最后想要实现什么,但这就是我想到的。希望有帮助

lambda=5 # lambda for poisson distribution
lnormpar1=2 #mean for lognormal distribution
lnormpar2=1 #standard deviation for lognormal distribution
simvect=1000000 #number of repeteation for monte carlo simulation
当我们循环时,Vec和输出为我们保留值:

Vec=rep(0,simvect)       # first component
for(z in 1:simvect){
    Vec[z]<- qpois(runif(1, min=0, max=1),lambda)
}
Vec    # printing (not necessary)

output = rep(0,simvect)   # second component
for(i in 1:simvect){
  output[i]<- qlnorm(runif(1, min=0, max=1),meanlog=lnormpar1, sdlog=lnormpar2)
}

matrix(c(Vec,output), ncol=2)    # merging them
Vec=rep(0,simvect)#第一个组件
for(1中的z:simvect){

Vec[z]我在这里添加了评论,因为我不想再问另一个问题,是否有任何方法可以提高R在10^6次迭代中的性能(使其更快)?或者建议使用不同的软件/环境/语言?
output2=c()
for(i in 1:qpois(runif(1, min=0, max=1),lambda)){
  output2[i]<- qlnorm(runif(1, min=0, max=1),meanlog=lnormpar1, sdlog=lnormpar2)
}
as.data.frame(output2)
          [,1]
[1,]  3.825669
[2,]  6.612618
[3,] 31.890079
[4,]  3.400814
[5,] 11.453274
[6,] 12.498189
[7,]  3.773497
    output2
1 18.632316
2 18.808997
3  1.526787
4  2.377593
5  5.786662
1.1 1.2 1.3
1.3 1.4 2.0
2.0 N/A 1.2
N/A N/A 3.0
N/A N/A 1.9
lambda=5 # lambda for poisson distribution
lnormpar1=2 #mean for lognormal distribution
lnormpar2=1 #standard deviation for lognormal distribution
simvect=1000000 #number of repeteation for monte carlo simulation
Vec=rep(0,simvect)       # first component
for(z in 1:simvect){
    Vec[z]<- qpois(runif(1, min=0, max=1),lambda)
}
Vec    # printing (not necessary)

output = rep(0,simvect)   # second component
for(i in 1:simvect){
  output[i]<- qlnorm(runif(1, min=0, max=1),meanlog=lnormpar1, sdlog=lnormpar2)
}

matrix(c(Vec,output), ncol=2)    # merging them