Introduction
Start from the research question and distinguish description, prediction, and causation before choosing a method.
- Signal and noise
- Research design
- Cognitive bias
The complete learning map
All fourteen chapters at a glance, plus concept notes and deeper lessons adapted from the authors’ teaching slides. Each topic keeps the mathematics close to interpretation and code.
All fourteen chapters
Use the sequence as a course roadmap, or enter at the chapter that matches your empirical question.
Start from the research question and distinguish description, prediction, and causation before choosing a method.
Move from visual patterns to covariance, correlation, the regression line, and residuals.
Connect population models to random variables, sampling distributions, estimation, and hypothesis tests.
Learn why a sample correlation varies and how Fisher transforms and tests quantify its uncertainty.
Separate population and sample models, interpret slopes, and understand when exogeneity supports causal meaning.
Interpret ceteris paribus comparisons and diagnose omitted-variable bias using regression anatomy.
Extend the linear model with polynomials, indicators, interactions, and logarithmic transformations.
Adapt regression inference to clusters, multilevel structures, and repeated observations in panel data.
Model probabilities with logistic regression and interpret odds ratios, risk ratios, and risk differences.
Evaluate models out of sample and control complexity with cross-validation, regularization, and trees.
Estimate flexible conditional means with local averages, kernels, and data-driven bandwidths.
Account for temporal dependence using stationarity, autocorrelation, autoregression, and ARIMA models.
Define effects through potential outcomes and connect identification to experiments and quasi-experiments.
Revisit the book’s central distinctions, assumptions, estimators, and diagnostic language as one toolkit.
Six essential notes
Short explanations distilled from the teaching slides provide a bridge into the full book.
Descriptive statistics summarise the observed data. Statistical inference asks how those summaries would vary across repeated samples from a population model.
OLS selects the line whose fitted values make the sum of squared residuals as small as possible. The slope then describes a conditional mean—not automatically a causal effect.
A logistic model passes a linear index through a smooth cumulative distribution function, ensuring fitted probabilities stay between zero and one.
Training error rewards complexity. Test error reveals whether that complexity captures stable signal or merely follows noise in the observed sample.
Kernel regression gives nearby observations more weight. A narrow bandwidth follows local detail; a wide bandwidth produces a smoother, more stable curve.
When observations depend on their own past, random sampling logic no longer applies directly. Stationarity makes temporal relationships stable enough to estimate and forecast.
Chapter 02 · Foundations
How do two variables move together, and how can a cloud of observations become a useful numerical summary?
01 · Begin with the picture
A scatter plot reveals direction, form, strength, and unusual observations. In the running example, apartment size and sales price tend to rise together, but the cloud is wide enough that size alone cannot explain every price.
02 · Standardise joint movement
Covariance averages the products of paired deviations. Dividing by both standard deviations turns it into a unit-free measure bounded between −1 and 1.
Perfect positive linear relationship
No linear relationship—not necessarily no relationship
Perfect negative linear relationship
03 · Run the idea twice
Always pair the coefficient with the scatter plot: correlation compresses the picture, but cannot diagnose nonlinearity or outliers by itself.
Chapter 2 companion code ↗cor(df$living_area,
df$price,
method = "pearson")df["living_area"].corr(
df["price"],
method="pearson")Chapter 06 · Regression models
Move beyond a single predictor to interpret associations while holding other observed variables constant.
01 · The ceteris paribus idea
A simple regression can mix the association of interest with other differences. Multiple regression asks how expected price changes with size among apartments that share the same monthly fee.
02 · From a line to a surface
Each coefficient describes a conditional comparison. The error term collects determinants of the outcome not represented by the included regressors.
03 · Omitted-variable bias
Bias appears when the omitted variable both helps determine the outcome and is associated with an included regressor. Adding variables mechanically is not the solution; controls must follow the question and causal structure.
04 · Robust inference
These parallel examples fit price on living area and monthly fee and request heteroskedasticity-robust standard errors.
Chapter 6 companion code ↗fit <- lm(price ~ living_area +
monthly_fee, data=df)
coeftest(fit, vcov.=vcovHC(fit))fit = smf.ols(
"price ~ living_area + monthly_fee",
data=df).fit(cov_type="HC1")Chapter 13 · Causal analysis
Causal questions compare what happened with what would have happened under a different treatment state.
01 · The fundamental problem
For the same unit at the same moment, only one potential outcome can be observed. Causal inference therefore needs a research design that makes another group, time, threshold, or assignment rule a credible stand-in for the missing counterfactual.
02 · Why naive comparisons fail
Treatment is independent of potential outcomes by design.
Compare changes when untreated trends would have evolved similarly.
Use an instrument that shifts treatment without directly changing the outcome.
Compare units just above and below an assignment cutoff.
03 · Difference in differences
The interaction coefficient captures the treatment group’s additional post-treatment change under the parallel-trends assumption.
Chapter 13 companion code ↗\(\beta_3\) is the difference in changes.
Continue learning
These pages are selective teaching notes, not a substitute for the book. Use the public companion repository to reproduce the examples in R and Python.
Open companion code ↗