In [1]:
push!(LOAD_PATH, ".")
Out[1]:
In [2]:
using Colors
using Gadfly
using Kalman
using Transit
Create a filter with mean 1, variance 25, and timescale 3.
In [3]:
filt = Kalman.AR1KalmanFilter(1.0, 25.0, 3.0)
Out[3]:
In [4]:
ts = cumsum(rand(1000))
dys = 0.1 + 0*ts
ys = Kalman.generate(filt, ts, dys)
wys = Kalman.whiten(filt, ts, ys, dys)
plot(layer(x=ts, y=ys, Geom.line, Theme(default_color=colorant"red")),
layer(x=ts, y=Kalman.whiten(filt, ts, ys, dys), Geom.line, Theme(default_color=colorant"blue")))
Out[4]:
Let's check that the means and standard deviations work out:
In [5]:
print("Raw timeseries mean = $(mean(ys)), s.d. = $(std(ys))\n")
print("Whitened timeseries mean = $(mean(wys)), s.d. = $(std(wys))")
Let's check the log-likelihood:
In [6]:
function rawcov(ts, dys, var, tau)
n = size(ts, 1)
sigma = zeros(n,n)
for i in 1:n
for j in i:n
sigma[i,j] = var*exp(-abs(ts[i]-ts[j])/tau)
if j == i
sigma[i,j] += dys[i]*dys[i]
else
sigma[j,i] = sigma[i,j]
end
end
end
sigma
end
function rawloglik(ts, ys, dys, mu, var, tau)
sigma = rawcov(ts, dys, var, tau)
eigs = eigvals(sigma)
n = size(ts, 1)
-0.5*n*log(2.0*pi) - 0.5*sum(log(abs(eigs))) - 0.5*dot(ys-mu, sigma\(ys-mu))
end
Out[6]:
In [7]:
println("Raw log likelihood = $(rawloglik(ts, ys, dys, 1.0, 25.0, 3.0))")
println("Kalman log likelihood = $(Kalman.log_likelihood(filt, ts, ys, dys))")
Woohoo!
First, the parameters of our transits:
In [16]:
dt = 30.0/60.0/24.0 # dt in days
ts = collect(0:dt:60)
Tdur = 0.5 # 12 hour transits
P = 15 + rand() # 15 +/- 1 day period
T0 = 14*rand() # Random start phase
sigma_wn = 0.01
sigma_ar = 0.10
depth = sigma_wn*2
dflux = sigma_wn + 0.0*ts
tau_ar = P
mu_ar = 0.0
trans = Transit.transit_lightcurve(ts, P, T0, Tdur, depth)
println("Transit SNR = $(Transit.snr(trans, trans, sigma_wn))")
plot(x=ts, y=trans, Geom.line)
Out[16]:
In [17]:
noise = sigma_wn * randn(size(ts,1))
flux = trans + noise
cs = distinguishable_colors(2)
println("Transit SNR = $(Transit.snr(flux,trans,std(flux)))")
println("BLS SNR = $(Transit.bls_snr(flux,trans))")
println("New SNR = $(Transit.new_snr(flux, trans))")
plot(layer(x=ts, y=flux, Geom.line, Theme(default_color=RGBA(cs[1],0.2))),
layer(x=ts,y=trans,Geom.line,Theme(default_color=cs[2])))
Out[17]:
In [18]:
filt = Kalman.AR1KalmanFilter(0.0, sigma_ar^2, dt)
noise = Kalman.generate(filt, ts, dflux)
flux = trans + noise
cs = distinguishable_colors(2)
println("Transit SNR = $(Transit.snr(flux,trans,std(flux)))")
println("BLS SNR = $(Transit.bls_snr(flux,trans))")
println("New SNR = $(Transit.new_snr(flux, trans))")
plot(layer(x=ts, y=flux, Geom.line, Theme(default_color=RGBA(cs[1],0.2))),
layer(x=ts,y=trans,Geom.line,Theme(default_color=cs[2])))
Out[18]:
And if we whiten...?
In [19]:
filt = Kalman.AR1KalmanFilter(1.0, sigma_ar^2, dt)
wflux = Kalman.whiten(filt, ts, flux, dflux)
wtrans = Kalman.whiten(filt, ts, trans, dflux)
println("Whitened SNR = $(Transit.snr(wflux, wtrans, 1.0))")
plot(layer(x=ts, y=wflux, Geom.line, Theme(default_color=RGBA(cs[1], 0.2))),
layer(x=ts, y=wtrans, Geom.line, Theme(default_color=cs[2])))
Out[19]:
In [20]:
filt = Kalman.AR1KalmanFilter(0.0, sigma_ar^2, Tdur)
noise = Kalman.generate(filt, ts, dflux)
flux = trans + noise
println("Raw SNR = $(Transit.snr(flux, trans, std(flux)))")
println("BLS SNR = $(Transit.bls_snr(flux, trans))")
println("New SNR = $(Transit.new_snr(flux, trans))")
plot(layer(x=ts, y=flux, Geom.line, Theme(default_color=RGBA(cs[1], 0.2))),
layer(x=ts, y=trans, Geom.line, Theme(default_color=cs[2])))
Out[20]:
...and if we whiten?
In [21]:
filt = Kalman.AR1KalmanFilter(1.0, sigma_ar^2, Tdur)
wflux = Kalman.whiten(filt, ts, flux, dflux)
wtrans = Kalman.whiten(filt, ts, trans, dflux)
println("Whitened SNR = $(Transit.snr(wflux, wtrans, 1.0))")
plot(layer(x=ts, y=wflux, Geom.line, Theme(default_color=RGBA(cs[1],0.2))),
layer(x=ts, y=wtrans, Geom.line, Theme(default_color=cs[2])))
Out[21]:
In [22]:
filt = Kalman.AR1KalmanFilter(0.0, sigma_ar^2, P)
noise = Kalman.generate(filt, ts, dflux)
flux = trans + noise
println("Raw SNR = $(Transit.snr(flux, trans, std(flux)))")
println("BLS SNR = $(Transit.bls_snr(flux, trans))")
println("New SNR = $(Transit.new_snr(flux, trans))")
plot(layer(x=ts, y=flux, Geom.line, Theme(default_color=RGBA(cs[1], 0.2))),
layer(x=ts, y=trans, Geom.line, Theme(default_color=cs[2])))
Out[22]:
In [23]:
filt = Kalman.AR1KalmanFilter(1.0, sigma_ar^2, P)
wflux = Kalman.whiten(filt, ts, flux, dflux)
wtrans = Kalman.whiten(filt, ts, trans, dflux)
println("Whitened SNR = $(Transit.snr(wflux, wtrans, 1.0))")
plot(layer(x=ts, y=wflux, Geom.line, Theme(default_color=RGBA(cs[1], 0.2))),
layer(x=ts, y=wtrans, Geom.line, Theme(default_color=cs[2])))
Out[23]:
In [26]:
filt = Kalman.AR1KalmanFilter(0.0, sigma_ar^2, ts[end]-ts[1])
noise = Kalman.generate(filt, ts, dflux)
flux = trans + noise
println("Raw SNR = $(Transit.snr(flux, trans, std(flux)))")
println("BLS SNR = $(Transit.bls_snr(flux, trans))")
println("New SNR = $(Transit.new_snr(flux, trans))")
plot(layer(x=ts, y=flux, Geom.line, Theme(default_color=RGBA(cs[1], 0.2))),
layer(x=ts, y=trans, Geom.line, Theme(default_color=cs[2])))
Out[26]:
In [27]:
filt = Kalman.AR1KalmanFilter(1.0, sigma_ar^2, P)
wflux = Kalman.whiten(filt, ts, flux, dflux)
wtrans = Kalman.whiten(filt, ts, trans, dflux)
println("Whitened SNR = $(Transit.snr(wflux, wtrans, 1.0))")
plot(layer(x=ts, y=wflux, Geom.line, Theme(default_color=RGBA(cs[1], 0.2))),
layer(x=ts, y=wtrans, Geom.line, Theme(default_color=cs[2])))
Out[27]:
In [ ]: