Hi! I’m looking for a library that will let me perform particle filtering for a generative model of a markov process, similar to the incredible pomp
in R:
https://kingaa.github.io/pomp/
or particles in Python.
Basically, I want to specify some sort of stochastic generator f such that:
x_t = f(x_{t-1})
and some sort of measurement model for my data y_t
:
y_t \sim \operatorname{Binomal}(x_t, p)
and then do something like:
particle_filter(generator, measurement, particles = 1000)
or similar. Maybe Ideally it would work with the SciML syntax for the process model f(x_{t-1}), so something like:
# from julia epi-recipes
function sir_markov!(du,u,p,t)
(S,I,R) = u
(β,c,γ,δt) = p
N = S+I+R
ifrac = rate_to_proportion(β*c*I/N,δt)
rfrac = rate_to_proportion(γ,δt)
infection=rand(Binomial(S,ifrac))
recovery=rand(Binomial(I,rfrac))
@inbounds begin
du[1] = S-infection
du[2] = I+infection-recovery
du[3] = R+recovery
end
nothing
end;
Just so the interface is standardized and I don’t run into a giant headache of uninformative stacktraces trying to write a model that the solver will accept.
The lay of the land:
I’ve taken a quick look at the packages that seem like good candidates, but I’m not sure what the best option is.
-
ParticleFilters.jl: is a subpackage of
POMDPs.jl
. This looks like it might be the best candidate, but I’m not sure if there’s a more focused standalone package I’m missing. Most of the documentation here is in the main package, and relates specifically to decision processes, which I’m not familiar with. I get the sense that this is at least a little bit of an internal subpackage for the mainPOMDPs.jl
interface. -
LowLevelParticleFilters.jl Also looks interesting, but maybe a bit more involved to set up.
-
GenParticleFilters.jl Part of Gen.
-
AdvancedPS.jl Part of Turing? Seems a little WIP, and perhaps only really used for internal stuff.
-
SequentialMonteCarlo.jl
-
SMC.jl (this one)
I’m sure there are more that I’m missing. I’m a bit of a SMC noob, so if anyone can fill me in on the current best package for doing what I’m trying to do, I would find it very helpful!