2017-09-18 11 views
0

DSEパッケージを使用したRのカルマンフィルタシミュレーションから後期(洗練された)状態推定を呼び出すにはどうすればよいですか?DSEパッケージを使用したカルマンフィルタの後ろ波推定値のシミュレーション方法

私は以下の例を追加しました。私は単純なランダムウォーク状態空間を作成したと仮定します。エラーは標準正規分布です。このモデルは、初期化された状態および共分散推定値がゼロであるSS関数を使用して作成される。したがって、理論モデルの形式は次のようになります。 状態展開のX(t)= X(t-1)+ e(t)〜N(0,1) Y(t)= X(t)+ w N(0,1)

統計ソフトウェアのジャーナルのKalman Filtering in Rの6ページと7ページの手順に従って、これをRで実装します。まず、SS()関数を使用して状態空間モデルを作成し、kalman.filterという変数に格納します。

kalman.filter=dse::SS(F = matrix(1,1,1), 
        Q = matrix(1,1,1), 
        H = matrix(1,1,1), 
        R = matrix(1,1,1), 
        z0 = matrix(0,1,1), 
        P0 = matrix(0,1,1) 
       ) 

をその後、我々は、(シミュレート使用してモデルフォームから100回の観測をシミュレート)とに入れ可変呼ばsimulate.kalman.filter:

simulate.kalman.filter=simulate(kalman.filter, start = 1, freq = 1, sampleT = 100) 

はその後、我々は、L()を使用して測定に対してカルマンフィルタを実行し、変数と呼ばれるテストの下でそれを保存:

test=l(kalman.filter, simulate.kalman.filter) 

出力から、私のフィルタリングされた見積もりはどれですか?

答えて

0

私はこの質問に対する答えを見つけました。

まず、モデルのフィルタされた推定値は、l()関数では与えられません。この機能は、一歩先を行く予測に過ぎません。

tfplot(test) 

:これを視覚化する簡単な方法は次式で与えられ

predictions = test$estimates$pred 

:1歩先の予測がで与えられる

kalman.filter=dse::SS(F = matrix(1,1,1), 
       Q = matrix(1,1,1), 
       H = matrix(1,1,1), 
       R = matrix(1,1,1), 
       z0 = matrix(0,1,1), 
       P0 = matrix(0,1,1) 
      ) 
simulate.kalman.filter=simulate(kalman.filter, start = 1, freq = 1, sampleT = 100) 
test=l(kalman.filter, simulate.kalman.filter) 

:私の問題の上記のフレーミングは次のようにコード化されましたこれにより、実際のデータとの一歩先の予測を素早くプロットすることができます。フィルタリングされた見積もりを取得するには、同じdseパッケージ内のsmoother()関数を使用する必要があります。状態モデルとデータを入力します。この場合、それぞれkalman.filterとsimulate.kalman.filterです。出力は、すべての時点について平滑化された推定値である。しかし、完全なデータセットを考慮した後にこれを行うことに注意してください。したがって、各観測値が入ってくるので、これは行いません。以下のコードを参照してください。

smooth = smoother(test, simulate.kalman.filter) 
plot(test$estimates$pred, ylim=c(max(test$estimates$pred,smooth$filter$track,simulate.kalman.filter$outpu), min(test$estimates$pred,smooth$filter$track,simulate.kalman.filter$output))) 
points(smooth$smooth$state, col = 3) 
points(simulate.kalman.filter$output, col = 4) 

上記のプロットは、すべての実際のデータ、モデルの推定と互いに対する平滑化推定値をプロットします。コードの1行目には、あなたの平滑化推定値は、次の行を例をプロットできます。

関連する問題