We want: \[\pi(\theta|D) \propto \color{red}{p(D|\theta)}\pi(\theta)\]
We get: \[\pi_{ABC}(\theta|D) \propto \color{red}{\int I(\{d(y, D) \leq \varepsilon\})p(y|\theta)\operatorname{dy}}\pi(\theta) \approx \frac{1}{N} \sum_{i=1}^N\delta_{\theta^{(i)}}(\theta)\] with distance $d$, threshold $\varepsilon>0$, and summary statistics $s$
“To avoid assumptions of a normal likelihood we use [...] ABC”
“ABC does not use a likelihood”
Assume: Model $y\sim p(y|\theta)$ does not account for noise.
But: Measurements are noisy, $D\sim \pi(\bar y|y,\theta)$.
“ABC gives exact inference for the wrong model”
... namely the acceptance step induces (uniform) noise
Using the modified kernel with $c>\pi(D|y,\theta)$ $\forall y,\theta$, we sample from the true posterior \[\pi_\text{ABC}(D|\theta) = \pi(D|\theta) \propto \int\pi(D|y,\theta)p(y|\theta)\mathop{dy}\cdot\pi(\theta)\] assuming noisy data $D\sim\pi(\bar y|y,\theta)$.
Proof: Yep.
We temperate:
3. Accept with probability
$\left(\frac{\pi(D|y,\theta)}{c}\right)^{\color{red}{1/T_t}}$
with $c>\pi(D|y,\theta)$ $\forall y,\theta$, $T_0\gg 1$,
$T_{N_t} = 1$.
This way, we take importance samples from \[\pi_{\text{ABC},t}(\theta|D)\propto\int\pi(D|y,\theta)^{\color{red}{1/T_t}}p(y|\theta)\mathop{dy}\cdot\pi(\theta).\]
Introduces a bias if simulations with a higher density occur.
However, this can be overcome ...
For any $c_t>0$, we have target the correct distribution when we accept with probability $\min\left[\frac{\pi(D|y,\theta)}{c},1\right]^{1/T_t}$ and update the weights to: \[\tilde w := \color{red}{\frac{\left(\frac{\pi(D|y,\theta)}{c_t}\right)^{1/T_t}}{\min\left[\frac{\pi(D|y,\theta)}{c_t},1\right]^{1/T_t}}}\cdot\frac{\pi(\theta)}{g_t(\theta)}\]
Id | Description | Type | Noise model | Parameters | Data |
---|---|---|---|---|---|
M1 | Conversion reaction | ODE | Normal | 2 | 10 |
M2 | Conversion reaction | ODE | Laplace | 2 | 10 |
M3 | Hodgkin-Huxley neurons | SDE | Normal | 2 | 100 |
M4 | Gene expression | MJP | Poisson | 2 | 10 |
M5 | STAT5 dimerization | ODE | Normal | 11 | 48 |
M6 | Tumor spheroid growth | ABM | Normal | 7 | 30 |
# define problem
abc = pyabc.ABCSMC(model, prior,
acceptance_kernel,
temperature_scheme,
acceptor)
# pass data
abc.new(database, observation)
# run it
abc.run()