开发者

while loop problem in r

开发者 https://www.devze.com 2023-03-09 07:00 出处:网络
i am trying to get this loop in my r program to work but it is not giving me the results that I desire. I am trying to model an insurance contract where there are n securities that have a fixed likeli

i am trying to get this loop in my r program to work but it is not giving me the results that I desire. I am trying to model an insurance contract where there are n securities that have a fixed likelihood of default vector(data[i,2]) and a payout vector(data[i,1]).

i need to price the value of stop losses at the security level and at the portfolio level. to do this i created two while loops for the conditional vectors of each level (which will be inputed into the function by the user) one while loop to scan through the various securities and a final one to model the various scenarios. i tried to Use R's matrix capabilities to help organize the results.

the problem with this code is that the if statement behaves oddly, not activating and filtering correctly. this causes the program to be slow and provide bad results. it fills the individual protection column always rather than conditioning it on the likelihood vector(data[i,2]). there is a lot of moving parts but overall it is a simple model.

 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
        }


Just an example to help you provide a reproducible example, will be deleted when your question is updated.

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)
0

精彩评论

暂无评论...
验证码 换一张
取 消