Characteristic Functions
A characteristic function spins a distribution into waves. The wave pattern encodes every moment and identifies the distribution completely.
Why Does This Exist?
Sums of independent variables are painful in distribution space: densities convolve, an integral per summand. In Fourier space they multiply, one factor per summand. The characteristic function is that Fourier view, and unlike its cousin the moment-generating function, it always exists because .
It earns its keep three ways: moments fall out by differentiating at zero, independence becomes multiplication, and the central limit theorem becomes a two-line limit of . It builds on probability distributions by giving every one of them a uniform handle.
The one idea you need first
wraps the variable around the unit circle at speed . Averaging that position gives a complex number inside the unit disc. Fast oscillation averages toward zero, which is why decays for spread-out laws.
Think of It Like This
Chords instead of notes
Identifying a chord by hearing each note separately is slow. Hearing the combined shimmer is instant, and a trained ear recovers the notes from it. The distribution is the separate notes; the characteristic function is the shimmer.
Addition of independent variables is like stacking chords: the shimmers multiply while the note lists convolve. The analogy stops at inversion: recovering notes from a shimmer needs an integral, and two very different mixtures can shimmer alike over short ranges.
How It Actually Works
Definition: for real . Always and . Key rules, each with and independent:
- Independence: .
- Moments: when the moment exists.
- Uniqueness: determines the law; inversion recovers the CDF.
- Continuity: in distribution exactly when pointwise.
Worked example
Standard normal : . At , . Bernoulli check with : , so and . Differentiate the Bernoulli case: , and , the mean. The machinery returns the number you started with.
Code
import numpy as np
rng = np.random.default_rng(3)x = rng.standard_normal(200000)for t in [0.0, 1.0, 2.0]: emp = np.exp(1j * t * x).mean() # empirical phi(t) print(t, round(float(emp.real), 3)) # -> 1.0, 0.607, 0.135Real parts land at 1.0, 0.607, and 0.135 against exact values 1, 0.6065, and 0.1353.
Watch Out For
Swapping in the MGF where it does not exist
The moment-generating function blows up for heavy tails like Cauchy or log-normal sums, and code that evaluates it returns inf. People then conclude the distribution has no handle.
Use instead: it exists for every law. Reach for the MGF only when you have verified exponential tails.
Reading pointwise closeness as uniform closeness
pointwise gives convergence in distribution, but densities may still spike: pointwise control at each is not uniform control. Smoothing claims need more, like an integrable majorant or a local limit theorem.
If the goal is density approximation, verify the extra integrability instead of quoting the continuity theorem alone.
The Quick Version
- is the Fourier handle on a law; it always exists with and .
- Independence turns convolution into multiplication: .
- Moments come from derivatives at zero; the law is pinned down by uniqueness and inversion.
- Standard normal: , matched by simulation.
- Pointwise convergence of is exactly convergence in distribution.
- Prefer it over the MGF whenever tails might be heavy.