diff --git a/src/Distributions/mixture.jl b/src/Distributions/mixture.jl index 931dafd..684f1ff 100644 --- a/src/Distributions/mixture.jl +++ b/src/Distributions/mixture.jl @@ -79,27 +79,27 @@ function rand(d::MixtureModel{Union{Univariate,Multivariate}, Continuous, Gibbs} end # 2 - pdf -function pdf(d::MixtureModel{Union{Univariate,Multivariate}, Continuous, Gibbs}, x::Float64, normint::Integrator) +function pdf(d::MixtureModel{Union{Univariate,Multivariate}, Continuous, Gibbs}, x::Float64, normint::GibbsIntegrator) p = probs(d) return sum(p_i * pdf(component(d, i), x, normint) for (i, p_i) in enumerate(p) if !iszero(p_i)) end # multiple samples of x -function pdf(d::MixtureModel{Union{Univariate,Multivariate}, Continuous, Gibbs}, xsamp::Vector{Float64}, normint::Integrator) +function pdf(d::MixtureModel{Union{Univariate,Multivariate}, Continuous, Gibbs}, xsamp::Vector{Float64}, normint::GibbsIntegrator) p = probs(d) return sum(p_i * updf.((component(d, i),), xsamp) ./ normconst(component(d, i), normint) for (i, p_i) in enumerate(p) if !iszero(p_i)) end # 3 - log unnormalized pdf -function logpdf(d::MixtureModel{Union{Univariate,Multivariate}, Continuous, Gibbs}, x::Float64, normint::Integrator) +function logpdf(d::MixtureModel{Union{Univariate,Multivariate}, Continuous, Gibbs}, x::Float64, normint::GibbsIntegrator) p = probs(d) lp = logsumexp(log(p_i) + logpdf(component(d, i), x, normint) for (i, p_i) in enumerate(p) if !iszero(p_i)) return lp end # multiple samples of x -function logpdf(d::MixtureModel{Union{Univariate,Multivariate}, Continuous, Gibbs}, xsamp::Vector{Float64}, normint::Integrator) +function logpdf(d::MixtureModel{Union{Univariate,Multivariate}, Continuous, Gibbs}, xsamp::Vector{Float64}, normint::GibbsIntegrator) p = probs(d) data = reduce(hcat, [log(p_i) .+ logupdf.((component(d, i),), xsamp) .- log(normconst(component(d, i), normint)) for (i, p_i) in enumerate(p) if !iszero(p_i)]) lp = logsumexp.([data[i,:] for i = 1:size(data,1)]) diff --git a/src/Integrators/importance_sampling.jl b/src/Integrators/importance_sampling.jl index 0e8db85..a3c9105 100644 --- a/src/Integrators/importance_sampling.jl +++ b/src/Integrators/importance_sampling.jl @@ -1,4 +1,4 @@ -abstract type ISIntegrator <: Integrator end +abstract type ISIntegrator <: GibbsIntegrator end """ struct ISMC <: ISIntegrator @@ -44,15 +44,15 @@ This method is implemented with the user providing samples from the biasing dist # Arguments - `g :: Distribution` : biasing distribution - `xsamp :: Vector` : fixed set of samples -- `normint :: Union{Integrator, Nothing}` : integrator for computing normalizing constant of biasing distribution (required for mixture models) +- `normint :: Union{GibbsIntegrator, Nothing}` : integrator for computing normalizing constant of biasing distribution (required for mixture models) """ mutable struct ISSamples <: ISIntegrator g :: Distribution xsamp :: Vector - normint :: Union{Integrator, Nothing} + normint :: Union{GibbsIntegrator, Nothing} - function ISSamples(g::MixtureModel, xsamp::Vector, normint::Integrator) + function ISSamples(g::MixtureModel, xsamp::Vector, normint::GibbsIntegrator) return new(g, xsamp, normint) end @@ -76,7 +76,7 @@ This method is implemented with the user providing samples from each component m - `n :: Int` : number of samples - `knl :: Kernel` : kernel function to compute mixture weights - `xsamp :: Vector` : Vector of sample sets from each component distribution -- `normint :: Integrator` : Integrator for the approximating the normalizing constant of each component distribution +- `normint :: GibbsIntegrator` : Integrator for the approximating the normalizing constant of each component distribution """ mutable struct ISMixSamples <: ISIntegrator @@ -85,14 +85,14 @@ mutable struct ISMixSamples <: ISIntegrator n :: Int knl :: Kernel xsamp :: Vector - normint :: Integrator + normint :: GibbsIntegrator - function ISMixSamples(g::MixtureModel, refs::Vector, n::Int, knl::Kernel, xsamp::Vector, normint::Integrator) + function ISMixSamples(g::MixtureModel, refs::Vector, n::Int, knl::Kernel, xsamp::Vector, normint::GibbsIntegrator) return new(g, refs, n, knl, xsamp, normint) end - function ISMixSamples(g::MixtureModel, n::Int, knl::Kernel, xsamp::Vector, normint::Integrator) + function ISMixSamples(g::MixtureModel, n::Int, knl::Kernel, xsamp::Vector, normint::GibbsIntegrator) d = new() d.g = g d.refs = [πg.θ for πg in g.components] diff --git a/src/Integrators/integrators.jl b/src/Integrators/integrators.jl index 2331a8d..d74b817 100644 --- a/src/Integrators/integrators.jl +++ b/src/Integrators/integrators.jl @@ -1,20 +1,31 @@ +abstract type Integrator end """ - Integrator + GibbsIntegrator - A struct of abstract type Integrator computes the expectation of a function h(x, θ) with respect to an invariant measure p(x, θ). + A struct of abstract type GibbsIntegrator computes the expectation of a function h(x, θ) with respect to the invariant measure p(x, θ). """ -abstract type Integrator end +abstract type GibbsIntegrator <: Integrator end + +""" + PathIntegrator + + A struct of abstract type PathIntegrator computes the expectation of a functional h with respect to the path measure P. +""" +abstract type PathIntegrator <: Integrator end include("quadrature.jl") include("monte_carlo.jl") include("importance_sampling.jl") +include("path_integrators.jl") + export - Integrator, + GibbsIntegrator, MCIntegrator, MonteCarlo, MCMC, MCSamples, + MCPaths, ISIntegrator, ISMC, ISMCMC, @@ -23,4 +34,8 @@ export QuadIntegrator, GaussQuadrature, gaussquad, - gaussquad_2D \ No newline at end of file + gaussquad_2D, + PathIntegrator, + RiemannIntegrator, + ItoIntegrator, + compute_integral \ No newline at end of file diff --git a/src/Integrators/monte_carlo.jl b/src/Integrators/monte_carlo.jl index ea44993..65ef5d7 100644 --- a/src/Integrators/monte_carlo.jl +++ b/src/Integrators/monte_carlo.jl @@ -1,4 +1,4 @@ -abstract type MCIntegrator <: Integrator end +abstract type MCIntegrator <: GibbsIntegrator end """ struct MonteCarlo <: MCIntegrator @@ -23,12 +23,12 @@ This method is implemented when the distribution cannot be analytically sampled. # Arguments - `n :: Int` : number of samples - `sampler :: Sampler` : type of sampler (see `Sampler`) -- `ρ0 :: Distribution` : prior distribution of the state +- `ρ0 :: Union{Distribution, Real, Vector{<:Real}}` : initial state or prior distribution of the state """ struct MCMC <: MCIntegrator n :: Int sampler :: Sampler - ρ0 :: Distribution + ρ0 :: Union{Distribution, Real, Vector{<:Real}} end diff --git a/src/Integrators/quadrature.jl b/src/Integrators/quadrature.jl index fe8a0be..809bf17 100644 --- a/src/Integrators/quadrature.jl +++ b/src/Integrators/quadrature.jl @@ -1,4 +1,4 @@ -abstract type QuadIntegrator <: Integrator end +abstract type QuadIntegrator <: GibbsIntegrator end """