The Question

Question: When the German stock market (DAX) moves 1% in a day, how much does the French market (CAC 40) tend to move?


Story roadmap

Question → Statistical Idea → Mathematics → R → Visualization → Insight

  • Data: daily closing prices of the DAX, SMI, CAC and FTSE indices, 1860 trading days in the 1990s (R dataset EuStockMarkets)
  • Variables: daily log returns of CAC (response) and DAX (predictor)
  • Tool: simple linear regression, where the slope is the market beta

From Prices to Returns

Investors care about percentage changes, not price levels, and prices are non-stationary. So we convert prices to daily log returns.

First six daily log returns
DAX SMI CAC FTSE
-0.00933 0.00618 -0.01266 0.00677
-0.00442 -0.00588 -0.01874 -0.00489
0.00900 0.00327 -0.00578 0.00903
-0.00178 0.00148 0.00874 0.00577
-0.00468 -0.00893 -0.00512 -0.00723
0.01243 0.00674 0.01171 0.00852
  • Mean daily CAC return: 0.044%
  • Correlation between DAX and CAC returns: r = 0.734

Statistical Idea: Beta as a Regression Slope

In finance, the beta of an asset measures how strongly it moves with a benchmark.

  • \(\beta = 1\): moves one-for-one with the benchmark.
  • \(\beta > 1\): amplifies the benchmark’s moves (more aggressive).
  • \(\beta < 1\): dampens the benchmark’s moves (more defensive).
  • The intercept (often called alpha) is the average return not explained by the benchmark.
  • The residual is the part of the return that is specific to the asset.

Here we treat DAX as the benchmark and ask for the CAC’s beta.

Mathematics: The Model

The simple linear regression (market) model:

\[R_{\text{CAC},t} = \alpha + \beta\, R_{\text{DAX},t} + \varepsilon_t, \qquad \varepsilon_t \stackrel{iid}{\sim} N(0,\sigma^2)\]

Least squares minimizes

\[SSE = \sum_{t=1}^{n}\left(r_{\text{CAC},t} - \alpha - \beta\, r_{\text{DAX},t}\right)^2\]

The estimated beta is also a ratio of covariance to variance:

\[\hat\beta = \frac{\widehat{\mathrm{Cov}}(R_{\text{DAX}},R_{\text{CAC}})}{\widehat{\mathrm{Var}}(R_{\text{DAX}})} = r\,\frac{s_{\text{CAC}}}{s_{\text{DAX}}}\]

Mathematics: Inference for Beta

A \(95\%\) confidence interval for \(\beta\):

\[\hat\beta \pm t_{n-2,\,0.975}\; SE(\hat\beta), \qquad SE(\hat\beta)=\frac{\hat\sigma}{\sqrt{\sum_t (x_t-\bar x)^2}}\]

To test whether the CAC moves with the DAX at all, we test \(H_0:\beta=0\) using

\[t=\frac{\hat\beta}{SE(\hat\beta)} \sim t_{n-2} \quad \text{under } H_0\]

To ask whether the CAC is more or less volatile than the DAX, test \(H_0:\beta=1\) with \(t=(\hat\beta-1)/SE(\hat\beta)\).

R Code

library(ggplot2)
library(plotly)

# Prices -> daily log returns
prices  <- as.data.frame(EuStockMarkets)
returns <- as.data.frame(apply(log(prices), 2, diff))

# Beta of CAC relative to DAX
fit <- lm(CAC ~ DAX, data = returns)
summary(fit)
confint(fit)

# Test H0: beta = 1
b  <- coef(summary(fit))["DAX", ]
tt <- (b["Estimate"] - 1) / b["Std. Error"]
2 * pt(-abs(tt), df = fit$df.residual)

ggplot(returns, aes(DAX, CAC)) +
  geom_point(alpha = 0.3, color = "#8C1D40") +
  geom_smooth(method = "lm", color = "#FFC627")

Visualization 1: Returns Move Together

Each dot is one trading day. The upward slope of the fitted line is the beta.

What the Model Says

Regression coefficients (returns in decimal form)
Estimate Std. Error t value Pr(>|t|) Lower95 Upper95
(Intercept) -0.0000758 0.000174 -0.4354 0.6634 -0.0004171 0.0002656
DAX 0.7865000 0.016870 46.6300 0.0000 0.7534000 0.8196000
  • Estimated beta: 0.786, 95% CI (0.753, 0.82).
  • A 1% rise in the DAX goes with about a 0.79% rise in the CAC, on average.
  • \(R^2 = 0.539\): the DAX explains about 54% of the CAC’s daily variation.
  • Test of \(H_0:\beta=1\): p-value = 2.7^{-35}.

Visualization 2: Checking the Residuals

Residuals are centered at zero, but notice that their spread changes over time. Calm and volatile periods cluster, which is a well-known feature of financial returns (volatility clustering) and a limit of the constant-variance assumption.

Interactive: Three Markets at Once (3D Plotly)

Rotate and zoom! The points form a tilted cloud: when DAX and SMI move up, so does CAC. Color shows the FTSE tends to move along as well.

What Did We Learn?

  • Question: How does the CAC respond to moves in the DAX?
  • Answer: The two markets move closely together, with an estimated beta of about 0.79, and the relationship is highly statistically significant.
  • Strength: The DAX alone explains about 54% of the CAC’s daily variation.
  • Caution: Residual variance changes over time (volatility clustering), so standard errors from this simple model may be too optimistic.
  • Next step: Add other markets (multiple regression) or model changing volatility (GARCH).

Co-movement is not causation: both markets also respond to common global news. This is not investment advice.

Sources

  • R dataset EuStockMarkets: daily closing prices of major European stock indices, 1991-1998 (Erste Bank AG, Vienna), distributed with base R.
  • Packages: ggplot2, plotly (R).