Как рассчитать эквивалент RATE в Excel в R?

1497
Steph Locke

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

В Excel я могу использовать функцию RATE, но я не уверен, что использовать в R, и поиск в Google затруднителен, так как «r» так часто включается в формулы интереса. Я просмотрел пакет FinCal, но ничто не выделяется как эквивалент.

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

 = RATE(12,-500,3000) = 13% 
1
Разве RATE не является простым внутренним расчетом нормы прибыли? 10 лет назад 0
Я полагаю, что это какая-то форма нормы прибыли, однако `FinCal ::: irr` имеет только аргумент денежного потока` irr (cf) `, поэтому я не уверен, что мне нужно что-то еще использовать? Steph Locke 10 лет назад 0
Хм, похоже, мне нужно именно то, что нужно: discount.rate: discount.rate (n, pv, fv, pmt, type = 0) ` Steph Locke 10 лет назад 0

1 ответ на вопрос

1
Glen_b

После проверки 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функции и сделать один шаг Ньютона-Рафсона, что должно быть намного лучше.)

Похожие вопросы