Notes on Ensemble Smoothers
- 1. August 2026
- #mathematics, #statistics
Ensemble smoother algorithms are used to approximate a posterior distribution. Given a prior over parameters, a forward model (e.g. a petroleum reservoir model) and real-world observations: what is the posterior over the parameters? Ensemble-based algorithms describe the posterior with a set of samples, and the most common use-case is when the forward model is black-box and expensive to evaluate.
The notes are organized as follows: first we examine the Gauss-linear case, where we can compute an analytical posterior in arbitrarily high dimensions. The equation for the Gaussian posterior is the starting point for all ensemble methods. We derive the Ensemble Smoother (ES)—an algorithm that retains some properties of the Gauss-linear case. Finally we examine EnIF, which is similar to ES but works with precision matrices rather than covariances, and leans on the statistical theory of high-dimensional estimation.
Introduction
The Ensemble Kalman Filter was introduced by Evensen (1994)9 and the Ensemble Smoother was introduced by Van Leeuwen and Evensen (1996)10. Four years later, in Burgers et al. (1998)11, it was shown that the original update equation was wrong—the covariance did not match in the Gauss-linear case.1
New methods were proposed to deal with non-linearity. One such variant is the Iterative Ensemble Smoother (IES) of Chen and Oliver (201212; 201313). The idea behind IES is to move towards the maximum of the posterior in several small steps instead of a single large one, like a reduced step length optimization method. Another variant is the Ensemble Smoother with Multiple Data Assimilation (ESMDA), proposed in Emerick and Reynolds (2013)14. It also makes several small steps, but shortens step length implicitly by increasing the covariance matrix of the observations. Either way, the core idea is that linearizing, taking a small step, re-linearizing, taking another step, etc. is better than one linearization followed by one large step.
In high dimensions with few samples, empirical correlations are mostly noise and very little signal. This phenomenon is called spurious correlations, and all the methods above suffer from it. Many procedures have been proposed to alleviate it, such as setting all correlations that are below \(3 / \sqrt{r}\) to zero (Vossepoel et al., 2025)15. Another idea is to look towards the statistics of high-dimensional models, see for instance Hastie et al. (2009, Ch. 18)16. This is what Lunde (2025)17 does in the Ensemble Information Filter (EnIF), which uses graph properties to estimate sparse precision matrices and high-dimensional regression to estimate a sparse linearization of the forward model.
The papers above can be a bit tough to read: notation can be a bit inconsistent, some proofs are not as detailed as I’d like, sometimes there is no code to look at, etc. That is why I have decided to write these notes; maybe they can help clear up some confusion. If nothing else, you’ll get a second perspective. You can find well-documented and production-ready Python code for many of these algorithms at the GitHub repository github.com/equinor/iterative_ensemble_smoother/.
The Gaussian posterior
With a Gaussian prior, a Gaussian noise model and a linear forward model, we’re in the happy Gauss-linear case where an analytical expression for the posterior can be derived. In this section we establish notation and illustrate several expressions for the posterior.
Let \(\boldsymbol{x} \in \R^m\) be a vector of parameters. The forward model is denoted as \(h: \R^m \to \R^n\), and applying it to the \(m\) parameters returns a vector of \(n\) responses \(\boldsymbol{y} \in \R^n\).
The observation vector \(\boldsymbol{d} \in \R^n\) is equal to the response plus a random noise component \(\boldsymbol{\epsilon}_d\), which is often called the observation noise or measurement noise. The full equation is then \(\boldsymbol{d} = h(\boldsymbol{x}) + \boldsymbol{\epsilon}_d\), where \(\boldsymbol{\epsilon}_d \sim \mathcal{N}(\boldsymbol{0}, \Sigma_{\epsilon})\).
Think for instance of a petroleum reservoir model. The parameters \(\boldsymbol{x}\) are uncertain static properties of the subsurface, e.g., porosity. The forward model \(h\) is a reservoir flow simulator. It solves the fluid flow equations over the grid and reports predicted production data \(\boldsymbol{y}\), for instance oil production at a well. A single evaluation of \(h\) may take hours of compute, and we only have access to its inputs and outputs. The match is never exact, so the real-world observation \(\boldsymbol{d}\) departs from the simulator response by a noise term \(\boldsymbol{\epsilon}_d\). The inverse problem, called history matching, is: given the observed production \(\boldsymbol{d}\), how can we update our knowledge of the parameters \(\boldsymbol{x}\)? Characterizing the posterior distribution of \(\boldsymbol{x}\) given \(\boldsymbol{d}\) is the subject of the rest of these notes.
Exact posterior distribution \(p(\boldsymbol{x} \mid \boldsymbol{d})\)
In this section we assume that the prior distribution over parameters \(p(\boldsymbol{x})\) is multivariate Gaussian, and that the forward model \(h\) is linear. Then \(\boldsymbol{d} = H \boldsymbol{x} + \boldsymbol{\epsilon}_d = \boldsymbol{y} + \boldsymbol{\epsilon}_d\), where \(H \in \R^{n \times m}\) is a matrix. The posterior distribution \(p(\boldsymbol{x} \mid \boldsymbol{d})\) is also multivariate Gaussian.
In words, we will answer “Suppose I have a prior belief over parameters \(p(\boldsymbol{x})\) and I have observed an observation \(\boldsymbol{d}\)—how can I update my prior to a posterior?”
Remark 1 (Response covariance). Recall from Petersen and Pedersen (2012, §6.2)18 that \(\operatorname{Cov}\left[A\boldsymbol{x}, B\boldsymbol{y}\right] = A \operatorname{Cov}\left[\boldsymbol{x}, \boldsymbol{y}\right] B^T\) when \(\boldsymbol{x}\) and \(\boldsymbol{y}\) are random variables. When both arguments are identical, we’ll use a shorthand notation: \(\operatorname{Cov}\left[\boldsymbol{x}\right] := \operatorname{Cov}\left[\boldsymbol{x}, \boldsymbol{x}\right] = \operatorname{Var}\left[\boldsymbol{x}\right]\). Similarly, when there is no ambiguity we’ll simply write \(\Sigma_x\) instead of \(\Sigma_{xx}\) for the covariance of \(\boldsymbol{x}\).
In both equations below we’ll use the fact that \(\boldsymbol{\epsilon}_d\) is independent of \(\boldsymbol{x}\). The covariance in \(\boldsymbol{d}\) is the covariance of \(\boldsymbol{x}\), propagated through the linear map \(H\), plus the covariance of the observation noise \(\boldsymbol{\epsilon}_d\).
Similarly, the cross-covariance can be expressed as:
Note also that \(\Sigma_{xy} = \operatorname{Cov}\left[ \boldsymbol{x}, \boldsymbol{y} \right] = \operatorname{Cov}\left[ \boldsymbol{x}, H\boldsymbol{x} \right] = \operatorname{Cov}\left[\boldsymbol{x}, \boldsymbol{x}\right] H^T = \Sigma_{xd}\).
Suppose the prior over the parameters \(\boldsymbol{x}\) and the observation \(\boldsymbol{d}\), conditioned on the parameters, are given by multivariate Gaussians:
Then the posterior distribution over parameters, conditioned on the response, is also a multivariate Gaussian \(p(\boldsymbol{x} \mid \boldsymbol{d}) = \mathcal{N} (\boldsymbol{\mu}_{x \mid d}, \Sigma_{x \mid d})\). The posterior mean and covariance are:
The equations above are well known, and can for instance be found in Bishop (2006, §2.3.3)19.2 In the equations above, the posterior mean \(\boldsymbol{\mu}_{x \mid d}\) is expressed in terms of precision matrices \(\Sigma_x^{-1}\) and \(\Sigma_\epsilon^{-1}\) rather than covariance matrices \(\Sigma_x\) and \(\Sigma_\epsilon\).
Remark 2 (Posterior covariance). We show the Schur complement form of the posterior covariance \(\Sigma_{x \mid d}\). Starting with equation \(\eqref{eqn:posterior_cov_precision}\), we first use the Woodbury identity, then the results from Remark 1:
The Kalman gain form is an alternative way to express the update equations above, and we’ll spend the rest of this section deriving it. It’s more commonly used in the Kalman filter literature, and the update is given by:
In the equation above, \(H \boldsymbol{\mu}_{x}\) is the predicted mean, \((\boldsymbol{d} - H \boldsymbol{\mu}_{x})\) is the innovation term and \(K\) is the Kalman gain. In words: the posterior equals the prior, plus a linear combination of the innovation (residuals).
We will now derive the Kalman update in equation \(\eqref{eqn:posterior_mean_kalman}\). The first step is to show that \(K = \Sigma_{x \mid d}H^T \Sigma_{\epsilon}^{-1}\). To see this, we start by assuming that both expression are equal:
We right-multiply both sides with \(\left( \Sigma_\epsilon + H \Sigma_x H^T \right)\), then left-multiply both sides with \(\Sigma_{x \mid d}^{-1}\) and finally expand both sides to show that they both equal \(H^T + H^T \Sigma_\epsilon^{-1} H \Sigma_x H^T\).3
The second step is to realize that, using Remark 2, we can write
With these two results in hand, we start with equation \(\eqref{eqn:posterior_mean_precision}\) and show that it can indeed be transformed into equation \(\eqref{eqn:posterior_mean_kalman}\). The update equation for the mean becomes
In summary then, the Kalman-style update equations are:
We have seen that there are different ways to express the update equations: the precision form of equation \(\eqref{eqn:posterior_cov_precision}\), the Schur form of Remark 2 and the Kalman form in equation \(\eqref{eqn:posterior_mean_kalman}\). Which one should we use? It depends on what we wish to show or prove, or how we want to structure our computations. For instance, the Ensemble Smoother—which we discuss next—uses a Kalman style update with covariances.
The Ensemble Smoother
The Ensemble Smoother (ES) describes the posterior with an ensemble of realizations (i.e., a set of samples) instead of \(\boldsymbol{\mu}_{x \mid d}\) and \(\Sigma_{x \mid d}\). First we draw \(r\) realizations \(\{\boldsymbol{x}_j\}_{j=1}^{r}\) from the prior distribution \(p(\boldsymbol{x})\). Then we propagate them through the forward model \(h\) and obtain \(\boldsymbol{y}_j = h(\boldsymbol{x}_j)\) for each realization \(j=1, \ldots, r\). Finally, we perform data assimilation; a Kalman-style update that transforms the prior ensemble to the posterior ensemble by conditioning on the observation.
The upside of ES is that we don’t need knowledge of the forward model \(h\) to compute a posterior; \(h\) can be a black-box function. The downside is that the update equation is derived assuming (1) a linear \(h\), (2) Gaussian distributions and (3) infinitely many realizations. ES won’t actually sample the true, analytical posterior except in the happy case when conditions (1), (2) and (3) are all satisfied. Instead we approximate it.4 Since the forward model is expensive to compute, the number of realizations \(r\) is much smaller than the number of parameters \(m\) and responses \(n\). This leads to poor estimates of covariances due to spurious correlations.
We will now derive the update equation for ES, which computes the posterior realizations given the prior realizations. First, some notation: let \(X \in \R^{m \times r}\) be a matrix with \(r\) realizations (ensemble members); one per column.5 Let \(Y = h(X) = [ h(\boldsymbol{x}_1) \mid h(\boldsymbol{x}_2) \mid \cdots \mid h(\boldsymbol{x}_r)] \in \R^{n \times r}\) be a matrix of responses, where \(h\) is applied to each column.
Statement 1. The matrix form of the ES update equation, which updates every realization (column) in \(X\), is
where each column of \(E\) is independently sampled observation \(\boldsymbol{\epsilon}_d\). In other words, \(E_{\cdot, j} \sim \mathcal{N}(\boldsymbol{0}, \Sigma_\epsilon)\) for every column \(j\). The vector \(\boldsymbol{1}\) is a vector of \(r\) ones, so \(\boldsymbol{d} \boldsymbol{1}^T\) is a matrix with the observation \(\boldsymbol{d}\) repeated in each of the \(r\) columns. The matrices \(\hat{\Sigma}_{xy}\) and \(\hat{\Sigma}_y\) are estimates of the cross-covariance and the covariance. The most common estimate for, e.g., \(\hat{\Sigma}_{xy}\) is the empirical cross covariance matrix \(\bar{X}\bar{Y}^T / (r-1) \in \R^{m \times n}\), where \(\bar{X}\) is a centered \(X\) in which every parameter (row) has its mean subtracted.6 \(\bar{Y}\) is a centered \(Y\) and \(\hat{\Sigma}_{y}\) is computed similarly.
We’ll spend the rest of this section showing that equation \(\eqref{eqn:ensemble_smoother_update}\) is the correct update equation in the following sense: when we use it on a linear model and the number of realizations \(r\) goes to infinity, the posterior mean and posterior covariance matches the analytical posterior.
To derive equation \(\eqref{eqn:ensemble_smoother_update}\), we start by examining the Gaussian update equation for the mean:
We use the results from Remark 1 and substitute \(\Sigma_x H^T = \Sigma_{xy}\) and \(H \Sigma_x H^T = \operatorname{Cov}\left[ H\boldsymbol{x} \right] = \operatorname{Cov}\left[ \boldsymbol{y} \right] = \Sigma_y\). This gives us Kalman gain in the form \(K = \Sigma_{xy} \left( \Sigma_\epsilon + \Sigma_y \right)^{-1}\).
The update equation for each realization \(j\), based on equation \(\eqref{eqn:ensemble_smoother_update}\), is given by
where \(\boldsymbol{\epsilon}_d^j \sim \mathcal{N}(\boldsymbol{0}, \Sigma_\epsilon)\). To see why this is the correct update and why we have to perturb the response \(\boldsymbol{y}^j\) with observation noise \(\boldsymbol{\epsilon}_d^j\), we have to prove that in the Gauss-linear case, this update equation recovers the same posterior mean and posterior covariance as the analytical equations in \(\eqref{eqn:posterior_mean_precision}\) and \(\eqref{eqn:posterior_cov_precision}\). To this end, suppose that \(h\) is linear, so \(\boldsymbol{y}^j = H \boldsymbol{x}^{j}_{\text{prior}}\).
We update each realization with the equation
where \(\boldsymbol{d}\) is no longer a random variable, but an actual real-world observation. The residual term \((\boldsymbol{d} - (H \boldsymbol{x}_{\text{prior}} + \boldsymbol{\epsilon}_d))\) is the actual value minus the predicted value.
First we show that the posterior mean equals equation \(\eqref{eqn:posterior_mean_kalman}\):
Second we show that the posterior covariance equals equation \(\eqref{eqn:posterior_cov_precision}\). More specifically, we show it to be equal to the Schur complement form derived in Remark 2. Below we use the fact that \(K\boldsymbol{d}\) is constant and that \(\operatorname{Cov} \left[ \boldsymbol{x}_{\text{prior}}, \boldsymbol{\epsilon}_d \right] = 0\) when we distribute the covariance over the terms.
The equalities shown in underbraces were all derived in Remark 1. From equation \(\eqref{eqn:kalman_gain}\), we observe that \(K \Sigma_{d} = (\Sigma_{xd} \Sigma_{d}^{-1}) \Sigma_{d} = \Sigma_{xd}\). The last term, \(K \Sigma_{d} K^T\), can therefore be re-written as \(\Sigma_{xd} K^T\) and cancels the second term. We are left with
where the last equality follows from Remark 2.
In summary, we have shown that if we use equation \(\eqref{eqn:ensemble_smoother_update}\) to update the ensemble, then the resulting posterior mean and covariance over the realizations matches the analytical posterior in the Gauss-linear case.
Computation
To implement ES we must compute equation \(\eqref{eqn:ensemble_smoother_update}\) given in Statement 1. Substituting empirical population estimates for \(\hat{\Sigma}_{xy}\) and \(\hat{\Sigma}_y\), the update equation becomes
This equation should never be implemented naïvely. For instance, the inverse should not be explicitly formed and neither should the huge cross-covariance matrix \(\bar{X}\bar{Y}^T\) (order of matrix multiplication matters).
Emerick and Reynolds (2012, Appendix A)20 write about computation, and explain two tricks: (1) scaling the system of equations and (2) subspace inversion. Emerick (2016, Appendix B)21 also discusses computation. But their sentence “it is computationally more efficient to rescale based only on the diagonal elements” is not as clear as it could be: using only the diagonal elements means we don’t solve the original equation.
The best way I know to solve this system is to scale with the Cholesky factor of \(\Sigma_{\epsilon}\), then do a subspace inversion with a single SVD. This is different from both papers above, and is documented iterative_ensemble_smoother.
The Ensemble Information Filter
One issue with ES is that in equation \(\eqref{eqn:ensemble_smoother_update}\) we have to estimate \(\Sigma_{xy}\) and \(\Sigma_{y}\). When \(m\) and \(n\) are larger than \(r\), empirical covariance is a poor estimator that picks up spurious correlations—the update ends up being dominated by noise.
What if we avoid covariances and instead work with precision matrices and \(H\)? After all, there is a substantial literature on high-dimensional regression that we can lean on to estimate \(H\). Also, parameters with conditional independence structure are often better described by precision matrices \(\Lambda_x\) rather than covariance matrices \(\Sigma_{x}\), see Rue and Held (2005, Ch. 2)22. The following ideas are due to Lunde (2025)17: (1) estimate \(H\) with sparse high dimensional regression and (2) think in terms of precision rather than covariance. We’ll refer to his work as the Ensemble Information Filter (EnIF). The information terminology means that we parametrize in terms of precision rather than covariance. We’re discussing smoothers, so the filter does not exactly match this document—but we’ll stick with EnIF rather than inventing a new abbreviation.
Let us approximate \(\boldsymbol{y} = h(\boldsymbol{x})\) as \(\boldsymbol{y} = H \boldsymbol{x} + \boldsymbol{r}\). Here \(\boldsymbol{r}\) is the residual (the non-linear part of \(h\)) and \(H\) is a sparse matrix.7 If we model \(\boldsymbol{r} \sim \mathcal{N}(\boldsymbol{0}, \Sigma_{r})\), then a large \(\Sigma_{r}\) means the linear model is poor.8
Statement 2. The matrix form of the EnIF update equation, which updates every realization (column) in \(X\), is
where \(Y = h(X_{\text{prior}})\) applied column-wise and each column of \(E\) is independently sampled observation \(\boldsymbol{\epsilon}_d\). In other words, \(E_{\cdot, j} \sim \mathcal{N}(\boldsymbol{0}, \Sigma_\epsilon)\) for every column \(j\).
\(H\), \(\Lambda_x\) and \(\Sigma_{r}\) must be estimated. The forward map \(H\) is estimated by regressing \(Y = h(X_{\text{prior}})\) on \(X_{\text{prior}}\), typically with a sparse high dimensional method. The precision \(\Lambda_x\) must be estimated, taking into account the parameter ensemble \(X\) as well as neighborhood (graph) information (sparsity pattern in \(\Lambda_x\)). The residual covariance \(\Sigma_{r}\) can be estimated as \(\operatorname{diag}\left( \operatorname{Cov}\left[ Y - HX \right] \right)\), where \(H\) is the estimated forward map. Correcting for degrees of freedom is an option when estimating \(\Sigma_{r}\).
We will now sketch why equation \(\eqref{eqn:ensemble_smoother_update_inf}\) is the correct update equation, in the sense that posterior mean and covariance matches under the Gauss-linear model. The analytical model given the assumption \(\boldsymbol{y} = H \boldsymbol{x} + \boldsymbol{r}\) becomes:
This is analogous to equation \(\eqref{eqn:model_def_gaussian}\), but with \(\Sigma_{\epsilon}\) replaced by \(\Sigma_{\epsilon} + \Sigma_{r}\). The posterior distribution \(p(\boldsymbol{x} \mid \boldsymbol{d}) = \mathcal{N} (\boldsymbol{\mu}_{x \mid d}, \Sigma_{x \mid d})\) over parameters is given by
From equation \(\eqref{eqn:push_through_kalman}\) and the result in Remark 1, we observe that we can write the Kalman gain as a function of precision matrices and \(H\) as
where \(\tilde{\Lambda}\) is defined as in equation \(\eqref{eqn:ensemble_smoother_update_precision_def}\) and \(\Lambda_x = \Sigma_{x}^{-1}\) by definition. At this point it’s quite easy to mimic the proof for the ES update equation, to show that equation \(\eqref{eqn:ensemble_smoother_update_inf}\) also is correct, in the sense that
The two differences between EnIF and ES, under the Gauss-linear assumption, are that (1) the Kalman gain relies on precision and \(H\) instead of covariance and (2) the covariance of \(\boldsymbol{r}\) is accounted for. We have no theoretical guarantees that EnIF is better than ES, in the sense that the update equation is equivalent but written in a different form. The hope is that if we are able to compute high-quality estimates of \(H\) and \(\Lambda_x\), the resulting update will also have high quality.
Computation
Here are some notes on computation of the EnIF update.
Subproblem 1 (Estimate \(\Lambda_x\))
- If the realizations in \(X_\text{prior}\) are known to be multivariate Gaussian, e.g. \(\boldsymbol{x}_\text{prior} \sim \mathcal{N}\left( \boldsymbol{x} \mid \boldsymbol{\mu}_x, \Sigma_x \right)\) with a known \(\Sigma_x\), then \(\Lambda_x = \Sigma_x^{-1}\) and no estimation is needed.
- If \(X_\text{prior}\) is given without information about its distribution, but the adjacency matrix \(G\) is given (\(G_{ij} = 1\) iff \((\Lambda_x)_{ij} \neq 0\)), then we have to solve the problem “estimate \(\Lambda_x\), given \(X_\text{prior}\) and \(G\).” This can for instance be done with the algorithm given in Hastie et al. (2009, §17.3.1)16 or the triangular transport approach given in Lunde (2025)17.
- If \(X_\text{prior}\) is given but no information about the graph structure \(G\) is given, then the graph structure can be estimated. A good starting point for information about this problem is Hastie et al. (2009, §17.3.2)16.
Subproblem 2 (Estimate \(H\))
The problem is to find \(H \in \mathbb{R}^{n \times m}\) such that \(Y \approx H X\). This can be formulated as \(n\) regressions, one for each response: \(X^T H^T \approx Y^T\) in matrix notation or \(X^T \boldsymbol{h}_{i, \cdot} \approx \boldsymbol{y}_{i, \cdot}\) in vector notation. For each response \(i\), we solve the regression problem to obtain \(\boldsymbol{h}_{i, \cdot}\), the \(i\)‘th row in \(H\).
This regression should be
- Sparse, since then the posterior precision \(\Lambda_x + H^T \tilde{\Lambda} H\) will retain most of the sparsity of the prior \(\Lambda_x\). Sparsity also means a more interpretable model.
- Fast, since both \(m\) and \(n\) can be huge.
- High dimensional, since \(r\) is small compared to \(m\) and \(n\).
Some kind of Lasso or boosted linear regression is a good choice. See Lunde (2025, Appendix E)17 for more details. The information criterion in Bühlmann (2006)23 could perhaps be used.
Main computation
The algorithm inputs are \(X_{\text{prior}}\), an estimated \(H\), the observation noise covariance matrix \(\Sigma_{\epsilon}\) and responses \(Y := h(X_\text{prior})\).
- Compute the residual matrix \(R = Y - HX_{\text{prior}}\) and estimate \(\Sigma_r\) from it. For instance by choosing \(\Sigma_r\) to be diagonal, i.e., taking the variance over each row (response-residual) in \(R\).
- Compute \(\tilde{\Lambda} = \left( \Sigma_{\epsilon} + \Sigma_{r} \right)^{-1}\). If either \(\Sigma_{\epsilon}\) or \(\Sigma_{r}\) is dense, then do not explicitly compute the inverse like this, but instead use e.g. Cholesky factorization to solve systems of equations. If they are both diagonal, then exploit that fact in computation instead of actually forming the diagonal matrix.
-
Solve
\begin{equation*} ( \Lambda_x + H^T \tilde{\Lambda} H ) Z = H^T \tilde{\Lambda} (\boldsymbol{d} \boldsymbol{1}^T - (Y + E)) \end{equation*}or, equivalently, the column version for each column \(j\)
\begin{equation*} ( \Lambda_x + H^T \tilde{\Lambda} H ) \boldsymbol{z}_j = H^T \tilde{\Lambda} (\boldsymbol{d} - (\boldsymbol{y}_j + \boldsymbol{\epsilon}_d)) \end{equation*}If \(\tilde{\Lambda}\) is diagonal, then exploit that fact. Since \(( \Lambda_x + H^T \tilde{\Lambda} H )\) is sparse, large and symmetric positive definite, it can be solved with Cholesky or with Conjugate gradients. 4. Set \(X_{\text{posterior}} = X_{\text{prior}} + Z\).
-
If you want to jump ahead, the issue was that in equation \(\eqref{eqn:ensemble_smoother_update}\) the original formulation had \(\boldsymbol{d} - \boldsymbol{y}\) in the innovation term instead of the correct \(\boldsymbol{d} - (\boldsymbol{y} + \boldsymbol{\epsilon}_d)\). ↩
-
We can derive the posterior mean \(\boldsymbol{\mu}_{x \mid d}\) by maximizing the log-posterior \(\log ( p(\boldsymbol{x} \mid \boldsymbol{d}))\), which is equal to \(\log ( p(\boldsymbol{d} \mid \boldsymbol{x}) \, p(\boldsymbol{x}))\) (up to a constant) by Bayes’ theorem. Simply take the gradient of \((\boldsymbol{d} - H \boldsymbol{x})^T \Sigma_\epsilon^{-1} (\boldsymbol{d} - H \boldsymbol{x}) + (\boldsymbol{x} - \boldsymbol{\mu}_x)^T \Sigma_x^{-1} (\boldsymbol{x} - \boldsymbol{\mu}_x)\) with respect to \(\boldsymbol{x}\), equate it to \(\boldsymbol{0}\) and solve. ↩
-
A more direct, constructive way of showing this is to appeal to the push-through identity, see for instance the Wikipedia page on the Woodbury matrix identity. ↩
-
This approximation comes without any guarantees, so engineering judgment is often required. We potentially perform an update so full of noise that keeping the prior would’ve been better. ↩
-
In statistics and machine learning, samples are typically associated with rows and features with columns. Here that convention is transposed; each parameter gets a row and each realization a column. ↩
-
Some authors write the centered matrix \(\bar{X}\) as \(X (I - \boldsymbol{1} \boldsymbol{1}^T / r)\). While centering can be expressed as matrix multiplication, it is both hard to read and an unwise implementation strategy. ↩
-
You might be wondering why we do not include a bias term in the approximation. It’s not needed, since it will cancel in the innovation term in ES-style updates like equation \(\eqref{eqn:ensemble_smoother_update}\) anyway. ↩
-
The reason we did not include residuals \(\boldsymbol{r}\) in the ES derivation is that they become part of \(\Sigma_{y}\) in equation \(\eqref{eqn:ensemble_smoother_update}\) anyway. Under the assumption \(\boldsymbol{y} = H \boldsymbol{x}\) we have \(\Sigma_{y} = \operatorname{Cov}\left[ \boldsymbol{y} \right] = \operatorname{Cov}\left[ H \boldsymbol{x} \right] = H \Sigma_{x} H^T\). Had we instead assumed \(\boldsymbol{y} = H \boldsymbol{x} + \boldsymbol{r}\), then \(\Sigma_{y} = \operatorname{Cov}\left[ \boldsymbol{y} \right] = \operatorname{Cov}\left[ H \boldsymbol{x} + \boldsymbol{r} \right] = H \Sigma_{x} H^T + \Sigma_{r}\). Either way, in the ES update equation \(\eqref{eqn:ensemble_smoother_update}\) we rely on an empirical \(\Sigma_{y}\), which captures the residuals. It is only now that we wish to rely on \(H\) instead of \(\Sigma_{y}\) that we have to decompose \(\Sigma_{y}\) into variance due to \(\boldsymbol{x}\) mapped through \(H\) (the \(H \Sigma_{x} H^T\) term) and variance due to residuals (the \(\Sigma_{r}\) term). ↩
-
G. Evensen, “Sequential data assimilation with a nonlinear quasi-geostrophic model using Monte Carlo methods to forecast error statistics,” Journal of Geophysical Research, vol. 99, no. C5, pp. 10143–10162, 1994. ↩
-
P. J. Van Leeuwen and G. Evensen, “Data assimilation and inverse methods in terms of a probabilistic formulation,” Monthly Weather Review, vol. 124, no. 12, pp. 2898–2913, 1996. ↩
-
G. Burgers, P. J. Van Leeuwen, and G. Evensen, “Analysis scheme in the ensemble Kalman filter,” Monthly Weather Review, vol. 126, no. 6, pp. 1719–1724, 1998. ↩
-
Y. Chen and D. S. Oliver, “Ensemble Randomized Maximum Likelihood Method as an Iterative Ensemble Smoother,” Mathematical Geosciences, vol. 44, pp. 1–26, 2012. ↩
-
Y. Chen and D. S. Oliver, “Levenberg–Marquardt Forms of the Iterative Ensemble Smoother for Efficient History Matching and Uncertainty Quantification,” Computational Geosciences, vol. 17, pp. 689–703, 2013. ↩
-
A. A. Emerick and A. C. Reynolds, “Ensemble Smoother with Multiple Data Assimilation,” Computers & Geosciences, vol. 55, pp. 3–15, 2013. ↩
-
F. C. Vossepoel, G. Evensen, and P. J. van Leeuwen, “Adaptive Correlation- and Distance-Based Localization for Iterative Ensemble Smoothers in a Coupled Nonlinear Multiscale Model,” Monthly Weather Review, vol. 153, no. 11, pp. 2593–2609, 2025. ↩
-
T. Hastie, R. Tibshirani, and J. Friedman, The Elements of Statistical Learning: Data Mining, Inference, and Prediction, 2nd ed. New York: Springer, 2009. ↩↩↩
-
B. Å. S. Lunde, “An Ensemble Information Filter: Retrieving Markov-information from the SPDE Discretisation,” arXiv:2501.09016, 2025. ↩↩↩↩
-
K. B. Petersen and M. S. Pedersen, The Matrix Cookbook, Technical University of Denmark, version 20121115, 2012. ↩
-
C. M. Bishop, Pattern Recognition and Machine Learning. New York: Springer, 2006. ↩
-
A. A. Emerick and A. C. Reynolds, “History matching time-lapse seismic data using the ensemble Kalman filter with multiple data assimilations,” Computational Geosciences, vol. 16, pp. 639–659, 2012. ↩
-
A. A. Emerick, “Analysis of the performance of ensemble-based assimilation of production and seismic data,” Journal of Petroleum Science and Engineering, vol. 139, pp. 219–239, 2016. ↩
-
H. Rue and L. Held, Gaussian Markov Random Fields: Theory and Applications. New York: Chapman and Hall/CRC, 2005. ↩
-
P. Bühlmann, “Boosting for High-Dimensional Linear Models,” Annals of Statistics, vol. 34, 2006. ↩