Skip to content
Snippets Groups Projects
proposals.md 881 B
Newer Older
Luca Lenz's avatar
Luca Lenz committed
# Proposal generators

## List of built-in proposals

```@docs
StaticProposal
```

```@docs
RandomWalk
```

```@docs
TransformedProposal
```

```@docs
StackedProposal
```

```@docs
ComponentwiseProposal
```

## Custom Proposal generator

To define a custom proposal inherit from the abstract type 
```julia
struct MyProposal <: AbstractProposal{issymmetric::Bool}
    # ... 
end 
```

```@docs
propose
```

Implement the sampling methods 
- initialization x₀ ~ p₀(⋅) by `x₀ = propose(p)`  
- and transition y ~ q(⋅|x) by `y  = propose(p, x)`

```julia
propose(rng::AbstractRNG, p::MyProposal) = ...
propose(rng::AbstractRNG, p::MyProposal, x) = ...
```

For symmetric proposals `q(x|y) = q(y|x)` and the likelihood ratio can be neglected. 
For asymmetric proposals also implement method for calculating  q(y|x)  
```julia
logpdf(p::AbstractProposal{false},x,y) = ...
```