0

反復によるルートを計算するために単純なルート検索アルゴリズムが必要な時系列を扱っています。これを行うために、パッケージを使用しますrootSolveapplyただし、一度に1つずつではなく、データセット全体を使用して複数の観測に対してこのアルゴリズムを拡張したい場合に、ファミリのどの関数を使用するかを特定しようとすると、いくつかの問題が発生します。

これは、1 つの観測用に記述されたコードを簡略化したものです。

Z1, Z2, Z3,Z4 and are discount factors between 0 and 1
Z5 a percentage 

f<- function(x) (z1*(1-exp(-.25*x))
                     +z2*(exp(-.25*x)-exp(-.5*x))
                     +z3*(exp(-.5*x)-exp(-.75*x))
                     +z4*(exp(-.75*x)-exp(-x)))/
      (z1*exp(-.25*x)+z2*exp(-.5*x)+z3*exp(-.75*x)+z4*exp(-x))-z5

then I find a root  using
uni<-uniroot(f, c(0,1))

割引とパーセンテージの各セットの関数の根を見つけることができるように、それぞれ 780 個の観測値を含むベクトルに対して、、、およびapplyを変更する関数 (必要だと思います) をどのように記述しますか? これは簡単かもしれませんが、正しく理解できませんでした。Z1Z2Z3Z4Z5

4

1 に答える 1

0

ここでベクトル化する 1 つの方法:

## zi should passed a additional parameter to f
f<- 
  function(x,z1,z2,z3,z4,z5) 
    (z1*(1-exp(-.25*x))
                 +z2*(exp(-.25*x)-exp(-.5*x))
                 +z3*(exp(-.5*x)-exp(-.75*x))
                 +z4*(exp(-.75*x)-exp(-x)))/
  (z1*exp(-.25*x)+z2*exp(-.5*x)+z3*exp(-.75*x)+z4*exp(-x))-z5

## wrap the unitroot function to make it function of only zi
root_f <-
  function(z1,z2,z3,z4,z5)
   uniroot(f, c(0,1),z1,z2,z3,z4,z5)

## use mapply to vectorize
mapply(root_f,Z1,Z2,Z3,Z4,Z5)
于 2014-05-14T17:46:56.193 に答える