Como calcular o equivalente de RATE no Excel em R?

1

Dado um reembolso e o prazo do empréstimo, eu gostaria de poder calcular a taxa de juros de um empréstimo.

No Excel, eu posso usar a função RATE, mas não tenho certeza do que usar em R e googling é difícil, já que "r" é tão freqüentemente incluído em fórmulas de interesse. Eu olhei através do pacote FinCal mas nada se destaca como equivalente.

Alguém poderia me indicar a fórmula correta que faz o equivalente a:

 = RATE(12,-500,3000)
 = 13%
    
por Steph Locke 28.01.2014 / 12:33

1 resposta

1

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:

  1. 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
    
  2. 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.

  3. 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.

  4. 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.)

    
por 29.01.2014 / 00:10

Tags