我试图让我的r程序中的循环工作,但它没有给我我想要的结果。我试图建立一个保险合同的模型,其中有n个证券具有固定的违约矢量可能性(data [i,2])和支付矢量(data [i,1])。
我需要在安全级别和投资组合级别定价止损价值。为此,我为每个级别的条件向量创建了两个while循环(将由用户输入到函数中),一个循环扫描各种证券,最后一个循环来模拟各种场景。我尝试使用R的矩阵功能来帮助组织结果。
此代码的问题是if语句行为奇怪,没有正确激活和过滤。这会导致程序变慢并提供不良结果。它总是填充单个保护列,而不是将其置于似然向量上(data [i,2])。有很多活动部件,但总的来说它是一个简单的模型。
y = years
nr=nrow(data1)
nc=ncol(data1)
isl = individualStopLoss
asl = aggregateStoploss
Lasl = length(asl)
LIsl = length(isl)
claims = vector(mode = "logical",length= asl)
individualProtection = matrix(0,ncol=LIsl,nrow=y)
aggregateProtection = matrix(0,ncol=Lasl ,nrow=y)
expectedClaims = data1[,1]*data1[,2]
expectedClaims = sum(expectedClaims)
k = 1
m=1
while (k<=y)
{j = 1
m = 1
runi = runif(nr, min=0, max=1)
while (m<=Lasl)
{while (j<=LIsl)
{i=1
while (i<=nr)
{if ( runi[i] < data1[i,2] )
{individualProtection[k,j] = individualProtection[k,j] + max(data1[i,1]-isl[j],0)
claims[k] = claims[k] + data1[i,1]
i=i+1
}
else{i= i+1}
}
j=j+1
}
aggregateProtection[k,m]= aggregateProtection[k,m] + max(claims[k] - expectedClaims*asl[m],0)
m = m+1
}
k = k+1
}
答案 0 :(得分:1)
只是一个帮助您提供可重现示例的示例,将在您的问题更新后删除。
data1 <- cbind(rnorm(1000),rnorm(1000))
y = sample(rep(1990:2011,1000),1000)
nr=nrow(data1)
nc=ncol(data1)
isl = rnorm(500)
asl = rnorm(500)
Lasl = length(asl)
LIsl = length(isl)