R Uniroot против Excel Goal-Seek дает другой XIRR - PullRequest
0 голосов
/ 25 сентября 2019

Мне нужно создать график платежей, который начинается с первоначального основного платежа, начисляется проценты ежеквартально с условием расчета 30/360 дней, и через 10,5 лет основная сумма и все накопленные проценты выплачиваются.

Когда я использую функцию поиска цели Excel, я получаю правильную IRR (внутреннюю норму прибыли), т.е. конечный баланс за последний период равен 0. Однако когда я использую функцию uniroot () вR, я получаю IRR, который выключен после 5-го знака после запятой, в результате около 75000 осталось в конце последнего периода.

Вот мой код R:

cfs <- c(input1$cfs)
tot_int <- c(input1$yrs) 

f <- function(rate, cf, t, comp_freq=1){
disc_factor <- if (comp_freq==0){1/(1+rate*t)}
                                             else{1/((1+rate/comp_freq)^(t*comp_freq))}
                sum(cf*disc_factor)
        }

ytm <- c("YTM"=uniroot(f, interval=c(-1,1), cf=cfs, t=tot_int, comp_freq=4, 
                extendInt="yes", check.conv=TRUE, tol=1e-16, maxiter=10000000)$root)

Когда я запускаю этот код, я не получаю ошибок, так что это не ошибка конвергенции.Если вы посмотрите на изображение ниже, IRR поиска цели Excel против uniroot () IRR начнет расходиться после 4-го знака после запятой.

Excel-поиск цели по сравнению с Uniroot () IRR

Вот изображение правильного графика платежей с использованием рассчитанного целевого поиска Excel IRR:

График Pmt с использованием IRR для поиска целей в Excel

Столбец «дни» - это количество дней в каждом периоде составления.Первоначальный основной капитал составляет 106 700 000 (B2)."Проценты" рассчитываются как дни / 360 *** RATE *** Ini_Amt.Столбец «Pmt» представляет собой последовательность денежных потоков и является фиксированным.«End_Amt» рассчитывается как Ini_Amt + Interest-Pmt.А текущий период "End_Amt" является "Ini_Amt" следующего периода.

Я также пытался решить с помощью пакетов jrvFinance и FinancialMath и получил тот же IRR, что и uniroot (), так что это не проблема с используемым методом решателя.Также подумал, что, возможно, это ошибка округления, но я сохранил все платежи в денежном потоке до 10 знаков после запятой и получил тот же IRR с помощью uniroot ().

Ценю любую помощь или предложение.Спасибо!

...