2016-08-24 12 views
3

データセットは、実際のデータには時刻0で、このようになります動的予測はdata.tableの方法ですか?私は、動的予測を作成する必要が

v(t) = b0 + b1*v(t-1) + b2*v(t-2) + b3*x(t-1) + b4*x(t-2) 

を使用して、80種類のxのと100K「日付」があります。

date   v vLag1 vLag2 x xLag1 xLag2 b1 b2 b3 b4 
2016-06-30 NA 105  95  33 11  23  0.2 3.2 -1.2 0.4 
2016-07-01 NA NA  NA  43 33  11  0.2 3.2 -1.2 0.4 
2016-07-02 NA NA  NA  52 43  33  0.2 3.2 -1.2 0.4 

目標は、値を持つすべてのNAのを置き換える、V年代を予測することです。 vLag1、vLag2、xLag1、xLag2を作成しました。vを1行で計算する必要があります。

すべてX 's及びB' sは前もって知られているので、私は上記に示さXのラグを作成しています。 bが係数です。各日付の

V(T)が予測されるであろう、と予想V(T)「sは遅れ説明変数として、次の日のV予測に供給されます。

は次のように行をループを回避するには、次の

for (i in 2:nrows){ 
    df$v[i] <- df$v[i-1] * df$coeff[i] 
} 

将来のすべてのV年代だけので、計算しやすいV1、参照するように、私は、繰り返し置換を使用しようとしましたv1の計算には、同じ行に他の値が含まれています。

v2 = b0 + b1*v1 + b2*v0 + b3*x1 + b4*x0 
v3 = b0 + b1*v2 + b2*v1 + b3*x2 + b4*x1 
(substitute v2) v3 = b0 + b1*(b0 + b1*v1 + b2*v0 + b3*x1 + b4*x0) + b2*v1 + b3*x2 + b4*x1 
v4 = ... 

しかし、トラックを保つためにV年代とX年代のように多くのラグで、これは、コントロールの外に出ました。

私はdata.tableシフトの機能を参照しています。しかし、私の場合、値を動的に取得してからシフトする必要がある場合は、data.tableの関数で動的に予測する方法はありますか? (あなたはこれを簡単に行うことができない)の代わりにdata.tableの

答えて

5

これはRcppための簡単な仕事のようになります(Windowsを使用する場合は、作業Rtoolsのインストールを持っていることを確認し

#include <Rcpp.h> 
using namespace Rcpp;  

// [[Rcpp::export]] 
NumericVector dyn_fore(const NumericVector x, 
         const double v1, const double v2, 
         const double x1, const double x2, 
         const double b0, const double b1, const double b2, 
         const double b3, const double b4) { 
    int n = x.size(); 
    NumericVector v(n); 
    v(0) = b0 + b1*v1 + b2*v2 + b3*x1 + b4*x2; 
    v(1) = b0 + b1*v(0) + b2*v1 + b3*x(0) + b4*x1; 
    for (int i = 2; i < n; i++) { 
    v(i) = b0 + b1*v(i-1) + b2*v(i-2) + b3*x(i-1) + b4*(i-2); 
    } 
    return v; 
} 

、 RStudioでC++ファイルでこれを入れて、それをソース私は、係数を持って、右のインデックスかどうかを確認してください)

は、次にRに:。。

x <- c(33, 43, 52, 67) 
dyn_fore(x, 105, 95, 11, 23, 0, 0.2, 3.2, -1.2, 0.4) 
#[1] 321.00 365.00 1048.60 1315.72 
+0

私は実際にRcppの方法を検討していて、とのトラブルに実行し始めましたENV PATHが原因でg ++コンパイラが見つかりませんでした。私はそれを解決したら、私はあなたの解決策を試してみます。 – David

+0

システムを設定する際に使用可能な指示に従ってください。問題なく動作するはずです。 Rcppは、ループが非常に自然であるがRで十分に効率的でないタスクに非常に役立ちます。 – Roland

関連する問題