в то время как проблема цикла в г - PullRequest
0 голосов
/ 31 мая 2011

Я пытаюсь заставить этот цикл в моей r-программе работать, но он не дает мне желаемых результатов.Я пытаюсь смоделировать договор страхования, в котором есть n ценных бумаг с фиксированной вероятностью вектора дефолта (данные [i, 2]) и вектора выплат (данные [i, 1]).

Мне нужно оценить стоимость стоп-лоссов на уровне безопасности и на уровне портфеля.Для этого я создал два цикла while для условных векторов каждого уровня (которые будут вставлены в функцию пользователем) - один цикл while для сканирования различных ценных бумаг, а последний - для моделирования различных сценариев.Я пытался использовать матричные возможности R, чтобы помочь организовать результаты.

проблема с этим кодом заключается в том, что оператор if ведет себя странно, неправильно активируется и фильтруется.это приводит к тому, что программа работает медленно и дает плохие результаты.он всегда заполняет отдельный столбец защиты, а не подгоняет его к вектору вероятности (данные [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
        }

1 Ответ

1 голос
/ 31 мая 2011

Просто пример, который поможет вам предоставить воспроизводимый пример, будет удален при обновлении вашего вопроса.

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...