Tendo verificado, a função RATE
no Excel é a taxa interna de retorno, especificamente uma para uma anuidade.
Existem várias maneiras de abordar isso em R.
Na baunilha R, as funções uniroot
e polyroot
podem ser usadas para resolver a taxa, mas é preciso um pouco de correção:
Considere o seguinte no Excel:
=RATE(10,-100,800)
que produz o valor:
4.2775%
Agora no R:
-
Você pode escrever uma função para fornecer ao 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
-
Alternativamente, você pode usar o polyroot, mas você precisa encontrar a raiz real que está entre 0 e 1 (no seguinte eu uso 1 + i ao invés de i porque é mais simples e precisa da raiz entre 1 e 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
Onde a segunda linha está extraindo as raízes reais da equação polinomial em termos de (1 + i), e a que você quer é a maior que 1 (1.0427750), da qual você subtrai 1.
-
Você também pode usar funções de taxa interna de retorno mais gerais para esse problema, fornecendo o vetor de fluxos de caixa correspondente à anuidade.
-
Você está certo de que
FinCal::discount.rate
faz essencialmente a mesma coisa que TAXA, mas parece que ele arredonda todas as suas taxas para três números significativos sem dizer nada sobre isso, mesmo na ajuda até onde eu pode ver. Se uma maior precisão é importante para você, isso pode ser um problema.
(Uma alternativa para mais precisão é pegar a saída dessa função discount.rate
e dar um passo na Newton-Raphson, que deve fazer muito melhor.)