Excel の RATE に相当するものを R で計算するにはどうすればいいですか?

Excel の RATE に相当するものを R で計算するにはどうすればいいですか?

返済額とローン期間がわかれば、ローンの金利を計算できるようにしたいと思います。

Excel では RATE 関数を使用できますが、R で何を使用するかはわかりません。また、「r」は利息の計算式に頻繁に含まれるため、Google で検索するのは困難です。FinCal パッケージを調べましたが、同等のものは見つかりませんでした。

以下の式と同等の正しい式を教えていただけますか:

 = RATE(12,-500,3000)
 = 13%

答え1

確認したところ、RATEExcel の関数は内部収益率、具体的には年金用です。

R ではこれにアプローチする方法がいくつかあります。

標準の R では、 関数unirootpolyroot関数の両方を使用してレートを計算できますが、少し操作が必要です。

Excel で次のことを考慮してください。

=RATE(10,-100,800)

次の値が生成されます:

4.2775%

R では次のようになります:

  1. 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. あるいは、polyroot を使用することもできますが、0 と 1 の間の実根を見つける必要があります (以下では、より簡単な i ではなく 1+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  
    

    2 行目では、(1+i) に関して多項式方程式の実根を抽出しており、必要なのは 1 (1.0427750) より大きい値であり、そこから 1 を減算します。

  3. 年金に対応するキャッシュフローのベクトルを指定することにより、この問題に対してより一般的な内部収益率関数を使用することもできます。

  4. 確かに、これはFinCal::discount.rate本質的には RATE と同じことを行いますが、私が見る限り、ヘルプでも何も言及されずに、すべてのレートを 3 桁の有効数字に丸めているようです。より高い精度が重要な場合は、これが問題になる可能性があります。

(精度を高めるための別の方法としては、その関数の出力を取りdiscount.rate、ニュートン・ラプソン法を 1 ステップ実行すると、はるかに優れた結果が得られます。)

関連情報