Stylized Facts of Financial Returns › Aggregational Gaussianity

Michael BrenndoerferNovember 21, 20255 min read
Quantitative FinanceAll chapters
Part 5 of 15Stochastic Calculus and Pricing Theory
Chapter 25Stylized Facts of Financial Returns › Aggregational Gaussianity
Reading section 7 of 14 · Aggregational Gaussianity · 5 minSection 7 of 14 · 5 min

Book contents

Section 7 of 14 · 5 min read

Stylized Facts of Financial Returns › Aggregational GaussianityOne section · Sections in this chapter7 / 14 ↓
Reading tools Definitions & inline links

Choose your expertise level to adjust how many terms are explained. Beginners see more tooltips, experts see fewer to maintain reading flow. Hover over underlined terms for instant definitions.

Article links

Make inline references clickable

An intriguing stylized fact is that while daily returns are highly non-normal, returns over longer horizons become progressively more Gaussian. This phenomenon, called aggregational Gaussianity, results from a form of the Central Limit Theorem operating on the time-aggregated returns.

As you increase the measurement interval from daily to weekly to monthly to annual, the distribution of returns converges toward normality. Heavy tails diminish, and excess kurtosis declines toward zero.

In[26]:
Code
import numpy as np
import pandas as pd
from scipy import stats

# Compute returns at different frequencies
prices_series = prices.copy()

# Resample to different frequencies
weekly_prices = prices_series.resample("W").last()
monthly_prices = prices_series.resample("ME").last()
quarterly_prices = prices_series.resample("QE").last()

weekly_returns = np.log(weekly_prices / weekly_prices.shift(1)).dropna()
monthly_returns = np.log(monthly_prices / monthly_prices.shift(1)).dropna()
quarterly_returns = np.log(
    quarterly_prices / quarterly_prices.shift(1)
).dropna()

# Calculate kurtosis at each frequency
frequencies = ["Daily", "Weekly", "Monthly", "Quarterly"]
return_series = [
    log_returns,
    weekly_returns,
    monthly_returns,
    quarterly_returns,
]

# Calculate statistics for each frequency
agg_stats = []
for freq, ret in zip(frequencies, return_series):
    agg_stats.append(
        {
            "Frequency": freq,
            "N Obs": len(ret),
            "Skewness": stats.skew(ret),
            "Excess Kurt": stats.kurtosis(ret),
        }
    )
agg_stats_df = pd.DataFrame(agg_stats)
Out[27]:
Console
Aggregational Gaussianity: Kurtosis by Frequency
=======================================================
Frequency    N Obs      Skewness     Excess Kurt 
-------------------------------------------------------
Daily        6260       0.0423       0.1299      
Weekly       1252       0.0375       0.3172      
Monthly      288        0.0314       -0.1698     
Quarterly    96         0.2679       0.0138      
-------------------------------------------------------
Normal distribution: Skewness = 0.0, Excess Kurtosis = 0.0

The excess kurtosis drops substantially as we move from daily to quarterly returns. This has practical implications: while daily VaR requires non-normal distributions, annual risk assessments can often rely more heavily on Gaussian approximations.

Out[28]:
Visualization
Histogram of standardized daily log returns overlaid with a normal curve, showing a tall central peak and heavy tails indicating strong non-normality.
Standardized daily log-return distribution compared with a normal curve; the title reports sample excess kurtosis.
Histogram of standardized weekly log returns overlaid with a normal curve, showing reduced but still elevated tails compared to the normal distribution.
Standardized weekly log-return distribution compared with the same normal benchmark; the title reports sample excess kurtosis.
Histogram of standardized monthly log returns overlaid with a normal curve, with the distribution shape beginning to converge toward normality.
Standardized monthly log-return distribution compared with the normal benchmark, with greater sampling variability from fewer observations.
Histogram of standardized quarterly log returns overlaid with a normal curve, showing an approximately Gaussian shape consistent with aggregational Gaussianity.
Standardized quarterly log-return distribution compared with the normal benchmark; the sparse histogram reflects the smaller quarterly sample.
Out[29]:
Visualization
Line chart of excess kurtosis across nine return horizons, fluctuating around a generally lower level at longer horizons, with a dashed zero reference.
Excess kurtosis across return horizons from 1 day to 3 months. Estimates fluctuate as aggregated samples shrink, but longer-horizon values generally lie closer to the zero reference for a normal distribution.