Функция интеграции в R выдает ошибку "нечисловой c аргумент двоичного оператора" - PullRequest
1 голос
/ 09 мая 2020

Я получаю «нечисловой c аргумент бинарного оператора» при выполнении приведенного ниже кода;

    R = function(PD, AVC) {AVC*(0.12*(1-exp(-50*PD))/(1-exp(-50)) + 
                              0.24*(1-(1-exp(-50*PD))/(1-exp(-50))))}

b = function(PD) {(0.11852-0.05478*log(PD))^2}

integrand = function(PD=0.1, AVC =1, LGD = 1,q=0.999) {pnorm(sqrt(1/(1-R(PD, AVC)))*qnorm(PD) + 
                                                               sqrt(R(PD, AVC)/(1-R(PD, AVC)))*qnorm(q))}
integrate(integrand, lower = 0.999, upper = 1)

K_ES = function(PD,AVC =1, LGD = 1,q=0.999) {LGD/(1-q)*integrate(integrand, lower = q, upper = 1)-PD*LGD}

K_ES(PD=0.1,AVC =1, LGD = 1,q=0.999)

Что может вызывать эту ошибку и как ее устранить?

1 Ответ

0 голосов
/ 09 мая 2020

integrate возвращает список, а не числовой c вектор. Вероятно, вам нужен элемент value:

K_ES = function(PD,
                AVC = 1,
                LGD = 1,
                q = 0.999) {
  LGD / (1 - q) * integrate(integrand, lower = q, upper = 1)$value - PD * LGD
}

K_ES(PD = 0.1, AVC = 1 , LGD = 1, q = 0.999)
# [1] 0.9
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...