
Учитывая сумму погашения и срок кредита, я хотел бы иметь возможность рассчитать процентную ставку по кредиту.
В Excel я могу использовать функцию СТАВКА, но не уверен, что использовать в R, а гуглить сложно, так как "r" очень часто включается в формулы процентов. Я просмотрел пакет FinCal, но ничего не выделяется как эквивалент.
Может ли кто-нибудь указать мне правильную формулу, эквивалентную следующему:
= RATE(12,-500,3000)
= 13%
решение1
Проверив, RATE
функция в Excel представляет собой внутреннюю норму доходности, в частности, для аннуитета.
В R есть несколько способов решения этой задачи.
В чистом R обе функции uniroot
и polyroot
можно использовать для вычисления скорости, но для этого придется немного повозиться:
Рассмотрим в Excel следующее:
=RATE(10,-100,800)
что дает значение:
4.2775%
Теперь на языке R:
Вы можете написать функцию для предоставления 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
В качестве альтернативы можно использовать 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.
Для решения этой задачи можно также использовать более общие функции внутренней нормы доходности, указав вектор денежных потоков, соответствующих аннуитету.
Вы правы,
FinCal::discount.rate
по сути, это то же самое, что и RATE, но, похоже, он округляет все свои ставки до трехзначных цифр, не говоря об этом ничего, даже в справке, насколько я могу судить. Если для вас важна большая точность, это может быть проблемой.
(Альтернативой для большей точности является использование выходных данных этой discount.rate
функции и применение одного шага Ньютона-Рафсона, что должно дать гораздо лучший результат.)