SPB Git

spb/wp29_uqo

Public

# Mathematical argument

# Proposition B (TRUE): X, Y independent, X ~ N(μ1, σ1²), Y ~ N(μ2, σ2²) ⇒ X + Y ~ N(μ1+μ2, σ1²+σ2²)

Proof sketch. The characteristic function of N(μ, σ²) is φ(t) = exp(iμt − σ²t²/2) (σ = 0 gives a constant, included). By independence, φ_{X+Y}(t) = E[e^{itX} e^{itY}] = φ_X(t) φ_Y(t) = exp(i(μ1+μ2)t − (σ1²+σ2²)t²/2), which is the characteristic function of N(μ1+μ2, σ1²+σ2²). By the uniqueness theorem for characteristic functions, X + Y has that law. ∎

# Proposition A (FALSE): normal marginals alone do not make X + Y normal

Independence (or, more generally, joint normality) is essential. Counterexample:

Construction. Let X ~ N(0,1) and let S be independent of X with P(S = 1) = P(S = −1) = 1/2. Define Y = S·X.

Marginals are normal. X ~ N(0,1) by definition. For any Borel set B, P(Y ∈ B) = ½ P(X ∈ B) + ½ P(−X ∈ B) = P(X ∈ B), since −X ~ X (symmetry of N(0,1)) and S ⟂ X. So Y ~ N(0,1). (Moreover Cov(X, Y) = E[S]E[X²] = 0: X and Y are uncorrelated but dependent, since |X| = |Y|; (X, Y) is not jointly normal.)

Sum is not normal. X + Y = (1 + S)X, which equals 0 when S = −1 and 2X when S = 1. Hence P(X + Y = 0) ≥ P(S = −1) = 1/2. A normal law N(μ, σ²) with σ > 0 is continuous and gives probability 0 to every point; a degenerate normal (σ = 0) is a.s. constant. X + Y is neither: it has an atom of mass exactly 1/2 at 0 (P(2X = 0) = 0), and it is not a.s. constant since Var(X + Y) = ½·Var(2X) = 2 > 0. Therefore X + Y is not normally distributed — not even in the degenerate sense allowed by the statement. ∎

Its law is the mixture ½δ₀ + ½N(0,4), with mean 0 and variance 2. The KS distance between this law and N(0, 2) is 0.25 (the mixture CDF jumps from 0.25 to 0.75 at 0, where Φ = 0.5).

Remark. The simpler choice Y = −X gives X + Y ≡ 0, a constant, which the statement explicitly counts as normal, so it is not a counterexample; that is why the randomized sign is used.

# Numerical illustration (not the proof)

out/analysis.py draws n = 100000 pairs from this construction with numpy default_rng(seed = 20261029) and writes them to out/counterexample.csv; summaries are in out/results.json → counterexample_values (marginal means ≈ 0, sds ≈ 1; KS distance of the sum to its fitted normal ≈ 0.25, versus ≈ 0.002 for the independent baseline).

Files · main
Menu

Theme