Как рассчитать эквивалент СТАВКИ в Excel в R?

Как рассчитать эквивалент СТАВКИ в Excel в R?

Учитывая сумму погашения и срок кредита, я хотел бы иметь возможность рассчитать процентную ставку по кредиту.

В Excel я могу использовать функцию СТАВКА, но не уверен, что использовать в R, а гуглить сложно, так как "r" очень часто включается в формулы процентов. Я просмотрел пакет FinCal, но ничего не выделяется как эквивалент.

Может ли кто-нибудь указать мне правильную формулу, эквивалентную следующему:

 = RATE(12,-500,3000)
 = 13%

решение1

Проверив, RATEфункция в Excel представляет собой внутреннюю норму доходности, в частности, для аннуитета.

В R есть несколько способов решения этой задачи.

В чистом R обе функции unirootи polyrootможно использовать для вычисления скорости, но для этого придется немного повозиться:

Рассмотрим в Excel следующее:

=RATE(10,-100,800)

что дает значение:

4.2775%

Теперь на языке R:

  1. Вы можете написать функцию для предоставления uniroot:

    > f <- function(i,n,a) a - (1-(1+i)^(-n))/i
    > uniroot(f, interval=c(1e-9,1), 10, 800/100, tol=1e-6)$root
    [1] 0.04277498
    
  2. В качестве альтернативы можно использовать polyroot, но для этого нужно найти настоящий корень, который находится между 0 и 1 (далее я использую 1+i, а не i, потому что это проще, и поэтому мне нужен корень между 1 и 2):

    > res <- polyroot( c(1, rep(0,10-1), -(800/100+1), 800/100) )  
    > Re(res)[ abs(Im(res))<1e-9 ]  
    -0.7622679  1.0000000  1.0427750  
    

    Где вторая строка извлекает действительные корни полиномиального уравнения в терминах (1+i), а тот, который вам нужен, больше 1 (1,0427750), из которого вы вычитаете 1.

  3. Для решения этой задачи можно также использовать более общие функции внутренней нормы доходности, указав вектор денежных потоков, соответствующих аннуитету.

  4. Вы правы, FinCal::discount.rateпо сути, это то же самое, что и RATE, но, похоже, он округляет все свои ставки до трехзначных цифр, не говоря об этом ничего, даже в справке, насколько я могу судить. Если для вас важна большая точность, это может быть проблемой.

(Альтернативой для большей точности является использование выходных данных этой discount.rateфункции и применение одного шага Ньютона-Рафсона, что должно дать гораздо лучший результат.)

Связанный контент