In [1]:
push!(LOAD_PATH, ".")


Out[1]:
3-element Array{ByteString,1}:
 "/Users/farr/Documents/code/julia/usr/local/share/julia/site/v0.4"
 "/Users/farr/Documents/code/julia/usr/share/julia/site/v0.4"      
 "."                                                               

In [2]:
using DataFrames
using Gadfly
using Kalman
using Base.Test:@test_approx_eq_eps

Generate some non-uniformly spaced times, and some observational errors:


In [3]:
ts = collect(1:3000) + 0.5*rand(3000) - 0.25
dys = 0.1 + 0.1*rand(3000)
nothing

In [4]:
dt = minimum(diff(ts))
T = (ts[end]-ts[1])
nothing

In [5]:
function randtscale(dt, T)
    exp(log(dt) + rand()*log(T/dt)) 
end


Out[5]:
randtscale (generic function with 1 method)

In [6]:
mu = cbrt(pi)
sigma = float(pi)
x = -randtscale(dt, T)
y = randtscale(dt, T)
arroots = [-1.0/randtscale(dt,T), 1.0/(x+1im*y), 1.0/(x-1im*y)]
x = randtscale(dt,T)
y = randtscale(dt,T)
maroots = [1.0/(-x+1im*y), 1.0/(-x-1im*y)]
nothing

In [7]:
filt = Kalman.CARMAKalmanFilter(mu, sigma, arroots, maroots)
sfilt = Kalman.CARMASqrtKalmanFilter(mu, sigma, arroots, maroots)
nothing

In [8]:
ys = Kalman.carmagenerate(ts, dys, mu, sigma, arroots, maroots)
plot(x=ts, y=ys, Geom.line)


Out[8]:
x -5×10³ -4×10³ -3×10³ -2×10³ -1×10³ 0 1×10³ 2×10³ 3×10³ 4×10³ 5×10³ 6×10³ 7×10³ 8×10³ 9×10³ -4.0×10³ -3.8×10³ -3.6×10³ -3.4×10³ -3.2×10³ -3.0×10³ -2.8×10³ -2.6×10³ -2.4×10³ -2.2×10³ -2.0×10³ -1.8×10³ -1.6×10³ -1.4×10³ -1.2×10³ -1.0×10³ -8.0×10² -6.0×10² -4.0×10² -2.0×10² 0 2.0×10² 4.0×10² 6.0×10² 8.0×10² 1.0×10³ 1.2×10³ 1.4×10³ 1.6×10³ 1.8×10³ 2.0×10³ 2.2×10³ 2.4×10³ 2.6×10³ 2.8×10³ 3.0×10³ 3.2×10³ 3.4×10³ 3.6×10³ 3.8×10³ 4.0×10³ 4.2×10³ 4.4×10³ 4.6×10³ 4.8×10³ 5.0×10³ 5.2×10³ 5.4×10³ 5.6×10³ 5.8×10³ 6.0×10³ 6.2×10³ 6.4×10³ 6.6×10³ 6.8×10³ 7.0×10³ 7.2×10³ 7.4×10³ 7.6×10³ 7.8×10³ 8.0×10³ -5×10³ 0 5×10³ 1×10⁴ -4.0×10³ -3.5×10³ -3.0×10³ -2.5×10³ -2.0×10³ -1.5×10³ -1.0×10³ -5.0×10² 0 5.0×10² 1.0×10³ 1.5×10³ 2.0×10³ 2.5×10³ 3.0×10³ 3.5×10³ 4.0×10³ 4.5×10³ 5.0×10³ 5.5×10³ 6.0×10³ 6.5×10³ 7.0×10³ 7.5×10³ 8.0×10³ -40 -35 -30 -25 -20 -15 -10 -5 0 5 10 15 20 25 30 35 40 45 -35 -34 -33 -32 -31 -30 -29 -28 -27 -26 -25 -24 -23 -22 -21 -20 -19 -18 -17 -16 -15 -14 -13 -12 -11 -10 -9 -8 -7 -6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 -40 -20 0 20 40 -36 -34 -32 -30 -28 -26 -24 -22 -20 -18 -16 -14 -12 -10 -8 -6 -4 -2 0 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 y

Let's look at the equivalent generated from the filter (these won't match exactly, of course, but they will look similar, hopefully):


In [15]:
ysg = Kalman.generate(filt, ts, dys)
println("Mean of ysg = $(mean(ysg)), mu = $mu")
println("Std of ysg = $(std(ysg)), sigma = $sigma")
plot(x=ts, y=ysg, Geom.line)


