Я пытаюсь заставить этот цикл в моей 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
}