Extended Kalman Filter
Install and import
npm install fintech-algorithmsimport { runFilter } from "fintech-algorithms/statistical-time-series/state-and-regime-models/extended-kalman-filter";Signature
runFilter(observations, config)Worked example
executed Captured by running this function on the input its own test provides. Real output of real code — but not asserted against a published figure.
Input
[
0.1740564489,
0.7180957323,
0.0365723689,
-0.3580227464,
0.3553945738,
0.4323328535
]Showing 6 of 160 elements.
{
"a": 0.9,
"b": 0.22,
"c": 0.04,
"q": 0.06,
"r": 0.49,
"initial_mean": 0,
"initial_variance": 1.5
}Call
runFilter(observations, config)Returns
array of 160 objects
[
{
"index": 0,
"transition_jacobian": 1.12,
"measurement_jacobian": 1,
"predicted_mean": 0,
"predicted_variance": 1.9416000000000002,
"predicted_observation": 0,
"innovation": 0.1740564489,
"innovation_variance": 2.4316000000000004,
"kalman_gain": 0.7984865931896693,
"filtered_mean": 0.13898174090485277,
"filtered_variance": 0.391258430662938
},
{
"index": 1,
"transition_jacobian": 1.1178786662536586,
"measurement_jacobian": 1.0124448968753026,
"predicted_mean": 0.15556121094128242,
"predicted_variance": 0.5489371591527625,
"predicted_observation": 0.15652918255526316,
"innovation": 0.5615665497447369,
"innovation_variance": 1.0526851087201852,
"kalman_gain": 0.5279533460534298,
"filtered_mean": 0.452042149910696,
"filtered_variance": 0.25551725369409706
},
{
"index": 2,
"transition_jacobian": 1.0979025313193456,
"measurement_jacobian": 1.040234775932769,
"predicted_mean": 0.5029346991596126,
"predicted_variance": 0.36799793432466277,
"predicted_observation": 0.5130524316243634,
"innovation": -0.47648006272436344,
"innovation_variance": 0.8882062919307445,
"kalman_gain": 0.4309857431023305,
"filtered_mean": 0.2975785852529078,
"filtered_variance": 0.20301476071185573
}
]Showing 3 of 160 elements.
Diagrams
Calculation flow
Extended Kalman Filter Causal Update Flow
flowchart LR
A["Filtered state at t-1"] --> B["Predict state at t"]
B --> C["Read observation available at t"]
C --> D["Compute evidence or innovation"]
D --> E["Normalize or gain-weight update"]
E --> F["Filtered state at t"]
F --> G["Publish diagnostics"]
F --> A
How it works
This page states the contract — how to call it correctly. The article explains the concept: why it works, and where it breaks.
References
- An Introduction to the Kalman Filter — Greg Welch and Gary Bishop
- A New Approach to Linear Filtering and Prediction Problems — R. E. Kalman
- Bayesian Filtering and Smoothing — Simo Särkkä and Lennart Svensson
- Time Series Analysis by State Space Methods — statsmodels developers