Mean of ysg = 1.132875883516617, mu = 1.4645918875615231
Out[15]:
x -5×10³ -4×10³ -3×10³ -2×10³ -1×10³ 0 1×10³ 2×10³ 3×10³ 4×10³ 5×10³ 6×10³ 7×10³ 8×10³ 9×10³ -4.0×10³ -3.8×10³ -3.6×10³ -3.4×10³ -3.2×10³ -3.0×10³ -2.8×10³ -2.6×10³ -2.4×10³ -2.2×10³ -2.0×10³ -1.8×10³ -1.6×10³ -1.4×10³ -1.2×10³ -1.0×10³ -8.0×10² -6.0×10² -4.0×10² -2.0×10² 0 2.0×10² 4.0×10² 6.0×10² 8.0×10² 1.0×10³ 1.2×10³ 1.4×10³ 1.6×10³ 1.8×10³ 2.0×10³ 2.2×10³ 2.4×10³ 2.6×10³ 2.8×10³ 3.0×10³ 3.2×10³ 3.4×10³ 3.6×10³ 3.8×10³ 4.0×10³ 4.2×10³ 4.4×10³ 4.6×10³ 4.8×10³ 5.0×10³ 5.2×10³ 5.4×10³ 5.6×10³ 5.8×10³ 6.0×10³ 6.2×10³ 6.4×10³ 6.6×10³ 6.8×10³ 7.0×10³ 7.2×10³ 7.4×10³ 7.6×10³ 7.8×10³ 8.0×10³ -5×10³ 0 5×10³ 1×10⁴ -4.0×10³ -3.5×10³ -3.0×10³ -2.5×10³ -2.0×10³ -1.5×10³ -1.0×10³ -5.0×10² 0 5.0×10² 1.0×10³ 1.5×10³ 2.0×10³ 2.5×10³ 3.0×10³ 3.5×10³ 4.0×10³ 4.5×10³ 5.0×10³ 5.5×10³ 6.0×10³ 6.5×10³ 7.0×10³ 7.5×10³ 8.0×10³ -40 -35 -30 -25 -20 -15 -10 -5 0 5 10 15 20 25 30 35 40 45 -35 -34 -33 -32 -31 -30 -29 -28 -27 -26 -25 -24 -23 -22 -21 -20 -19 -18 -17 -16 -15 -14 -13 -12 -11 -10 -9 -8 -7 -6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 -40 -20 0 20 40 -36 -34 -32 -30 -28 -26 -24 -22 -20 -18 -16 -14 -12 -10 -8 -6 -4 -2 0 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 y
Std of ysg = 3.4281876420165345, sigma = 3.141592653589793

In [9]:
Kalman.raw_carma_log_likelihood(ts, ys, dys, mu, sigma, arroots, maroots)


Out[9]:
1448.2724244632764

In [10]:
Kalman.log_likelihood(sfilt, ts, ys, dys)


Out[10]:
1448.2724244632573

In [11]:
Kalman.log_likelihood(filt, ts, ys, dys)


Out[11]:
1448.2724244632932

In [12]:
@time for i in 1:1000; Kalman.log_likelihood(filt, ts, ys, dys) end


  2.028846 seconds (3.00 k allocations: 328.125 KB)

In [13]:
Profile.clear()
@profile for i in 1:1000; Kalman.log_likelihood(filt, ts, ys, dys) end
Profile.print()


