Before you write a single line of estimator code, the experiment has already fixed the best accuracy any algorithm can ever achieve. This is the mathematics of that floor — and of designing experiments that lower it.
Two teams pitch competing sensor designs for the same measurement job. Team A wants to spend six months building a clever estimator for their sensor; team B claims their design is fundamentally better and no cleverness can save A. Who is right? You could build both estimators and race them — or you could compute one number per design that settles the argument in an afternoon.
Make the dispute concrete. Both designs measure the same unknown constant θ. Design A returns θ plus Gaussian noise; design B returns θ plus Laplace (double-exponential) noise with the same total noise variance. Same variance, same budget — surely they are equivalent? They are not, and nothing about "variance" tells you why.
There is a deeper question hiding here, one you have never been forced to ask. When you built estimators on this site — the sample mean, the Kalman filter, MAP and MMSE from Bayes Estimation — how would you know if a better one exists? Racing candidates only ever gives an upper bound on the best. Nobody has ever handed you a lower bound that binds all algorithms at once.
Monte Carlo of three estimators of a location parameter. Each violin is that estimator's error distribution; the red band is the theoretical floor (half-width √CRLB). No violin ever gets tighter than the band — but which estimator touches it flips with the noise family.
Run the race under Gaussian noise with n = 25 and σ = 1. The sample mean delivers error variance 0.04. The sample median delivers about 0.063. The midrange does worse still. There seems to be a wall at 0.04 that nothing crosses — and the claim of this lesson is that the wall is real, computable in closed form, and equals σ²/n here.
Now flip the noise family to Laplace with the same variance and watch the leaderboard invert. The mean stays stuck at 0.04, but the wall itself drops to 0.02 — and the median slides down toward it. Two lessons in one plot: the floor belongs to the noise distribution, not just its variance — two designs with identical variance carry different amounts of information — and which estimator touches the floor depends on matching the estimator to the distribution.
The arc is a single story: read the noise model backwards (likelihood, ch 1), differentiate it (score, ch 2), take the variance of that (information, ch 3), apply Cauchy–Schwarz (the bound, ch 4), ask who achieves it (efficiency, ch 5), then generalize: many parameters (ch 6), bias and priors (ch 7), compressed data (ch 8), and sensor geometry as the showcase (ch 9).
One ownership boundary, stated out loud: this lesson derives the theory floor. Testing whether your deployed filter is honest against ground truth (NEES, Monte Carlo campaigns, ATE) lives in Estimator Evaluation, and the recursive machinery that chases the floor over time lives in the Kalman Filter.
You already know the formula p(z; θ) — it says which measurements are probable once θ is fixed. Now the measurement has happened. Same formula, opposite reading: hold z fixed, sweep θ, and ask which hypothesis makes what-actually-happened least surprising.
Define the object carefully, because everything downstream differentiates it. The likelihood function is L(θ; z) = p(z; θ) viewed as a function of θ with the data z frozen. Insist on the asymmetry: over z (θ fixed) it integrates to 1 and is a probability density; over θ (z fixed) it integrates to whatever it wants and is not a density. It is a score sheet, not a belief. Beliefs over θ need a prior — that is Bayes Estimation's territory, and chapter 7 will reconnect.
Make it concrete immediately: one sample z = 4.2 from N(θ, 1). L(θ) is a Gaussian-shaped bump in θ centered at 4.2 — hypotheses near 4.2 explain the datum well; hypotheses far away rate it a freak event. Nothing new was computed. The formula was read in the other direction.
Independent samples multiply: L(θ) = ∏i p(zi; θ). Products of many small numbers are numerically vicious and analytically clumsy, so pass to the log-likelihood:
Logs turn independent evidence into addition — the single most consequential design choice in this lesson. Sums have means and variances, and chapter 3 lives on exactly that.
Top: the data (drag dots; click empty space to add one) and a Gaussian template at your hypothesis θ — the stem heights multiply into the likelihood. Bottom: the (log-)likelihood curve over θ, with a tick at the MLE. Toggle to raw likelihood and add points: watch the product of small numbers collapse toward zero while the log view stays legible.
Work the Gaussian case to a shape you will meet fifty more times. For z1…zn from N(θ, σ²):
— an exact downward parabola in θ. Its peak sits where the derivative vanishes: at the sample mean. That peak location is the maximum likelihood estimate (MLE). You met MAP in Bayes Estimation; the MLE is MAP with a flat prior.
Setup. Three samples from N(θ, 1): z = (4.2, 3.6, 4.5). Build the log-likelihood, find its peak, and measure its shape.
Step 1 — write it.
Step 2 — peak. dℓ/dθ = (4.2−θ) + (3.6−θ) + (4.5−θ) = 12.3 − 3θ = 0, so the MLE is θ̂ = 4.1 — the sample mean.
Step 3 — shape. Expanding the squares, ℓ(θ) = −(3/2)(θ − 4.1)² + const — an exact parabola with second derivative −3 everywhere, which is −n/σ². For the Gaussian, the curvature does not even depend on the data values, only on the design (n, σ).
Step 4 — price a wrong hypothesis. ℓ(4.1) − ℓ(3.6) = (3/2)(0.5)² = 0.375 nats. Half a unit off the peak already costs 0.375 — and with n = 300 instead of 3 it would cost 37.5. The data's objection scales linearly with n.
Stand at some hypothesis θ and ask each data point: which way should I move, and how urgently? That per-datum answer — the slope of its log-likelihood contribution — is the score, and the entire theory of estimation limits is bookkeeping on these votes.
Define the score:
— the sensitivity of a datum's log-plausibility to the hypothesis. Positive score: this datum argues θ should be larger. For the Gaussian, s = (z − θ)/σ²: the vote is the residual, scaled by confidence. A precise sensor (small σ) shouts; a sloppy one whispers.
Connect to the peak: the MLE is precisely where the votes sum to zero — the total score of the sample vanishes at θ̂. An estimate is a negotiated settlement among the data's demands; the sample mean is literally the θ at which the Gaussian residual-votes balance.
Now the central identity of the chapter: at the true θ, E[s] = 0. The proof is one honest line. The density integrates to 1 for every θ, so d/dθ of that integral is 0. Exchanging derivative and integral — this exchange is the regularity fine print; flag it now, it returns in chapter 4 — gives ∫(∂p/∂θ)dz = ∫s·p dz = E[s] = 0. Individual votes can be loud; at the truth they cancel on average.
Samples from a hidden true θ fire signed vote-arrows at your hypothesis. The big arrow below the line is the running average vote. Park the slider at the truth and the big arrow shrivels toward zero as draws pile up — E[s] = 0 happening live. Park it anywhere else and the average converges to a systematic pull pointing home.
Sit with what E[s] = 0 means operationally, because the sim makes it visceral. Draw data from the true θ and average their votes at the truth: the average shrivels toward zero as draws accumulate. Average the same votes at a wrong θ and they converge to a systematic nonzero pull toward the truth — (θtrue − θ)/σ² for the Gaussian. A persistent average vote is the data telling you that you are standing in the wrong place.
Do a non-Gaussian case by hand — the worked example below — because the Gaussian's linear score breeds bad intuition. For a Bernoulli(θ) bit, s(1) = 1/θ and s(0) = −1/(1−θ). At θ = 0.3, a success votes +3.33 and a failure votes −1.43: wildly asymmetric votes — yet they cancel exactly on average. The cancellation is a theorem, not a symmetry accident.
Setup. One Bernoulli(θ) bit with θ = 0.3: p(z; θ) = θz(1−θ)1−z. Compute both possible votes, check they cancel on average, and compute their spread.
Step 1 — the score. log p = z log θ + (1−z) log(1−θ), so s = z/θ − (1−z)/(1−θ).
Step 2 — the two votes at θ = 0.3. A success gives s(1) = 1/0.3 = 3.333333 (pull θ up, hard); a failure gives s(0) = −1/0.7 = −1.428571 (pull down, gently). The asymmetry is real: successes are rare at θ = 0.3, so witnessing one is loud evidence.
Step 3 — cancellation at the truth.
Exactly zero — the theorem, not luck.
Step 4 — spread of the votes. Var(s) = E[s²] = 0.3 × (3.333333)² + 0.7 × (1.428571)² = 3.333333 + 1.428571 = 4.761905. Check the closed form: 1/(θ(1−θ)) = 1/0.21 = 4.761905. That spread is about to be named Fisher information in the next chapter — remember this number.
Chapter 2 left a variance on the table. Chapter 1 left a curvature. Here is the punchline of classical estimation theory: they are the same quantity — and it is additive, so every new sample deposits a fixed amount of it in your account.
Define Fisher information as the variance of the score at the truth: I(θ) = Var(s) = E[s²] (the mean is zero by chapter 2). High information: each datum's vote is loud — small changes in θ change the log-plausibility a lot — the data discriminate. Low information: votes are murmurs; whole neighborhoods of θ explain the data equally.
Now the second face. Differentiate the identity E[s(θ)] = 0 with respect to θ once more (same regularity fine print). The product rule yields two terms — E[ds/dθ] + E[s²] = 0 — giving the information identity:
Variance of the slope equals expected downward curvature of the log-likelihood. The algebra is four lines; do each one on paper — it is quals question 1 verbatim.
Insist on the word expected, because this is the classic exam trap. The curvature of one realized log-likelihood is the observed information and jitters from dataset to dataset (for non-Gaussian models); Fisher information is its average over data drawn at the truth. For the Gaussian, the parabola's curvature happens to be data-independent (n/σ² exactly), which is precisely why Gaussians breed sloppy intuition here — the sim overlays thirty replicate log-likelihoods so you can see peaks jitter while the average curvature stands still.
Thirty thin curves, each from a fresh dataset. Peak locations jitter (sampling variation of the MLE) but under Gaussian noise every parabola has the same width. The bottom ledger stacks one information block per sample. Switch to Bernoulli(0.3): now per-replicate curvature visibly varies while the dashed expected curve stands still — observed vs. expected information on screen.
Cash the additivity cheque. For iid samples, ℓ is a sum, scores add, and independent variances add:
Information is a budget: every sample deposits I1. The Gaussian deposits 1/σ² per sample (n = 25 at σ = 2: total 6.25); the Bernoulli deposits 1/(θ(1−θ)) — chapter 2's 4.761905 at θ = 0.3, so a hundred coin flips hold 476.190476.
Give information its units and its warning label. I(θ) carries units of 1/θ² — its inverse is a variance in θ-units, which is exactly what makes chapter 4's bound dimensionally inevitable. And it is a local quantity, a property of the model at a parameter value: I(θ) can be large at one θ and tiny at another (Bernoulli near 0.5 versus near 0.01), so "how informative is my sensor" has no answer without saying where.
Setup. Verify both faces and additivity with real numbers: Gaussian samples with σ = 2, then the Bernoulli budget from chapter 2.
Step 1 — face one (vote variance). The per-sample score is s = (z − θ)/σ², so Var(s) = σ²/σ4 = 1/σ² = 0.25 at σ = 2. A Monte Carlo of 200,000 scores confirms: 0.2506.
Step 2 — face two (curvature). d²/dθ² log p = −1/σ² = −0.25 per sample, so −E[curvature] = 0.25. The two faces agree, as the information identity demands.
Step 3 — additivity. n = 25 samples deposit Itotal = 25 × 0.25 = 6.25. Preview of chapter 4: the best possible unbiased variance will be 1/6.25 = 0.16.
Step 4 — a non-Gaussian budget. The Bernoulli(0.3) deposit is 4.761905 per flip (chapter 2), so n = 100 flips hold Itotal = 476.190476 — bounding any unbiased estimate of θ to variance at least 0.0021.
Here is the whole proof in one sentence: being unbiased handcuffs your estimator to the score with covariance exactly 1, and two random variables with a fixed covariance cannot both have small variance. Everything else is bookkeeping — four moves, no magic.
Move 1 — the handcuff. Unbiasedness says E[θ̂] = θ for every θ, not just one. That "for every" is the engine: a statement true along a continuum of θs can be differentiated in θ. Write E[θ̂] as ∫θ̂(z) p(z; θ) dz — the estimator is a fixed function of data; only p moves with θ.
Move 2 — differentiate the handcuff: d/dθ E[θ̂] = 1. Pushing the derivative through the integral — the same regularity fine print as chapters 2–3; third appearance, so name the conditions: support independent of θ, differentiable density, dominated derivatives — turns ∂p/∂θ into p times the score, giving E[θ̂ · s] = 1.
Move 3 — recenter. Since E[s] = 0, we get Cov(θ̂, s) = E[θ̂s] − E[θ̂]E[s] = 1. Pause on how strange this is: whatever unbiased estimator anyone builds — mean, median, a neural network, an algorithm from 2080 — its covariance with the score is exactly 1. Unbiasedness is not a loose promise; it is a rigid mechanical linkage to the data's votes.
Move 4 — Cauchy–Schwarz.
The estimator's identity appears nowhere on the right side — that is why this one line binds all algorithms at once, and why chapter 0's wall was real. With n iid samples, I = n I1 and the floor is 1/(n I1).
Each dot is one Monte Carlo replication: x = total score, y = estimator value. The mean collapses onto a perfect line (equality case: on the floor). The median keeps the same tilt — covariance still locks near 1 — but orthogonal scatter inflates its variance ~π/2 above the floor. The shrunk mean halves the tilt: covariance 0.5, previewing chapter 7. Hover a dot for its values.
Read the equality condition out of Cauchy–Schwarz, because it is chapter 5's entire agenda: equality iff θ̂ − θ is exactly proportional to the score. For the Gaussian, θ̂mean − θ = (σ²/n) × total score — proportional, so the sample mean sits on the floor at every n. The median is correlated with the score but not proportional to it: same covariance 1, extra orthogonal wobble, variance π/2 times the floor (worked below).
State the fine print as a first-class result, not a footnote: the bound requires the regularity conditions, and Uniform(0, θ) violates them — there the MLE (the sample maximum) has variance shrinking like 1/n², sailing straight through where a naive "1/nI" floor would sit. The CRLB is a theorem about smooth families, not a law of nature; the fine print is exam material and engineering material (quantized and thresholded sensors live near the edge of it).
Setup. Gaussian location, σ = 2, n = 25. Compute the floor, check who touches it, and verify the covariance handcuff by Monte Carlo.
Step 1 — the floor. Itotal = n/σ² = 25/4 = 6.25, so CRLB = 1/6.25 = 0.16.
Step 2 — the sample mean. Var(z̄) = σ²/n = 4/25 = 0.16 — on the floor, at finite n, because z̄ − θ = (σ²/n) × total score is proportional to the score (the equality case). MC confirms: Var 0.1599.
Step 3 — the handcuff, measured. Over 200,000 replications, Cov(z̄, total score) = 0.9991 — pinned to 1, as the proof demands of every unbiased estimator.
Step 4 — the sample median. Same covariance-1 handcuff, but not proportional to the score — its asymptotic variance is πσ²/(2n) = π × 4/50 = 0.251327, a factor π/2 = 1.570796 above the floor (efficiency 2/π = 0.63662). MC at n = 25 gives 0.246, within 2% of the asymptotic value.
Step 5 — read the two MC numbers together. Identical handcuff, different orthogonal wobble — the covariance constraint is what the bound prices; the wobble is what inefficiency looks like.
You should be able to check this whole chain numerically for any model you can sample and write a log-density for: E[score] = 0, the information identity by finite differences, and estimators raced against the floor.
python import numpy as np # CRLB verification harness, from scratch: for any model you can sample # and log-density you can write, check the whole chain numerically: # E[score] = 0, Var(score) = -E[curvature] = I(theta), Var(est) >= 1/I. def fisher_report(logpdf, sampler, theta, n, estimators, trials=100000, h=1e-4, seed=0): rng = np.random.default_rng(seed) Z = sampler(rng, theta, (trials, n)) # score via central differences on the summed log-likelihood ll_p = logpdf(Z, theta + h).sum(axis=1) ll_m = logpdf(Z, theta - h).sum(axis=1) ll_0 = logpdf(Z, theta).sum(axis=1) score = (ll_p - ll_m) / (2 * h) curv = (ll_p - 2 * ll_0 + ll_m) / h**2 I_var, I_curv = score.var(), -curv.mean() print(f'E[score] = {score.mean():+.4f} (theory: 0)') print(f'Var(score) = {I_var:.4f}') print(f'-E[curvature] = {I_curv:.4f} (the two faces agree)') print(f'CRLB = {1/I_var:.5f}') for name, est in estimators.items(): v = est(Z).var() print(f' Var({name:6s}) = {v:.5f} efficiency = {(1/I_var)/v:.3f}') # Gaussian location, sigma = 2, n = 25: mean is efficient, median pays pi/2 sig = 2.0 fisher_report( logpdf=lambda z, th: -0.5*np.log(2*np.pi*sig**2) - (z - th)**2/(2*sig**2), sampler=lambda rng, th, shape: rng.normal(th, sig, shape), theta=5.0, n=25, estimators={'mean': lambda Z: Z.mean(axis=1), 'median': lambda Z: np.median(Z, axis=1)}) print() # Bernoulli, theta = 0.3, n = 100: the sample proportion is efficient th0 = 0.3 fisher_report( logpdf=lambda z, th: z*np.log(th) + (1 - z)*np.log(1 - th), sampler=lambda rng, th, shape: (rng.random(shape) < th).astype(float), theta=th0, n=100, estimators={'prop': lambda Z: Z.mean(axis=1)})
A floor is only interesting if someone can stand on it. Chapter 0's race showed the mean touching the floor under Gaussian noise and the median touching it under Laplace — same floor-touching honor, opposite estimators. Time to explain who gets to touch, when, and why the MLE almost always does eventually.
Formalize the scoreboard: the efficiency of an unbiased estimator is eff = CRLB / Var(θ̂), a number in (0, 1]; an estimator with eff = 1 is efficient. Chapter 4 already measured the Gaussian median at 2/π = 0.637 — now make that number systematic rather than anecdotal.
Derive the membership rule from Cauchy–Schwarz equality: θ̂ is efficient iff θ̂ − θ = c(θ) × s(θ; z) for some factor constant in z. Integrate this condition and you land on a structural theorem: a finite-n efficient unbiased estimator exists iff the family is an exponential family and θ is (a linear function of) its natural mean parameter, with θ̂ the corresponding sufficient statistic. Gaussian mean, Poisson rate, Bernoulli proportion: yes. Gaussian σ² with unknown mean, Laplace location, almost everything nonlinear: no finite-n winner exists at all.
Let the Laplace worked example land the punch: under Laplace(b = 1) noise the CRLB at n = 100 is 0.01. The sample mean — the reflex estimator — delivers 0.02: fifty percent efficiency, permanently, at every n. The sample median (which is the MLE here, since the log-density is −|z − θ|/b) closes on the floor as n grows. Matching the estimator to the noise family is worth a factor of 2 in variance — for free, forever.
Histogram of √n(θ̂ − θ) against the limiting efficient curve N(0, 1/I1). Under Gaussian noise the mean matches the curve at every n while the median stays wider forever. Under Laplace the roles swap — but watch the median approach the curve only slowly (visibly above the floor at n = 10, hugging it by n = 500). The strip chart traces efficiency vs. n, so "asymptotic" is a curve you watch converge, not a word.
Now the general engine — MLE asymptotics, sketched honestly in three steps you can follow on paper. (1) The MLE zeroes the total score: 0 = Sn(θ̂). (2) Taylor-expand around the truth: 0 ≈ Sn(θ) + S′n(θ)(θ̂ − θ). (3) So:
The numerator tends to N(0, I1) by the CLT (scores are iid, mean 0, variance I1); the denominator tends to I1 by the law of large numbers. The MLE is asymptotically efficient because it asymptotically becomes the proportional-to-score estimator that equality demands.
Connect back to the site's estimators to make this concrete: the Kalman filter under linear-Gaussian assumptions is the recursive MLE/MMSE and inherits efficiency (kalman-filter); robust estimators (Huber, from robust-estimation) deliberately spend efficiency at the Gaussian — about 5% at the usual tuning — to buy insurance against heavy tails. That lesson's tradeoff curve is this chapter's efficiency number turned into a dial.
Setup. Laplace(b = 1) location noise (per-sample variance 2b² = 2), n = 100. Score the reflex estimator (mean) against the matched one (median = MLE).
Step 1 — Fisher information for Laplace location. log p = −log(2b) − |z − θ|/b, so s = sign(z − θ)/b and I1 = E[s²] = 1/b² = 1. The CRLB at n = 100: 1/(n I1) = 0.01.
Step 2 — the sample mean ignores the noise shape. Var = 2b²/n = 0.02. Efficiency = 0.01/0.02 = 0.5 — fifty percent, at every n, forever.
Step 3 — the sample median is the MLE (it minimizes ∑|zi − θ|). Its asymptotic variance is 1/(4 f(0)² n) with f(0) = 1/(2b): 1/(4 × 0.25 × 100) = 0.01 — exactly the CRLB, asymptotically.
Step 4 — seeded Monte Carlo, 200,000 replications. Mean variance 0.02 (on its nose); median variance 0.0116 — 16% above the 0.01 floor at n = 100, the visible cost of "asymptotic"; rerun mentally at larger n and the gap closes like 1/n.
Step 5 — moral with numbers attached. Matching estimator to noise family is worth a factor 2 here; impatience (finite n) costs another 16% temporarily. The floor prices both.
Real problems never have one unknown. You want the slope; the intercept tags along. You want position; the clock bias tags along. Here is the uncomfortable theorem: the parameters you do not care about still charge you variance on the ones you do — unless the information matrix says they are orthogonal.
Lift the machinery in one motion. The score becomes the gradient vector s = ∇θℓ; the Fisher information matrix (FIM) is
(both faces survive, same proof shape). Diagonal entries: per-parameter loudness. Off-diagonals: vote entanglement — when data cannot tell a change in θ1 from a change in θ2, the off-diagonal grows.
State the matrix bound and immediately de-mystify what a matrix inequality means: Cov(θ̂) ≥ I−1 means aTCov a ≥ aTI−1a for every direction a — every linear functional of the parameters has its own scalar floor. Direction a = ej reads off the practical corollary everyone uses: Var(θ̂j) ≥ [I−1]jj. Note the trap in the notation: [I−1]jj, NOT 1/Ijj — the whole chapter lives in the gap between those two.
Top: the four x-design points (drag them, or shift all). Below: the CRLB ellipse in the (slope, intercept) plane, with two brackets on the slope axis — the marginal floor √[I⁻¹]11 (intercept unknown: the ellipse's full shadow) and the conditional floor √(1/I11) (intercept known: a horizontal slice). Center the design and watch the ellipse rotate axis-aligned as the brackets snap together. The bottom strip traces the inflation factor vs. shift — a design-of-experiments curve drawn by hand.
Make the gap concrete with the line fit: yi = a xi + b + Gaussian noise, x at (0, 1, 2, 3), σ = 1. The FIM is [[14, 6], [6, 4]] — that 6 is the entanglement: raising the slope and lowering the intercept produce nearly the same fitted line over right-shifted x. Invert: [I−1]11 = 0.2, while 1/I11 = 0.0714 — knowing the intercept would make the slope 2.8 times easier. The nuisance parameter b, which you never wanted, taxed your slope by 180%.
Name the general law. With θ = (ψ, λ) (interest, nuisance), the effective information for ψ is the Schur complement:
— information minus what the nuisance can mimic. Verify on the numbers: 14 − 6²/4 = 5, and 1/5 = 0.2, matching the inverse's corner exactly. Equality with the naive 1/I11 holds iff the off-diagonal vanishes: parameter orthogonality.
Turn the law into a design lever, because this is where estimation theory becomes engineering: center the regressors. Shift x to (−1.5, −0.5, 0.5, 1.5): now ∑x = 0, the FIM is diagonal, and the slope's floor is 1/5 = 0.2 with no inflation — same hardware, same noise, same four measurements, the tax legislated away by parametrization. (The slope floor itself is unchanged — 0.2 either way, since ∑(x − x̄)² = 5 is shift-invariant — what changed is that the intercept no longer costs anything extra, and the two estimates decorrelate.)
Foreshadow the showcase: in chapter 9 the FIM's eigen-structure becomes literal geometry — each sensor contributes a rank-one slab of information along its measurement direction, off-diagonals become ellipse tilt, and a nuisance-like degeneracy (two nearly parallel slabs) becomes an ellipse stretching to the horizon.
Setup. Fit yi = a xi + b + noise (σ = 1) with x at (0, 1, 2, 3). How well can ANY unbiased method know the slope a — with and without knowing the intercept b?
Step 1 — assemble. Per-sample gradients are (xi, 1), so the FIM is (1/σ²) [[∑x², ∑x], [∑x, n]] = [[14, 6], [6, 4]]. The off-diagonal 6 says slope and intercept votes are entangled on this right-shifted design.
Step 2 — invert (det = 14 × 4 − 36 = 20): I−1 = [[0.2, −0.3], [−0.3, 0.7]]. Slope floor with b unknown: [I−1]11 = 0.2.
Step 3 — if b were known: floor = 1/I11 = 1/14 = 0.071429. The nuisance inflation is 0.2/0.071429 = 2.8: not knowing the intercept makes the slope 2.8× harder — with identical data.
Step 4 — Schur complement check. Effective slope information = 14 − 6²/4 = 5.0, so the floor is 1/5 = 0.2. Same answer through the front door.
Step 5 — centered design x at (−1.5, −0.5, 0.5, 1.5): ∑x = 0 kills the off-diagonal; ∑(x − x̄)² = 5.0 is unchanged, so the slope floor stays 0.2 — but now 1/I11 ALSO equals 0.2: orthogonal parameters, zero nuisance tax, and the intercept estimate no longer covaries with the slope.
Chapter 4's proof had one confession in it: unbiasedness. Remove that assumption and the floor does not vanish — it bends. And once a prior enters, the bend has a direction: toward the prior, below the unbiased floor, priced by a beautiful generalization that the Kalman filter has been achieving all along without telling you.
Redo move 2 of chapter 4 with a biased estimator, E[θ̂] = θ + b(θ): differentiating now gives E[θ̂s] = 1 + b′(θ). The handcuff's length changed. Cauchy–Schwarz delivers the biased CRLB:
If b′ is negative — the estimator systematically leans toward some anchor — the variance floor drops below 1/I. Bias legally buys variance.
Make the purchase concrete with the shrinkage estimator θ̂ = 0.5 z̄ (Gaussian, σ = 2, n = 4, so I = 1 and the unbiased floor is 1.0): bias b(θ) = −0.5θ, b′ = −0.5, bent floor (0.5)²/1 = 0.25 — and Var(0.5 z̄) = 0.25 achieves it. A quarter of the unbiased floor! The catch: variance is not error. Its MSE is 0.25 + 0.25θ² — below the unbiased 1.0 for |θ| < √3, above it beyond. Shrinkage is a bet that θ is small; the bent bound prices the bet's variance, not its regret.
Draw the moral before you over-learn it: the biased bound shows the unbiased CRLB is not sacred — but it prices each bias function separately and says nothing about which bet to make. To rank bets you must average over θ — and the moment you put a distribution on θ, you have rejoined Bayes Estimation.
Enter the Bayesian CRLB (the Van Trees inequality): for ANY estimator — biased, nonlinear, whatever — the average MSE over the prior obeys
where Jprior = E[(d/dθ log π(θ))²] is the prior's own Fisher information about θ. Data information and prior information add — the same additivity as chapter 3, now across sources of knowledge rather than samples. No unbiasedness anywhere: averaging over the prior is what replaces it.
Left: three bars — the frequentist unbiased floor (fixed at 1.0), the Van Trees floor sliding with the prior-variance dial, and a Monte Carlo dot for the posterior mean's Bayes MSE landing on the Van Trees bar at every setting. Right: the regret plot — MSE vs. true θ for the shrinkage estimator c z̄; the parabola crosses the flat unbiased line at |θ| = √((1+c)/(1−c)). The two panes separate what students conflate: the bent floor prices the VARIANCE of one bet; the prior converts bets into an average.
Run the linear-Gaussian case where everything is exact: prior N(0, P0 = 1), n = 4 samples at σ = 2. Data information n/σ² = 1.0; prior information 1/P0 = 1.0; J = 2.0; floor 0.5 — HALF the frequentist floor of 1.0. The posterior mean shrinks z̄ by data-info/total = 0.5 (it IS the 0.5 z̄ estimator above — the bet the prior justifies), and its Bayes MSE, by seeded Monte Carlo, is 0.5014: on the Van Trees floor. In linear-Gaussian problems the bound is achieved exactly, at finite n, by the MMSE estimator you built in Bayes Estimation.
Close the triangle of the three floors now standing: unbiased 1/I (binds unbiased estimators at a point), bent (1 + b′)²/I (binds one bias function at a point), Bayesian 1/J (binds EVERYONE on average over the prior). Each weakening of the claim buys generality; knowing which floor a paper is quoting is a quals reflex.
Setup. Gaussian measurements, σ = 2, n = 4 (so data information = 1.0, unbiased floor = 1.0). A prior N(0, P0 = 1) becomes available. Price the shrinkage bet and the Bayesian floor.
Step 1 — unbiased frequentist floor. I = n/σ² = 1.0, so Var ≥ 1.0 for any unbiased estimator.
Step 2 — the shrinkage bet θ̂ = 0.5 z̄. Bias b(θ) = −0.5θ, so b′ = −0.5 and the bent floor is (1 − 0.5)²/I = 0.25. Its variance: 0.25 × (σ²/n) = 0.25 — the bent floor, achieved. Below the unbiased floor by 4×, legally.
Step 3 — the bill for the bet at fixed θ. MSE(θ) = 0.25 + (0.5θ)². At θ = 2: 0.25 + 1.0 = 1.25 — WORSE than the unbiased 1.0. The bet pays off only for |θ| < √3.
Step 4 — the prior settles the bet. J = data info + prior info = 1.0 + 1/P0 = 2.0, so the Van Trees floor on average MSE is 1/J = 0.5 — half the frequentist floor.
Step 5 — achieved. The posterior mean shrinks by data-info/total = 0.5 — exactly the c = 0.5 estimator, now justified — and seeded MC over 400,000 draws of (θ, data) from the joint gives Bayes MSE 0.5014: the floor, achieved to MC precision. Priors are not philosophical decoration; they are information, and they add.
Your pipeline throws data away constantly: it averages, thresholds, bins, summarizes. Which of those steps cost you accuracy that no downstream algorithm can ever recover? There is an exact accounting — and it explains, at last, why the median pays chapter 4's mysterious π/2 tax.
State the theorem first because it is short and shocking: for ANY function T of the data,
Processing is a one-way valve for Fisher information — the data-processing inequality of estimation. The proof sketch is worth doing on the board: the score of T is the conditional expectation of the score of Z given T (one honest computation via the factorization of densities), and conditional expectation shrinks variance (law of total variance) — so Var(scoreT) ≤ Var(scoreZ). Equality iff the score of Z is already a function of T.
Define sufficiency through that equality: T is sufficient when p(z; θ) factorizes as g(T(z); θ) h(z) (the Fisher–Neyman factorization) — all θ-dependence flows through T — and then scoreZ IS a function of T, so IT = IZ: lossless compression. For n Gaussian samples, the log-density's θ-terms collect into n z̄θ − nθ²/2 (over σ²): z̄ is sufficient. One number carries ALL 25 samples' information about the mean — averaging is free.
Now the median mystery dissolves: the sample median is NOT sufficient for the Gaussian mean — it forgets exactly where each datum sits, keeping only rank information near the center. Chapter 4 measured the price empirically: efficiency 2/π. This chapter derives where 2/π comes from: near the center the median is driven by SIGN information — and a sign is a 1-bit measurement.
Raw samples flow into a compressor; the meter shows how much Fisher information survives. Mean: 100% (sufficiency — the bar does not move). Median: 63.7%. A 1-bit comparator: 63.7% at the perfect threshold, bleeding toward 43.9% one sigma off (the analytic curve traces as you move t). A k-bin histogram climbs back toward 100% by k ≈ 8. The bottom strip shows a Monte Carlo estimator actually attaining the raised floor — the mean's step up from the raw floor is exactly zero.
Compute the 1-bit sensor exactly, because it is the workhorse of the chapter and of modern cheap-sensor design. A comparator reports only whether z exceeds threshold t. This is a Bernoulli observation with success probability 1 − Φ((t − θ)/σ), and its Fisher information (chain rule through chapter 2's Bernoulli) is
At the sweet spot t = θ: φ(0)²/(1/4) = 4/(2π) = 2/π ≈ 0.6366 of the analog sample's 1/σ². A perfectly placed comparator keeps 63.7% of the information — and that same 2/π is the median's efficiency, no coincidence: both live on signs around the center.
Move the threshold and watch the information bleed — the design lesson: at d = 1 (threshold one sigma off the truth), I1bit = φ(1)²/(Φ(1)(1−Φ(1))) = 0.438629 — you keep 43.9%, not 63.7%. The floor from n = 100 one-bit sensors with a well-placed threshold is 1/(100 × 0.63662) = 0.015708 versus 0.01 from analog samples. Numbers like these budget real systems: how many comparators buy one ADC (π/2 ≈ 1.57), what a misplaced threshold costs (another 1.45× at one sigma), when binning telemetry is safe (k-bin histograms recover information rapidly as k grows).
Flag the boundary honestly: Fisher information's data-processing inequality is about estimating θ locally; Shannon's mutual-information DPI is a cousin, not the same theorem (the information theory workbook draws the family tree). Quals will ask you to keep them apart.
Setup. Gaussian samples, σ = 1. Price three compressions of the data exactly: the mean, the median, and a 1-bit comparator at two threshold placements; then budget n = 100 comparators against n = 100 analog samples.
Step 1 — baseline. Each analog sample carries I = 1/σ² = 1.0.
Step 2 — sample mean. Sufficient (factorization collects all θ-terms into z̄), so it keeps 100% — compression for free.
Step 3 — 1-bit comparator at the ideal threshold t = θ. The bit is Bernoulli with p = 1/2 and sensitivity φ(0), giving I = φ(0)²/(1/4) = 2/π = 0.63662 — 63.7% kept. The sample median's asymptotic efficiency is the SAME 2/π = 0.63662: the median is sign-driven near the center, so chapter 4's tax is this chapter's quantization loss in disguise.
Step 4 — off-center threshold, d = 1 sigma. I = φ(1)²/(Φ(1)(1 − Φ(1))) = 0.241971²/(0.841345 × 0.158655) = 0.438629 — 43.9% kept. Threshold placement alone costs a further factor 1.45.
Step 5 — the budget. n = 100 well-placed comparators give a floor of 1/(100 × 0.63662) = 0.015708, versus 0.01 for 100 analog samples. Equivalently π/2 = 1.5708 comparators buy one analog sample — the exact exchange rate between a $0.05 comparator and an ADC channel.
Everything so far priced WHAT you measure. The showcase prices WHERE you measure from. Drag two sensors around a target and watch the theory assemble in front of you: information adding as rank-one slabs, the bound inverting into an ellipse, and a Monte Carlo cloud of actual MLE estimates hugging that ellipse — geometry becoming accuracy in real time.
Set up the estimation problem cleanly: target at unknown 2D position p; sensor i at known position qi measures either range ri = |p − qi| + noise(σr) or bearing (angle to target) + noise(σb). The measurement gradients are the whole story: the range gradient is the unit vector ui from sensor to target (moving the target radially changes range one-for-one; transversely, not at all); the bearing gradient is the PERPENDICULAR unit vector scaled by 1/di (angles change fastest for close targets).
Assemble the FIM as a sum of rank-one slabs — the geometric reading of chapter 6:
each slab constraining exactly one direction. A range sensor is a vise clamping the radial axis; a bearing sensor is a vise clamping the transverse axis with grip 1/(σb²d²) that weakens with the SQUARE of distance. Cross-range accuracy from a bearing sensor floors at d × σb — at d = 10 with σb = 0.05 rad, transverse information 4.0 and a floor of 0.5 units of standard deviation, however good the estimator.
Drag the target (cross) and the two sensors. Each sensor paints its rank-one information slab through the target; the purple ellipse is the 95% CRLB. Fire the MLE scatter to watch 400 actual estimates fill the ellipse. Sweep orbits sensor B while the strip chart traces trace(CRLB) vs. separation angle against the 2σ²/sin²γ law — minimum flagged at 90°. Squeeze the sensors collinear and the ellipse runs off the screen: GDOP, live.
Work the two-range-sensor case to a closed form you can carry forever: unit vectors separated by angle γ, both σr = 1. The FIM is uAuAT + uBuBT with det = sin²(γ) and trace 2, so
At γ = 90°: total variance floor 2.0 — each direction independently clamped. At 30°: 8.0 — a factor FOUR worse with IDENTICAL sensors, purely from geometry. As γ → 0 the two slabs become parallel, the FIM drops rank, and the transverse direction is unconstrained: the ellipse runs off the screen. This is GDOP (geometric dilution of precision) — the reason GPS wants satellites spread across the sky, not bunched.
Close the loop with achievability, because a bound without a cloud is decoration: draw noisy ranges, solve the MLE by Gauss–Newton (vnav-09's machinery — one step from truth suffices in the linearized regime), and scatter 200,000 estimates: seeded MC covariance trace 8.013 against the bound's 8.0. The ellipse is not a pessimist's abstraction; the MLE cloud FILLS it.
Setup. Two range sensors, σr = 1, observing a target. Compare separation angles 90 and 30 degrees; check the bearing-sensor scaling; confirm achievability by seeded Monte Carlo MLE.
Step 1 — geometry to unit vectors. Put uA = (0, 1) (sensor due south of target) and uB at 30° from it: (sin 30°, cos 30°) = (0.5, 0.866025).
Step 2 — assemble the slabs. FIM = uAuAT + uBuBT = [[0.25, 0.433013], [0.433013, 1.75]]. det = 0.25 — and in general det = sin²(γ), so det at 30° = sin²(30°) = 0.25. Check.
Step 3 — invert. CRLB = [[7.0, −1.732051], [−1.732051, 1.0]], trace 8.0 — matching the closed form 2/sin²(γ) = 2/0.25 = 8.0. At γ = 90°: 2/1 = 2.0. Same two sensors, 4× the total variance floor, geometry alone.
Step 4 — ellipse anatomy. Eigenvalues of the CRLB are 4 ± 2√3 = 7.4641 and 0.5359 — the error ellipse is √(7.4641/0.5359) ≈ 3.73 times longer than wide, its long axis bisecting the two nearly-parallel sensor directions.
Step 5 — bearing scaling check. A bearing sensor at distance d = 10 with σb = 0.05 rad contributes transverse information 1/(σb²d²) = 4.0 — a cross-range standard-deviation floor of d × σb = 0.5.
Step 6 — achievability. 200,000 seeded MC trials, one Gauss–Newton step from truth on noisy ranges: empirical covariance trace 8.013 against the bound's 8.0 — the MLE cloud fills the ellipse; the bound is tight, not decorative.
This is how a localization stack actually uses the CRLB: assemble the FIM for a candidate layout, score it by A/D-optimality, then cross-check that the covariance an NLLS solver reports at its optimum (inverse of the whitened JTJ, GTSAM/Ceres-style) IS the inverse FIM.
python import numpy as np from scipy.optimize import least_squares # Production framing: a sensor-placement evaluator, the way a localization # stack actually uses the CRLB. Build the FIM for a candidate geometry, # score it (A/D-optimality), and cross-check that the covariance an NLLS # solver reports at the optimum IS the inverse FIM (J' Sigma^-1 J)^-1. def fim_for_layout(target, sensors): """sensors: list of (pos, kind, sigma); kind in {'range','bearing'}.""" I = np.zeros((2, 2)) for pos, kind, s in sensors: d = target - pos r = np.linalg.norm(d) u = d / r # unit vector sensor -> target if kind == 'range': g = u / s # d(range)/d(target) scaled else: # bearing: transverse, 1/(s*r) g = np.array([-u[1], u[0]]) / (s * r) I += np.outer(g, g) # rank-one information slab return I target = np.array([0.0, 0.0]) layout = [(np.array([0.0, -8.0]), 'range', 0.5), # due south (np.array([-8.0, 0.0]), 'range', 0.5), # due west: 90 deg baseline (np.array([10.0, 0.0]), 'bearing', 0.05)] # bearing at d=10 I = fim_for_layout(target, layout) C = np.linalg.inv(I) print('FIM =\n', np.round(I, 4)) print('CRLB trace (A-optimality) =', round(float(np.trace(C)), 4)) print('CRLB det (D-optimality) =', round(float(np.linalg.det(C)), 6)) # Cross-check: simulate one measurement set, solve the MLE by NLLS, and # recover the covariance from the solver's Jacobian -- the observed FIM. rng = np.random.default_rng(7) def h(p): out = [] for pos, kind, s in layout: d = p - pos out.append(np.linalg.norm(d) if kind == 'range' else np.arctan2(d[1], d[0])) return np.array(out) sig = np.array([s for _, _, s in layout]) z = h(target) + rng.normal(0, sig) res = least_squares(lambda p: (h(p) - z) / sig, x0=np.array([1.0, 1.0])) J = res.jac # already noise-whitened C_solver = np.linalg.inv(J.T @ J) print('solver covariance trace =', round(float(np.trace(C_solver)), 4)) print('matches CRLB at optimum:', np.allclose(np.trace(C_solver), np.trace(C), rtol=0.05)) # Placement loop in practice: sweep candidate layouts, keep the one with # min trace(inv(FIM)) -- optimal experiment design, before any hardware.
You have the machinery: likelihood, score, information, the bound, its equality case, its matrix form, its bent and Bayesian generalizations, and its geometry. Now sit the exam — eight questions of the kind that open an estimation quals, graded on derivations, limiting cases, and judgment rather than recall.
Attempt each question on paper (or the Teach whiteboard) before expanding the worked answer. The answers are graded sketches: full credit requires the algebra, the regularity flags where they belong, and a sanity check at a limit — precisely what the in-chapter derivations rehearsed. Every number in the answers is one the lesson has already verified, so checking your work means checking against chapters you can revisit.
The eight group by theme: foundations (the information identity with its fine print; the four-move proof and its failure model), structure (the (μ, σ²) FIM and attainability at finite n; the efficiency characterization), applications (nuisance/Schur on the line fit; the 1-bit quantizer design), and generalizations (Van Trees pricing the Kalman filter; the two-sensor geometry closed form).
Start from normalization: ∫p(z; θ) dz = 1 for all θ. Differentiate in θ and exchange derivative with integral (regularity flag #1: dominated differentiable integrand, support independent of θ): ∫p′ dz = 0, i.e. E[s] = 0 where s = p′/p. Differentiate AGAIN (flag #2, same conditions): ∫p″ dz = 0. Now compute d/dθ of s = p′/p: s′ = p″/p − (p′/p)², so E[s′] = 0 − E[s²], giving E[s²] = −E[s′] — i.e. Var(s) = −E[curvature] since E[s] = 0.
Failure model: Uniform(0, θ). The support [0, θ] moves with the parameter, the exchange is illegal, E[s] is not even 0, and no CRLB applies: the MLE max(zi) has E[(θ̂ − θ)²] ≈ 2θ²/n² — a 1/n² rate, faster than any 1/(nI) floor, with no contradiction because the theorem's hypotheses never held. Sanity check on a regular model: Gaussian σ = 2 gives Var(s) = 1/4 = 0.25 and −E[curvature] = 1/σ² = 0.25 — the two faces agree.
Move 1: unbiasedness E[θ̂] = θ for ALL θ — a differentiable identity in θ. Move 2: differentiate under the integral (regularity): d/dθ ∫θ̂(z) p(z; θ) dz = ∫θ̂ p s dz = E[θ̂s] = 1. Move 3: since E[s] = 0, Cov(θ̂, s) = 1 — the handcuff every unbiased estimator wears regardless of its construction. Move 4: Cauchy–Schwarz: 1 = Cov² ≤ Var(θ̂) Var(s) = Var(θ̂) I(θ), so Var(θ̂) ≥ 1/I(θ).
Unbiasedness entered ONLY in move 1 (making the derivative equal 1). With bias: E[θ̂] = θ + b(θ) differentiates to E[θ̂s] = 1 + b′, and the same Cauchy–Schwarz gives Var ≥ (1 + b′)²/I — the bent floor, which shrinkage estimators achieve (c z̄ with c = 0.5 on the σ = 2, n = 4 Gaussian: bent floor 0.25, variance 0.25, versus unbiased floor 1.0 — but MSE 1.25 at θ = 2: the bend prices variance, not regret). Equality condition in either case: θ̂ − E[θ̂] proportional to the score.
Per-sample log-density: −½log(2πσ²) − (z − μ)²/(2σ²). Scores: sμ = (z − μ)/σ²; sσ² = −1/(2σ²) + (z − μ)²/(2σ4). FIM entries (n samples): Iμμ = n/σ²; Iσ²σ² = n/(2σ4) (from Var((z−μ)²) = 2σ4); cross term E[sμsσ²] = 0 because it involves the third central moment of a Gaussian, which vanishes. So I = diag(n/σ², n/(2σ4)): ORTHOGONAL parameters — not knowing σ² does not inflate the μ floor, a special Gaussian mercy.
CRLB for σ²: 2σ4/n; at σ = 2, n = 25: 2 × 16/25 = 1.28. Attainability: the unbiased sample variance s² (divisor n − 1) has Var = 2σ4/(n − 1) = 32/24 = 1.3333 > 1.28 — strictly above the floor. In fact NO unbiased estimator of σ² attains 1.28 at finite n (the equality condition θ̂ − θ proportional-to-score has no solution in this parametrization); the floor is approached only asymptotically. Moral: the CRLB can be an infimum nobody achieves — quoting it as "the variance of the best estimator" is generically wrong at finite n.
Cauchy–Schwarz equality demands θ̂(z) − θ = c(θ) s(θ; z) for all z. Since the left side's z-dependence is θ-free, integrating this ODE in θ forces log p to have the form A(θ)T(z) + B(θ) + h(z): a one-parameter EXPONENTIAL FAMILY with θ̂ = T the natural sufficient statistic and E[T] = θ. Gaussian location (T = z̄), Bernoulli (T = sample proportion), Poisson (T = sample mean) qualify. Laplace location does NOT: log p = −|z − θ|/b − log 2b is not of that form (the score sign(z − θ)/b is not linear in any T(z)), so no finite-n efficient unbiased estimator EXISTS.
Numbers at b = 1, n = 100: I1 = 1/b² = 1, floor 0.01. Sample mean: Var = 2b²/n = 0.02 — efficiency 0.5 at every n, because the mean solves the wrong family's equality condition. Sample median = the MLE: asymptotic variance 1/(4f(0)²n) = 0.01 — floor-touching, but only asymptotically (seeded MC at n = 100: 0.0116, still 16% over). The general MLE result: √n(θ̂ − θ) → N(0, 1/I1) via CLT on the score over LLN on the curvature.
FIM = [[∑x², ∑x], [∑x, n]] = [[14, 6], [6, 4]], det 20. Slope floor with b unknown: [I−1]11 = 4/20 = 0.2. With b known: 1/I11 = 1/14 = 0.071429. Price: 0.2/0.071429 = 2.8×. General law: the effective information for the parameter of interest is the SCHUR COMPLEMENT Iaa − IabIbb−1Iba = 14 − 36/4 = 5, so the floor is 1/5 = 0.2 — information minus what the nuisance can mimic; equivalently Var ≥ [I−1]jj, never 1/Ijj, with equality iff off-diagonals vanish (parameter orthogonality).
Design fix: CENTER the regressors, x → (−1.5, −0.5, 0.5, 1.5): ∑x = 0 zeroes the off-diagonal while ∑(x − x̄)² = 5 is unchanged — slope floor still 0.2, but the naive and marginal floors now coincide and the estimates decorrelate. Note what centering did NOT do: it cannot beat the Schur floor (which was already 1/∑(x−x̄)²); it removed the CORRELATION and the temptation to misread 1/I11 — which now happens to be correct. Field version: sf-15's calibration parameters are nuisances; time-sync offsets orthogonal to the state cost nothing, coupled ones inflate the state floor by exactly this Schur deficit.
The bit is Bernoulli with success probability q(θ) = 1 − Φ((t − θ)/σ). Chain rule through the Bernoulli information 1/(q(1−q)): I1bit = (dq/dθ)²/(q(1 − q)) = φ(d)²/(Φ(d)(1 − Φ(d))) × 1/σ² with d = (t − θ)/σ. Maximize over d: the ratio φ²/(Φ(1−Φ)) peaks at d = 0 (threshold AT the unknown mean), value φ(0)²/(1/4) = 4/(2π) = 2/π = 0.63662 per σ². Exchange rate: an analog sample carries 1/σ², so π/2 = 1.5708 well-placed comparators buy one ADC sample.
Misplacement cost at d = 1: φ(1)²/(Φ(1)(1−Φ(1))) = 0.241971²/(0.841345 × 0.158655) = 0.438629 — a further 1.45× tax; n = 100 comparators floor at 0.015708 versus 0.01 analog. Median connection: the sample median's asymptotic efficiency under Gaussian noise is ALSO 2/π = 0.63662 — the median is driven by sign (1-bit) information around the center, so chapter 4's π/2 tax and the quantizer's optimum are the same number seen from two sides. Design corollary: adaptive comparators servo the threshold to the running estimate — implementing d = 0 online.
Van Trees: for ANY estimator (no unbiasedness), E[(θ̂ − θ)²] ≥ 1/J with J = Eθ[I(θ)] + Jprior, Jprior = E[(d log π/dθ)²] — expected data information plus the prior's own information; the proof mirrors the four moves with the expectation taken over the JOINT of (θ, z), integration by parts replacing the unbiasedness step. Linear-Gaussian case, prior N(0, P0), n obs at variance σ²: J = n/σ² + 1/P0. With σ = 2, n = 4, P0 = 1: J = 2.0, floor 0.5 (versus frequentist 1.0). The posterior mean shrinks z̄ by (n/σ²)/J = 0.5, and its Bayes MSE is E[Var(θ | z)] = 1/J = 0.5 exactly (seeded MC: 0.5014) — achieved, at finite n, because the posterior is Gaussian with constant variance 1/J.
Kalman paragraph: the KF is this computation run recursively — Ppost−1 = Ppred−1 + HTR−1H is literally J with the predicted prior as π, so the reported P is the achieved Van Trees floor of each step's linear-Gaussian subproblem (sf-09 maintains Y = P−1 explicitly). For nonlinear filtering the same logic yields the recursive posterior CRLB (Tichavsky), which is the benchmark estimator-eval races filters against — and it prices biased filters legitimately, which the classical CRLB cannot.
Each sensor's range gradient is its unit line-of-sight vector ui, so FIM = (1/σ²)(uAuAT + uBuBT). With separation γ: trace(I) = 2/σ² and det(I) = sin²(γ)/σ4 (since det = |uA|²|uB|² − (uA·uB)² = 1 − cos²γ). For a 2×2 matrix trace(I−1) = trace(I)/det(I), so trace(CRLB) = 2σ²/sin²(γ): 2σ² at 90°, 8σ² at 30° (worked matrices: FIM [[0.25, 0.433013], [0.433013, 1.75]], CRLB trace 8.0, eigenvalues 4 ± 2√3 = 7.4641/0.5359; MC Gauss–Newton achieves trace 8.013).
Degenerate limit γ → 0: the slabs are parallel, det → 0, FIM rank 1, the transverse direction UNOBSERVABLE — the ellipse's major axis diverges; this is GDOP. Third sensor: it contributes a rank-one slab along ITS line of sight, so place it to feed the starved eigendirection — perpendicular to the bisector of A and B, i.e. wherever u3u3T loads the current CRLB's major axis. That greedy rule (add information along the worst-served direction) is exactly E-optimal design, and A/D-optimal variants differ only in the scalarization of I−1 being minimized.
No single right answer exists, but there are defensible and indefensible positions — argue from the three-floors taxonomy, the regularity conditions, and the attainability results, not from vibes.
Strip the proofs away and this lesson installed a single accounting system: data deposit information, processing can only withdraw it, priors are deposits from elsewhere, and 1/I is the price of precision. Here is where that currency circulates across everything else you have built.
Every chapter was a ledger rule — deposits add (iid samples, independent sensors, priors), withdrawals are one-way (compression, quantization, nuisance parameters), and the CRLB is the conversion of balance into achievable variance. An estimate is a claim about your own ignorance; Fisher information is what makes the claim auditable.
Map the site, backwards first: bayes-estimation supplied the posterior machinery this lesson priced (the MMSE estimator ACHIEVES the Van Trees floor in linear-Gaussian problems); kalman-filter is that achievement run recursively — its P is the achieved Bayesian bound, and sf-09's information filter literally maintains Y = P−1, this lesson's J, as its state. The "fusion is addition" theorem that distributed fusion agonizes over is Fisher additivity of independent sources, and its failure modes are double-counted information — the same currency, counterfeited.
Map forward into practice: vnav-09's Gauss–Newton covariance (JTJ inverted at the optimum) IS the observed FIM inverted — every NLLS solver on the site has been quoting this lesson's bound without saying so; estimator-eval's chapter 4 races real filters against the CRLB, and its NEES machinery (with sf-21) detects filters whose reported covariance dips below what information arithmetic allows; sf-15's calibration states are chapter 6's nuisance parameters wearing hardware.
Map into design, where the FIM earns salaries: A/D/E-optimal experiment design (minimize trace, det, or max-eigenvalue of I−1) is the showcase's sweep formalized — sensor placement, input-signal design for system identification, landmark selection in SLAM, satellite geometry (GDOP), and even active-learning acquisition functions are FIM shopping trips; the 1-bit threshold curve of chapter 8 is the same discipline applied to sensor front-ends.
Three doors this lesson deliberately did not walk through, with honest pointers: (1) information geometry — the FIM is a Riemannian metric on model space, Jeffreys's prior is √det I (you met improper priors in bayes-estimation), and NATURAL GRADIENT descent preconditions learning by I−1, which is why K-FAC and friends cite Fisher; (2) misspecification — when the model is wrong, sandwich covariances replace 1/I (robust-estimation's territory); (3) Shannon's information — a cousin with its own data-processing inequality; the information theory workbook keeps the family tree straight.
| Where next | Why it connects |
|---|---|
| Bayes Estimation | The prerequisite: priors, MAP, and MMSE — this lesson prices that machinery (the MMSE posterior mean achieves the Van Trees floor in chapter 7), and MLE is its flat-prior limit. |
| Estimator Evaluation | Owns the empirical side this lesson defers: NEES/NIS testing, Monte Carlo campaign discipline, ATE, and racing deployed filters against the CRLB — its "speed limit" chapter is this theory turned into a benchmark harness. |
| Kalman Filter | The recursive achiever: the KF's posterior covariance is the attained Bayesian CRLB of each linear-Gaussian step, and its predict/update cycle is what chases the floor through time. |
| Nonlinear Least Squares | Owns Gauss–Newton/LM mechanics; the covariance an NLLS solver reports — inverse of the whitened JTJ — is exactly the inverse observed FIM, which chapters 6, 9, and the production code lean on. |
| Information Filter | Maintains Y = P−1 as its state: "fusion is addition" is Fisher additivity of independent sources (chapter 3) run as an algorithm, and the information-form update is chapter 7's J assembled recursively. |
| Debugging Consistency | The lie detector for covariance claims: NEES/NIS machinery detects filters reporting less variance than information arithmetic allows — the practical enforcement arm of every bound derived here. |
| Robust Estimation | Spends this lesson's currency deliberately: Huber-style estimators trade a few percent of Gaussian efficiency (chapter 5's scoreboard) for heavy-tail insurance, and sandwich covariances replace 1/I under misspecification. |
| Calibration & Time Sync | Chapter 6's nuisance tax wearing hardware: calibration and time-offset states are co-estimated nuisances whose Schur-complement price — and orthogonalization by design — this lesson derives. |