Returns the (closed-form) distribution of \(Y = A X + b + \epsilon\) when \(X \sim g\) is a Gaussian mixture and \(\epsilon \sim \mathcal{N}(0, R)\) is independent additive Gaussian noise.
Arguments
Value
A gmm in R^m with the same number of components and the
same weights as g.
Details
For each component k, the pushed-forward parameters are
$$\mu'_k = A \mu_k + b, \qquad \Sigma'_k = A \Sigma_k A^\top + R,$$
and the mixture weights are unchanged. This is the finite-mixture
analogue of a Kalman-style predict step.
The channel is required to be affine in x and the noise is
required to be Gaussian. Non-linear channels are not closed form and
are not silently approximated: push samples through the map instead
(rgmm() then the transform) and refit with fit_em_samples() when a
mixture of the image is needed.
See also
Other operators:
gmm_aggregate(),
gmm_convolve(),
gmm_counterfactual(),
gmm_filter(),
gmm_intervene(),
gmm_missing(),
gmm_mix(),
gmm_observe(),
gmm_product(),
gmm_reduce()
Examples
g <- gmm(weights = c(0.5, 0.5),
means = list(c(-1, 0), c(1, 0)),
covariances = list(diag(2), diag(2)))
A <- matrix(c(1, 0, 0, 1, 1, -1), nrow = 3L, byrow = TRUE)
gmm_affine(g, A, b = c(0, 0, 0), noise_cov = 0.01 * diag(3))
#> <affine(gmm)>: K = 2 components in p = 3 dimensions
#> [1] w = 0.5000, |mu| = 1.4142, tr(Sigma) = 4.0300
#> [2] w = 0.5000, |mu| = 1.4142, tr(Sigma) = 4.0300