Comment calculer l'équivalent de RATE dans Excel dans R?

1

Étant donné le remboursement et la durée du prêt, j'aimerais pouvoir calculer le taux d'intérêt d'un prêt.

Dans Excel, je peux utiliser la fonction RATE mais je ne sais pas quoi utiliser dans R et la recherche sur Google est difficile, car "r" est si souvent inclus dans les formules d'intérêt. J'ai parcouru le package FinCal mais rien ne vaut comme équivalent.

Quelqu'un pourrait-il m'indiquer la bonne formule qui équivaut à:

 = RATE(12,-500,3000)
 = 13%
Steph Locke
la source
Un RATEsimple calcul du taux de rendement interne n'est-il pas ?
Je crois qu’il s’agit d’une forme de taux de rendement, mais qu’il n’ya FinCal:::irrqu’un argument financier irr(cf), alors je ne suis pas sûr de savoir si je dois utiliser autre chose.
Steph Locke
Hmm, on dirait que c'est discount.ratepeut-être celui dont j'ai besoin:discount.rate(n, pv, fv, pmt, type = 0)
Steph Locke Le

Réponses:

1

Après vérification, la RATEfonction dans Excel correspond au taux de rendement interne, en particulier celui correspondant à une rente.

Il y a plusieurs façons d'aborder cela dans R.

Dans vanilla R, le unirootet les polyrootfonctions peuvent être utilisés pour résoudre le taux, mais il faut un peu de bidouillage:

Considérez ce qui suit dans Excel:

=RATE(10,-100,800)

qui produit la valeur:

4.2775%

Maintenant en R:

  1. Vous pouvez écrire une fonction à fournir à 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. Vous pouvez également utiliser polyroot, mais vous devez trouver la racine réelle comprise entre 0 et 1 (dans la suite, j'utilise 1 + i plutôt que i car c'est plus simple et nécessite donc la racine entre 1 et 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  
    

    Où la deuxième ligne extrait les racines réelles de l'équation polynomiale en termes de (1 + i), et celle que vous voulez est supérieure à 1 (1.0427750), à laquelle vous soustrayez 1.

  3. Vous pouvez également utiliser des fonctions de taux de rendement internes plus générales pour ce problème, en fournissant le vecteur de flux de trésorerie correspondant à la rente.

  4. Vous avez raison, cela FinCal::discount.ratecorrespond essentiellement à RATE, mais il semblerait que tous ses tarifs soient arrondis à trois chiffres significatifs sans rien dire à ce sujet, même dans l’aide, à ma connaissance. Si une plus grande précision vous tient à cœur, cela pourrait poser problème.

(Une alternative pour plus de précision est de prendre le résultat de cette discount.ratefonction et de faire un pas de Newton-Raphson, ce qui devrait faire beaucoup mieux.)

Glen_b
la source