4    complex.jl; /; line: 194
1    complex.jl; exp; line: 369
1492 task.jl; anonymous; line: 447
 1492 .../IJulia/src/IJulia.jl; eventloop; line: 141
  1492 ...rc/execute_request.jl; execute_request_0x535c5df2; line: 177
   1492 loading.jl; include_string; line: 266
    1    ./inference.jl; typeinf_ext; line: 1283
     1 ./inference.jl; typeinf; line: 1339
      1 ./inference.jl; typeinf_uncached; line: 1622
       1 ./inference.jl; abstract_eval; line: 961
        1 ./inference.jl; abstract_eval_call; line: 934
         1 ./inference.jl; abstract_call; line: 879
          1 ./inference.jl; abstract_call_gf; line: 737
           1 ./inference.jl; typeinf; line: 1289
            1 ./inference.jl; typeinf; line: 1339
             1 ./inference.jl; typeinf_uncached; line: 1549
              1 ./inference.jl; abstract_interpret; line: 1110
               1 ./inference.jl; abstract_eval; line: 961
                1 ./inference.jl; abstract_eval_call; line: 934
                 1 ./inference.jl; abstract_call; line: 896
                  1 ./inference.jl; abstract_call; line: 879
                   1 ./inference.jl; abstract_call_gf; line: 676
                    1 ./reflection.jl; _methods; line: 148
                     1 ./reflection.jl; _methods; line: 172
                      1 ./reflection.jl; _methods; line: 172
                       1 ./reflection.jl; _methods; line: 172
                        1 ./reflection.jl; _methods; line: 155
    1491 In[13]; anonymous; line: 2
     2   ...lters/code/Kalman.jl; log_likelihood; line: 351
      1 ...lters/code/Kalman.jl; reset!; line: 129
       1 essentials.jl; call; line: 200
      1 ...lters/code/Kalman.jl; reset!; line: 130
       1 array.jl; copy; line: 100
     135 ...lters/code/Kalman.jl; log_likelihood; line: 353
      9  ...lters/code/Kalman.jl; predict; line: 308
      21 ...lters/code/Kalman.jl; predict; line: 312
      4  ...lters/code/Kalman.jl; predict; line: 316
      5  ...lters/code/Kalman.jl; predict; line: 317
      92 ...lters/code/Kalman.jl; predict; line: 318
      1  ...lters/code/Kalman.jl; predict; line: 322
     8   ...lters/code/Kalman.jl; log_likelihood; line: 360
     4   ...lters/code/Kalman.jl; log_likelihood; line: 361
     57  ...lters/code/Kalman.jl; log_likelihood; line: 363
     15  ...lters/code/Kalman.jl; log_likelihood; line: 364
     732 ...lters/code/Kalman.jl; log_likelihood; line: 366
      10  ...ters/code/Kalman.jl; observe!; line: 245
      1   ...ters/code/Kalman.jl; observe!; line: 249
      3   ...ters/code/Kalman.jl; observe!; line: 260
      105 ...ters/code/Kalman.jl; observe!; line: 262
      47  ...ters/code/Kalman.jl; observe!; line: 265
       1  complex.jl; /; line: 194
       4  complex.jl; /; line: 197
       6  complex.jl; /; line: 198
       1  complex.jl; /; line: 204
       2  complex.jl; /; line: 205
       1  complex.jl; /; line: 207
       25 complex.jl; /; line: 208
        1 complex.jl; robust_cdiv2; line: 219
        3 complex.jl; robust_cdiv2; line: 221
       3  complex.jl; /; line: 209
      2   ...ters/code/Kalman.jl; observe!; line: 267
      9   ...ters/code/Kalman.jl; observe!; line: 268
      7   ...ters/code/Kalman.jl; observe!; line: 269
      96  ...ters/code/Kalman.jl; observe!; line: 271
      87  ...ters/code/Kalman.jl; observe!; line: 272
      3   ...ters/code/Kalman.jl; observe!; line: 276
      132 ...ters/code/Kalman.jl; observe!; line: 278
      1   ...ters/code/Kalman.jl; observe!; line: 291
      24  ...ters/code/Kalman.jl; observe!; line: 292
      8   ...ters/code/Kalman.jl; observe!; line: 295
      30  ...ters/code/Kalman.jl; observe!; line: 297
      126 ...ters/code/Kalman.jl; observe!; line: 299
      36  ...ters/code/Kalman.jl; observe!; line: 300
      2   ...ters/code/Kalman.jl; observe!; line: 304
     1   ...lters/code/Kalman.jl; log_likelihood; line: 368
     536 ...lters/code/Kalman.jl; log_likelihood; line: 369
      1   ...ters/code/Kalman.jl; advance!; line: 217
      6   ...ters/code/Kalman.jl; advance!; line: 219
      220 ...ters/code/Kalman.jl; advance!; line: 220
       6   complex.jl; exp; line: 369
       1   complex.jl; exp; line: 371
       1   complex.jl; exp; line: 372
       1   complex.jl; exp; line: 374
       1   complex.jl; exp; line: 378
       125 complex.jl; exp; line: 381
       3   complex.jl; exp; line: 382
       68  complex.jl; exp; line: 385
      3   ...ters/code/Kalman.jl; advance!; line: 222
      33  ...ters/code/Kalman.jl; advance!; line: 225
      7   ...ters/code/Kalman.jl; advance!; line: 228
      186 ...ters/code/Kalman.jl; advance!; line: 230
      3   ...ters/code/Kalman.jl; advance!; line: 234
      11  ...ters/code/Kalman.jl; advance!; line: 235
      46  ...ters/code/Kalman.jl; advance!; line: 237
      1   ...ters/code/Kalman.jl; advance!; line: 241
     1   ...lters/code/Kalman.jl; predict; line: 322

In [ ]: