In [1]:
%matplotlib inline
In [2]:
import os, sys
sys.path.append(os.path.abspath('../../main/python'))
import datetime as dt
import numpy as np
import numpy.testing as npt
import matplotlib.pyplot as plt
from thalesians.tsa.distrs import NormalDistr as N
import thalesians.tsa.filtering as filtering
import thalesians.tsa.filtering.kalman as kalman
import thalesians.tsa.filtering.lineargaussian as lineargaussian
import thalesians.tsa.filtering.particle as particle
import thalesians.tsa.filtering.visual as visual
import thalesians.tsa.numpyutils as npu
import thalesians.tsa.processes as proc
import thalesians.tsa.randomness as rnd
import thalesians.tsa.simulation as sim
In [3]:
X = proc.GeometricBrownianMotion()
x0 = .3
In [4]:
rnd.random_state(np.random.RandomState(seed=42), force=True)
em = sim.EulerMaruyama(process=X, initial_value=x0, times=sim.xtimes(start=0., stop=1., step=1E-3))
df = sim.run(em)
plt.plot(df);
In [5]:
t0 = 0.
kf = filtering.kalman.KalmanFilter(t0, state_distr=N(mean=x0, cov=2.5), process=X, approximate_distr=True)
In [6]:
observable = kf.create_observable(lineargaussian.LinearGaussianObsModel.create(1.), X)
In [7]:
run_df = filtering.run(observable=observable, obss=0, df=df, return_df=True)
In [8]:
run_df.df
Out[8]:
time
filter_name
filter_type
observable_name
accepted
obs_mean
obs_cov
predicted_obs_mean
predicted_obs_cov
cross_cov
innov_mean
innov_cov
prior_state_mean
prior_state_cov
posterior_state_mean
posterior_state_cov
true_value
log_likelihood
gain
0
0.000
KalmanFilter_2228659095872
<class 'thalesians.tsa.filtering.kalman.Kalman...
None
None
NaN
NaN
NaN
NaN
NaN
NaN
NaN
0.300000
2.500000
0.300000
2.500000
None
NaN
None
1
0.000
KalmanFilter_2228659095872
<class 'thalesians.tsa.filtering.kalman.Kalman...
KalmanObservable_2228659093912
True
0.300000
0.0
0.300000
2.500000
2.500000
0.000000
2.500000
0.300000
2.500000
0.300000
2.500000
None
-1.377084
[[1.0]]
2
0.001
KalmanFilter_2228659095872
<class 'thalesians.tsa.filtering.kalman.Kalman...
KalmanObservable_2228659093912
True
0.304712
0.0
0.300000
0.000090
0.000090
0.004712
0.000090
0.300000
0.000090
0.300000
0.000090
None
3.615361
[[1.0]]
3
0.002
KalmanFilter_2228659095872
<class 'thalesians.tsa.filtering.kalman.Kalman...
KalmanObservable_2228659093912
True
0.303380
0.0
0.304712
0.000093
0.000093
-0.001332
0.000093
0.304712
0.000093
0.304712
0.000093
None
3.713523
[[1.0]]
4
0.003
KalmanFilter_2228659095872
<class 'thalesians.tsa.filtering.kalman.Kalman...
KalmanObservable_2228659093912
True
0.309594
0.0
0.303380
0.000092
0.000092
0.006214
0.000092
0.303380
0.000092
0.303380
0.000092
None
3.517813
[[0.9999999999999999]]
5
0.004
KalmanFilter_2228659095872
<class 'thalesians.tsa.filtering.kalman.Kalman...
KalmanObservable_2228659093912
True
0.324504
0.0
0.309594
0.000096
0.000096
0.014911
0.000096
0.309594
0.000096
0.309594
0.000096
None
2.547953
[[1.0]]
6
0.005
KalmanFilter_2228659095872
<class 'thalesians.tsa.filtering.kalman.Kalman...
KalmanObservable_2228659093912
True
0.322102
0.0
0.324504
0.000105
0.000105
-0.002403
0.000105
0.324504
0.000105
0.324504
0.000105
None
3.632745
[[1.0]]
7
0.006
KalmanFilter_2228659095872
<class 'thalesians.tsa.filtering.kalman.Kalman...
KalmanObservable_2228659093912
True
0.319717
0.0
0.322102
0.000104
0.000104
-0.002385
0.000104
0.322102
0.000104
0.322102
0.000104
None
3.640181
[[1.0]]
8
0.007
KalmanFilter_2228659095872
<class 'thalesians.tsa.filtering.kalman.Kalman...
KalmanObservable_2228659093912
True
0.335683
0.0
0.319717
0.000102
0.000102
0.015966
0.000102
0.319717
0.000102
0.319717
0.000102
None
2.428676
[[1.0]]
9
0.008
KalmanFilter_2228659095872
<class 'thalesians.tsa.filtering.kalman.Kalman...
KalmanObservable_2228659093912
True
0.343830
0.0
0.335683
0.000113
0.000113
0.008146
0.000113
0.335683
0.000113
0.335683
0.000113
None
3.331946
[[0.9999999999999999]]
10
0.009
KalmanFilter_2228659095872
<class 'thalesians.tsa.filtering.kalman.Kalman...
KalmanObservable_2228659093912
True
0.338725
0.0
0.343830
0.000118
0.000118
-0.005105
0.000118
0.343830
0.000118
0.343830
0.000118
None
3.492150
[[1.0]]
11
0.010
KalmanFilter_2228659095872
<class 'thalesians.tsa.filtering.kalman.Kalman...
KalmanObservable_2228659093912
True
0.344537
0.0
0.338725
0.000115
0.000115
0.005812
0.000115
0.338725
0.000115
0.338725
0.000115
None
3.470143
[[1.0]]
12
0.011
KalmanFilter_2228659095872
<class 'thalesians.tsa.filtering.kalman.Kalman...
KalmanObservable_2228659093912
True
0.339488
0.0
0.344537
0.000119
0.000119
-0.005049
0.000119
0.344537
0.000119
0.344537
0.000119
None
3.492919
[[1.0]]
13
0.012
KalmanFilter_2228659095872
<class 'thalesians.tsa.filtering.kalman.Kalman...
KalmanObservable_2228659093912
True
0.334488
0.0
0.339488
0.000115
0.000115
-0.005000
0.000115
0.339488
0.000115
0.339488
0.000115
None
3.506609
[[1.0]]
14
0.013
KalmanFilter_2228659095872
<class 'thalesians.tsa.filtering.kalman.Kalman...
KalmanObservable_2228659093912
True
0.337047
0.0
0.334488
0.000112
0.000112
0.002559
0.000112
0.334488
0.000112
0.334488
0.000112
None
3.600586
[[1.0]]
15
0.014
KalmanFilter_2228659095872
<class 'thalesians.tsa.filtering.kalman.Kalman...
KalmanObservable_2228659093912
True
0.316655
0.0
0.337047
0.000114
0.000114
-0.020392
0.000114
0.337047
0.000114
0.337047
0.000114
None
1.792816
[[1.0]]
16
0.015
KalmanFilter_2228659095872
<class 'thalesians.tsa.filtering.kalman.Kalman...
KalmanObservable_2228659093912
True
0.299382
0.0
0.316655
0.000100
0.000100
-0.017272
0.000100
0.316655
0.000100
0.316655
0.000100
None
2.197705
[[0.9999999999999999]]
17
0.016
KalmanFilter_2228659095872
<class 'thalesians.tsa.filtering.kalman.Kalman...
KalmanObservable_2228659093912
True
0.294059
0.0
0.299382
0.000090
0.000090
-0.005323
0.000090
0.299382
0.000090
0.299382
0.000090
None
3.582719
[[1.0]]
18
0.017
KalmanFilter_2228659095872
<class 'thalesians.tsa.filtering.kalman.Kalman...
KalmanObservable_2228659093912
True
0.284641
0.0
0.294059
0.000087
0.000087
-0.009418
0.000087
0.294059
0.000087
0.294059
0.000087
None
3.246007
[[1.0]]
19
0.018
KalmanFilter_2228659095872
<class 'thalesians.tsa.filtering.kalman.Kalman...
KalmanObservable_2228659093912
True
0.287469
0.0
0.284641
0.000081
0.000081
0.002829
0.000081
0.284641
0.000081
0.284641
0.000081
None
3.741866
[[1.0]]
20
0.019
KalmanFilter_2228659095872
<class 'thalesians.tsa.filtering.kalman.Kalman...
KalmanObservable_2228659093912
True
0.279215
0.0
0.287469
0.000083
0.000083
-0.008254
0.000083
0.287469
0.000083
0.287469
0.000083
None
3.369281
[[1.0]]
21
0.020
KalmanFilter_2228659095872
<class 'thalesians.tsa.filtering.kalman.Kalman...
KalmanObservable_2228659093912
True
0.266745
0.0
0.279215
0.000078
0.000078
-0.012470
0.000078
0.279215
0.000078
0.279215
0.000078
None
2.813661
[[1.0]]
22
0.021
KalmanFilter_2228659095872
<class 'thalesians.tsa.filtering.kalman.Kalman...
KalmanObservable_2228659093912
True
0.279108
0.0
0.266745
0.000071
0.000071
0.012363
0.000071
0.266745
0.000071
0.266745
0.000071
None
2.782626
[[1.0]]
23
0.022
KalmanFilter_2228659095872
<class 'thalesians.tsa.filtering.kalman.Kalman...
KalmanObservable_2228659093912
True
0.277115
0.0
0.279108
0.000078
0.000078
-0.001993
0.000078
0.279108
0.000078
0.279108
0.000078
None
3.785371
[[1.0]]
24
0.023
KalmanFilter_2228659095872
<class 'thalesians.tsa.filtering.kalman.Kalman...
KalmanObservable_2228659093912
True
0.277707
0.0
0.277115
0.000077
0.000077
0.000592
0.000077
0.277115
0.000077
0.277115
0.000077
None
3.815733
[[1.0]]
25
0.024
KalmanFilter_2228659095872
<class 'thalesians.tsa.filtering.kalman.Kalman...
KalmanObservable_2228659093912
True
0.265195
0.0
0.277707
0.000077
0.000077
-0.012512
0.000077
0.277707
0.000077
0.277707
0.000077
None
2.801432
[[1.0]]
26
0.025
KalmanFilter_2228659095872
<class 'thalesians.tsa.filtering.kalman.Kalman...
KalmanObservable_2228659093912
True
0.260630
0.0
0.265195
0.000070
0.000070
-0.004565
0.000070
0.265195
0.000070
0.265195
0.000070
None
3.713877
[[1.0]]
27
0.026
KalmanFilter_2228659095872
<class 'thalesians.tsa.filtering.kalman.Kalman...
KalmanObservable_2228659093912
True
0.261544
0.0
0.260630
0.000068
0.000068
0.000914
0.000068
0.260630
0.000068
0.260630
0.000068
None
3.873195
[[1.0]]
28
0.027
KalmanFilter_2228659095872
<class 'thalesians.tsa.filtering.kalman.Kalman...
KalmanObservable_2228659093912
True
0.252024
0.0
0.261544
0.000068
0.000068
-0.009520
0.000068
0.261544
0.000068
0.261544
0.000068
None
3.213781
[[0.9999999999999999]]
29
0.028
KalmanFilter_2228659095872
<class 'thalesians.tsa.filtering.kalman.Kalman...
KalmanObservable_2228659093912
True
0.255018
0.0
0.252024
0.000064
0.000064
0.002994
0.000064
0.252024
0.000064
0.252024
0.000064
None
3.842380
[[1.0]]
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
971
0.970
KalmanFilter_2228659095872
<class 'thalesians.tsa.filtering.kalman.Kalman...
KalmanObservable_2228659093912
True
0.431501
0.0
0.451949
0.000204
0.000204
-0.020448
0.000204
0.451949
0.000204
0.451949
0.000204
None
2.305827
[[0.9999999999999999]]
972
0.971
KalmanFilter_2228659095872
<class 'thalesians.tsa.filtering.kalman.Kalman...
KalmanObservable_2228659093912
True
0.433249
0.0
0.431501
0.000186
0.000186
0.001748
0.000186
0.431501
0.000186
0.431501
0.000186
None
3.366973
[[1.0]]
973
0.972
KalmanFilter_2228659095872
<class 'thalesians.tsa.filtering.kalman.Kalman...
KalmanObservable_2228659093912
True
0.423918
0.0
0.433249
0.000188
0.000188
-0.009331
0.000188
0.433249
0.000188
0.433249
0.000188
None
3.139332
[[1.0]]
974
0.973
KalmanFilter_2228659095872
<class 'thalesians.tsa.filtering.kalman.Kalman...
KalmanObservable_2228659093912
True
0.435187
0.0
0.423918
0.000180
0.000180
0.011269
0.000180
0.423918
0.000180
0.423918
0.000180
None
3.039740
[[1.0]]
975
0.974
KalmanFilter_2228659095872
<class 'thalesians.tsa.filtering.kalman.Kalman...
KalmanObservable_2228659093912
True
0.426206
0.0
0.435187
0.000189
0.000189
-0.008981
0.000189
0.435187
0.000189
0.435187
0.000189
None
3.153815
[[1.0]]
976
0.975
KalmanFilter_2228659095872
<class 'thalesians.tsa.filtering.kalman.Kalman...
KalmanObservable_2228659093912
True
0.420193
0.0
0.426206
0.000182
0.000182
-0.006014
0.000182
0.426206
0.000182
0.426206
0.000182
None
3.288031
[[1.0]]
977
0.976
KalmanFilter_2228659095872
<class 'thalesians.tsa.filtering.kalman.Kalman...
KalmanObservable_2228659093912
True
0.395085
0.0
0.420193
0.000177
0.000177
-0.025108
0.000177
0.420193
0.000177
0.420193
0.000177
None
1.617442
[[1.0]]
978
0.977
KalmanFilter_2228659095872
<class 'thalesians.tsa.filtering.kalman.Kalman...
KalmanObservable_2228659093912
True
0.389434
0.0
0.395085
0.000156
0.000156
-0.005651
0.000156
0.395085
0.000156
0.395085
0.000156
None
3.361104
[[1.0]]
979
0.978
KalmanFilter_2228659095872
<class 'thalesians.tsa.filtering.kalman.Kalman...
KalmanObservable_2228659093912
True
0.359584
0.0
0.389434
0.000152
0.000152
-0.029850
0.000152
0.389434
0.000152
0.389434
0.000152
None
0.541623
[[1.0]]
980
0.979
KalmanFilter_2228659095872
<class 'thalesians.tsa.filtering.kalman.Kalman...
KalmanObservable_2228659093912
True
0.341573
0.0
0.359584
0.000129
0.000129
-0.018011
0.000129
0.359584
0.000129
0.359584
0.000129
None
2.303750
[[1.0]]
981
0.980
KalmanFilter_2228659095872
<class 'thalesians.tsa.filtering.kalman.Kalman...
KalmanObservable_2228659093912
True
0.349787
0.0
0.341573
0.000117
0.000117
0.008214
0.000117
0.341573
0.000117
0.341573
0.000117
None
3.319911
[[1.0]]
982
0.981
KalmanFilter_2228659095872
<class 'thalesians.tsa.filtering.kalman.Kalman...
KalmanObservable_2228659093912
True
0.358479
0.0
0.349787
0.000122
0.000122
0.008692
0.000122
0.349787
0.000122
0.349787
0.000122
None
3.276534
[[1.0]]
983
0.982
KalmanFilter_2228659095872
<class 'thalesians.tsa.filtering.kalman.Kalman...
KalmanObservable_2228659093912
True
0.363302
0.0
0.358479
0.000129
0.000129
0.004823
0.000129
0.358479
0.000129
0.358479
0.000129
None
3.470113
[[1.0]]
984
0.983
KalmanFilter_2228659095872
<class 'thalesians.tsa.filtering.kalman.Kalman...
KalmanObservable_2228659093912
True
0.352193
0.0
0.363302
0.000132
0.000132
-0.011109
0.000132
0.363302
0.000132
0.363302
0.000132
None
3.079923
[[1.0]]
985
0.984
KalmanFilter_2228659095872
<class 'thalesians.tsa.filtering.kalman.Kalman...
KalmanObservable_2228659093912
True
0.351661
0.0
0.352193
0.000124
0.000124
-0.000531
0.000124
0.352193
0.000124
0.352193
0.000124
None
3.577128
[[1.0]]
986
0.985
KalmanFilter_2228659095872
<class 'thalesians.tsa.filtering.kalman.Kalman...
KalmanObservable_2228659093912
True
0.351621
0.0
0.351661
0.000124
0.000124
-0.000040
0.000124
0.351661
0.000124
0.351661
0.000124
None
3.579769
[[1.0]]
987
0.986
KalmanFilter_2228659095872
<class 'thalesians.tsa.filtering.kalman.Kalman...
KalmanObservable_2228659093912
True
0.338741
0.0
0.351621
0.000124
0.000124
-0.012880
0.000124
0.351621
0.000124
0.351621
0.000124
None
2.909321
[[1.0]]
988
0.987
KalmanFilter_2228659095872
<class 'thalesians.tsa.filtering.kalman.Kalman...
KalmanObservable_2228659093912
True
0.354845
0.0
0.338741
0.000115
0.000115
0.016104
0.000115
0.338741
0.000115
0.338741
0.000115
None
2.487670
[[0.9999999999999999]]
989
0.988
KalmanFilter_2228659095872
<class 'thalesians.tsa.filtering.kalman.Kalman...
KalmanObservable_2228659093912
True
0.364690
0.0
0.354845
0.000126
0.000126
0.009845
0.000126
0.354845
0.000126
0.354845
0.000126
None
3.186072
[[1.0]]
990
0.989
KalmanFilter_2228659095872
<class 'thalesians.tsa.filtering.kalman.Kalman...
KalmanObservable_2228659093912
True
0.362142
0.0
0.364690
0.000133
0.000133
-0.002548
0.000133
0.364690
0.000133
0.364690
0.000133
None
3.518995
[[1.0]]
991
0.990
KalmanFilter_2228659095872
<class 'thalesians.tsa.filtering.kalman.Kalman...
KalmanObservable_2228659093912
True
0.362450
0.0
0.362142
0.000131
0.000131
0.000308
0.000131
0.362142
0.000131
0.362142
0.000131
None
3.550046
[[1.0]]
992
0.991
KalmanFilter_2228659095872
<class 'thalesians.tsa.filtering.kalman.Kalman...
KalmanObservable_2228659093912
True
0.364838
0.0
0.362450
0.000131
0.000131
0.002388
0.000131
0.362450
0.000131
0.362450
0.000131
None
3.527857
[[1.0]]
993
0.992
KalmanFilter_2228659095872
<class 'thalesians.tsa.filtering.kalman.Kalman...
KalmanObservable_2228659093912
True
0.341283
0.0
0.364838
0.000133
0.000133
-0.023556
0.000133
0.364838
0.000133
0.364838
0.000133
None
1.459691
[[1.0]]
994
0.993
KalmanFilter_2228659095872
<class 'thalesians.tsa.filtering.kalman.Kalman...
KalmanObservable_2228659093912
True
0.338615
0.0
0.341283
0.000117
0.000117
-0.002668
0.000117
0.341283
0.000117
0.341283
0.000117
None
3.579200
[[1.0]]
995
0.994
KalmanFilter_2228659095872
<class 'thalesians.tsa.filtering.kalman.Kalman...
KalmanObservable_2228659093912
True
0.331312
0.0
0.338615
0.000115
0.000115
-0.007303
0.000115
0.338615
0.000115
0.338615
0.000115
None
3.385146
[[1.0]]
996
0.995
KalmanFilter_2228659095872
<class 'thalesians.tsa.filtering.kalman.Kalman...
KalmanObservable_2228659093912
True
0.320818
0.0
0.331312
0.000110
0.000110
-0.010494
0.000110
0.331312
0.000110
0.331312
0.000110
None
3.138012
[[0.9999999999999999]]
997
0.996
KalmanFilter_2228659095872
<class 'thalesians.tsa.filtering.kalman.Kalman...
KalmanObservable_2228659093912
True
0.317967
0.0
0.320818
0.000103
0.000103
-0.002852
0.000103
0.320818
0.000103
0.320818
0.000103
None
3.632080
[[1.0]]
998
0.997
KalmanFilter_2228659095872
<class 'thalesians.tsa.filtering.kalman.Kalman...
KalmanObservable_2228659093912
True
0.336042
0.0
0.317967
0.000101
0.000101
0.018076
0.000101
0.317967
0.000101
0.317967
0.000101
None
2.065468
[[1.0]]
999
0.998
KalmanFilter_2228659095872
<class 'thalesians.tsa.filtering.kalman.Kalman...
KalmanObservable_2228659093912
True
0.342852
0.0
0.336042
0.000113
0.000113
0.006810
0.000113
0.336042
0.000113
0.336042
0.000113
None
3.419970
[[1.0]]
1000
0.999
KalmanFilter_2228659095872
<class 'thalesians.tsa.filtering.kalman.Kalman...
KalmanObservable_2228659093912
True
0.336660
0.0
0.342852
0.000118
0.000118
-0.006193
0.000118
0.342852
0.000118
0.342852
0.000118
None
3.442104
[[0.9999999999999999]]
1001 rows × 19 columns
In [9]:
sp = visual.StatePlot(plot_obs_results=False)
sp.process_run_df(run_df.df)
sp.ax.set_ylim((0., .45));
In [10]:
pf = filtering.particle.ParticleFilter(t0, state_distr=N(mean=x0, cov=2.5), process=X)
In [11]:
observable = pf.create_observable(particle.ParticleFilterObsModel.create(1.), X)
In [12]:
pf.predict(0.0001)
In [13]:
pf.mean
Out[13]:
array([0.41408505])
In [14]:
pf.var
Out[14]:
array([2.48376226])
In [15]:
pf.time
Out[15]:
0.0001
Content source: thalesians/tsa
Similar notebooks: