time series - Kalman filter in R -


i'm trying use kalman filter in r , need in determining whether i've done correctly , on how measure effectiveness of filter. using dse package in r. i've included code below

  • i've built simple state space model in r can summarized αt = 1.1*αt−1 + ηt state model , yt = αt + rt measurement model, ηt , rt gaussian noise models.
  • in package dse, i've simulated using functions filter=dse::ss() formulate above state space model, used function simulation=simulate(filter,...) simulate observations model, , used function l(filter, simulate) build estimation model filter.

i'm not sure if last bullet think supposed do, or hope should doing. expect to, @ each time step, calculate revised estimate of model of true underlying path, based on observations (simulation=simulate()) based on noisy model fed (filter=dse:ss()). after run l(filter, simulation), expect output close simulated observations, , eventually, converge of underlying model filter=dse::ss().

i'm not sure whether happening, , i'm not sure how measure it. plotted curve of difference between model generated l(filter, simulation) , simulation = simulate(), , expected model curve gradually converge zero, doesn't converge, instead oscillated between large positive numbers , large negative numbers, , after 400 episodes goes 0 without gradual convergence.

  1. am correctly implementing kalman filter?
  2. if correctly doing so, how measure convergence?

please see code below:

formulating state transition model kalman filter:

set.seed(1) kalman.filter=dse::ss(f = matrix(1.1, 1, 1),                    q = matrix(0, 1, 1),                   h = matrix(1, 1, 1),                   r = matrix(1, 1, 1),                   z0 = matrix(1, 1, 1),                   p0 = matrix(1, 1, 1),                   ) 

now simulate 30 observations underlying state transition model specified above:

simulate.kalman.filter=simulate(kalman.filter, start = 1, freq =1, samplet = 30) 

now use kalman filter simulate forecast model estimate. call model "test":

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

now plot curve of difference between forecasted model called "test" , underlying state transition model. doesn't converge expect to:

difference=(test$estimates$pred-simulate.kalman.filter$state) plot(difference) 

now plot underlying state model (in black), observations (in green) , forecasts (in red). forecast model doesn't seem converging:

plot(simulate.kalman.filter$state) points(simulate.kalman.filter$output, col = 3) points(test$estimates$pred, col = 2) 


Comments

Popular posts from this blog

neo4j - finding mutual friends in a cypher statement starting with three or more persons -

php - How to remove letter in front of the word laravel -

minify - Minimizing css files -