ArticleKF - positioning/kalmanfilter GitHub Wiki

What are KF geolocation packages?

KF geolocation packages include various state-space models: Kftrack, Kfsst, Ukfsst and Trackit. KF is simply a shorthand for Kalman filter that all these packages utilize. State-space models are a generic statistical modeling technique when a model describing the observations/ measurements is coupled to a model describing the hidden process that cannot be directly measured. Refer to Patterson et al. 2008 Trends in Ecology and Evolution 23(2):87-94 and Jonsen et al. 2013 Deep-Sea Research II 88-89:34-46 for a review of state-space models.

Similarities among KF packages

  • Underlying movement model
    • Assume the same random walk model
    • Includes drift and diffusion
  • At any given position the observation model
    • Predicts the observation
    • Describes the observation error
  • All model parameters are maximum likelihood estimated
  • Any point on the most probable track is a weighted average of:
    • What is learned from the current observation
    • What is learned from the entire track
  • No land avoidance is used so positions may end up on land (high on the todo list in our future developed)

Differences among KF packages

  • What they take as data
    • Raw geolocations (lon,lat) used by kftrack
    • Raw geolocations and SST (lon,lat,SST) used by kfsst and ukfsst
    • Light readings and SST used by trackit
  • Technical details in handling non-linearities
    • Extended Kalman filter used by kftrack and kfsst
    • Unscented Kalman filter used by ukfsst and trackit

General tips on usage

  • Longitude values should be between 0 - 360 degrees (degree East)
  • If possible, running more than one KF package on the same data can often be very instructive
  • Model convergence should be obtained
  • Ways to help the optimizer if a track is problematic
  • Simplify model (especially for short tracks)
fit<-kftrack(track, bx.a=FALSE, by.a=FALSE) 
  • Supply better initial values
fit<-kftrack(track, D.i=500) 
  • Remove extreme outliers
track<-track[abs(track$lat)<90,] 
  • A combination of the above
  • Also check input data or inspect via visual plots
  • Use SST products of different resolutions and compare different runs. Check documentation in R.
?get.sst.from.server
	  or
?get.blended.sst