fips.Posterior.dofs_per_element#
- property Posterior.dofs_per_element: Vector[source]#
the diagonal of
averaging_kernel(), on the prior’s space.\(A_{jj}\), how much the estimate of element \(j\) responds to its own true value: near 1 for an element the observations constrain, near 0 for one left at its prior. The values sum to
dofs, so a group’s share (a region, a block, a month) is a sum over its labels. The analytic method computes the diagonal from its factors, without forming the gain or then x nkernel.A diagonal entry is not the information on that element alone: the rest of its row of \(A\) says how much of the estimate comes from the true values of the other elements.
See also
dofsTheir sum.
averaging_kernelThe full kernel \(A = K H\).
information_contentThe information the observations give, in nats.
Examples
>>> import numpy as np >>> import pandas as pd >>> import fips >>> cells = pd.Index(["a", "b"], name="cell") >>> obs_id = pd.Index(["o1", "o2", "o3"], name="obs_id") >>> prior = fips.Vector.from_series(pd.Series(0.0, index=cells), block="flux") >>> obs = fips.Vector.from_series( ... pd.Series([1.0, 2.0, 3.0], index=obs_id), block="co2" ... ) >>> problem = fips.Problem( ... prior=prior, ... prior_cov=fips.Independent().with_std(1.0), ... obs=obs, ... obs_cov=fips.Independent().with_std(np.sqrt(0.1)), ... forward=fips.Operator( ... np.array([[1.0, 0.0], [0.0, 1.0], [1.0, 1.0]]), ... obs.space, ... prior.space, ... ), ... ) >>> post = fips.solve(problem) >>> post.dofs_per_element.to_series().round(3) block cell flux a 0.938 b 0.938 Name: dofs_per_element, dtype: float64 >>> round(post.dofs, 3) 1.877
- Type:
Each state element’s share of
dofs