Measures of Fit (R², Standard Error of Estimate, ANOVA) (CFA Level 1): Coefficient of Determination (R²) and Overfitting Consideration. Key definitions, formulas, and exam tips.
By now, you’ve explored the mechanics of fitting a simple linear regression (SLR) model (see previous sections in Chapter 10). You’ve likely practiced drawing a straight line through data points to capture how changes in an independent variable (X) might help predict the dependent variable (Y). But how do you decide if your model is doing a good job? This is where measures of fit come in. In simple linear regression, the main tools—R², Standard Error of Estimate (SEE), and an Analysis of Variance (ANOVA) framework—help you figure out whether your regression line is truly capturing the underlying relationship or basically just guessing.
I remember the first time I ran a simple regression for an investment project: I felt super excited seeing that line drawn neatly through the points, but I wasn’t sure whether the line was genuinely useful or if I was fooling myself. Understanding R², SEE, and ANOVA quickly became vital. So, in this portion, we’ll talk about each of these measures in a slightly informal, hopefully friendly, way. We’ll also walk through some real-world examples and point out a few pitfalls that might trip you up in practice.
The coefficient of determination, R², is a fancy term for a down-to-earth concept: out of all the variation in the dependent variable (Y), how much can be explained by our independent variable (X)? If you recall from earlier chapters, we often blame “randomness” or “noise” for the differences we see in outcomes, so it’s definitely good news if a large portion of the changes in Y are actually explained by X rather than by random factors.
Mathematically, in the context of a simple linear regression:
where:
R² always falls between zero and one in standard cases of ordinary least squares (OLS). An R² of 0.75, for example, means that 75% of the variability in Y is explained by X (and by your linear model). In common language, that’s pretty good. On the other hand, a small R² (like 0.05) means that X explains only 5% of Y’s variation. You might need a better predictor, or perhaps there’s a more complex relationship not captured by a simple linear framework.
Now, in simple linear regression, overfitting is less of a concern than in big, complicated models—because you only have one explanatory variable. Still, if you add more variables (in multiple regression scenarios), R² will only increase or stay the same; it never goes down. That’s why we typically move on to “adjusted R²” in multiple regression contexts. But for this chapter’s scope, you can just treat R² as a straightforward measure of how well your single X tracks changes in Y.
Suppose you are trying to predict monthly stock returns (Y) from changes in consumer sentiment (X). You gather 24 monthly observations. After running a regression, you find R² = 0.60. That means that 60% of the variance in stock returns is “explained” by consumer sentiment changes. In practice, that’s fairly high for financial markets, where so many random shocks can influence asset prices. If you only saw R² = 0.05, you might realize consumer sentiment alone does not do a stellar job at predicting those returns.
While R² is a nice ratio-based measure, it doesn’t directly tell you the typical magnitude of your model’s errors in the original units of Y. That’s where the standard error of estimate (SEE) comes into play. This measure, sometimes called the residual standard error or standard error of the regression, can be interpreted as “how far off, on average, your predictions are (in the same units of Y).”
In a simple linear regression:
We divide by \( n - 2 \) (instead of \( n \)) because we lose two degrees of freedom: one for the slope (\(\beta_1\)) and one for the intercept (\(\beta_0\)).
A smaller SEE suggests that your regression line is hugging the data more tightly. Sometimes, you’d rather see “a small average error” than a large R² if your context calls for minimal absolute predictive error. For instance, in forecasting daily changes in currency exchange rates, even a relatively low R² could still be operationally useful if your typical prediction error (SEE) is consistently small.
A quick comparison: R² is a proportion (0–1), whereas SEE is measured in the actual Y units (e.g., in dollars, returns, or basis points). One quick anecdote: I once ran a wage regression where R² was around 0.40. That might not sound super impressive. But the SEE was only $2,000 per year in a dataset where average salary was $60,000. So, in context, that was quite decent because the typical error was not that large relative to the scale of annual salary.
The phrase “analysis of variance” (ANOVA) sounds more intimidating than it is. In simple linear regression, ANOVA is just a structured way to decompose total variation (TSS) into explained (RSS) and unexplained (SSE) parts. It also provides a framework to formally test how well your model fits, typically via the F-statistic.
An ANOVA table for simple linear regression often has these rows and columns:
Degrees of freedom (DF)
– Model: 1 (because we have one slope)
– Residual: \(n - 2\)
– Total: \(n - 1\)
Sum of Squares (SS)
– Regression Sum of Squares (RSS)
– Sum of Squared Errors (SSE)
– Total Sum of Squares (TSS)
Mean Square (MS)
– MS(Regression) = RSS ÷ 1
– MS(Residual) = SSE ÷ (n – 2)
F-statistic
– F = MS(Regression) / MS(Residual)
You might notice a pattern if you recall the earlier formulas:
Essentially, R² tracks the ratio of what your model explains vs. the total, while SEE measures the average leftover error in actual units. The ANOVA table conveniently consolidates these calculations in one place and includes the F-statistic, which tests whether \(\beta_1 = 0\) is plausible.
If your F-statistic is high (relative to its critical value from an F-distribution with 1 and \(n – 2\) degrees of freedom), you reject the null hypothesis that \(\beta_1 = 0\). In simpler terms, you conclude that X significantly influences Y and that your linear regression is statistically meaningful at your chosen significance level.
Just a heads up: In simple linear regression, the F-stat and the t-stat on the slope coefficient \(\beta_1\) are intimately related. Indeed, \(F = t^2\). So if your slope’s t-test is significant, your overall F-test for the regression is also significant.
In practice, analysts often focus on a combination of these to gauge whether the model is both statistically significant and practically useful, given the scale of the data.
Below is a Mermaid diagram that visually breaks down how TSS splits into RSS and SSE in a simple linear regression:
flowchart LR
A["TSS (Total Sum of Squares)"] --> B["Regression Sum of Squares (RSS)"]
A --> C["Sum of Squared Errors (SSE)"]
TSS represents all the variation in the dependent variable. The regression line “explains” RSS portion, while SSE is the leftover unexplained part. R² tells you how big the RSS piece is, relative to the whole pie (TSS).
Let’s do a step-by-step scenario. Imagine you are a junior analyst at a small asset management firm. Your boss wants you to build a simple model to see if changes in long-term interest rates (X) predict changes in a broad real estate investment trust (REIT) index (Y). You have 30 monthly observations.
You run a simple linear regression in Python (or any statistical software) with: Y = \(\beta_0\) + \(\beta_1\)X + \(\epsilon\).
The resulting output:
– R² = 0.45
– SSE = 420.0
– TSS = 763.6
– So, RSS = 763.6 – 420.0 = 343.6
– SEE = sqrt(420.0 / (30 – 2)) = sqrt(420 / 28) ≈ sqrt(15) ≈ 3.87
The ANOVA table might look like this (conceptually):
| Source | SS | DF | MS | F-Stat = MSR / MSE |
|---|---|---|---|---|
| Regression | 343.6 | 1 | 343.6 | 343.6 / 15.0 ≈ 22.9 |
| Residual | 420.0 | 28 | 15.0 | |
| Total | 763.6 | 29 | – |
The F-stat is about 22.9. You compare it to an F distribution with (1, 28) degrees of freedom. That might yield a p-value near zero, suggesting a statistically significant relationship.
So, how do we interpret this?
Here’s a quick snippet of how you might compute these in Python for your future reference:
1import numpy as np
2import statsmodels.api as sm
3
4X = np.array([2.1, 2.3, 2.4, 2.0, 2.5, ...]) # 30 monthly obs for interest rates
5Y = np.array([1.2, 0.8, 2.3, 1.5, 1.7, ...]) # 30 monthly obs for REIT returns
6
7X = sm.add_constant(X)
8
9model = sm.OLS(Y, X).fit()
10print(model.summary())
That summary includes R², F-stat, and other fit measures in a standard regression output.
Measures of fit—R², SEE, and ANOVA—are central to deciding whether your regression line can reliably capture the relationship between X and Y. R² answers “how much,” SEE answers “how badly are we off in our predictions,” and ANOVA ties everything together into a neat framework that, via the F-statistic, shows whether the overall model is worth keeping.
In finance, these tools guide us in everything from forecasting returns to assessing macroeconomic indicators’ impact on portfolio performance. Understanding them is a core step toward deeper regression analysis, especially once you move on to multiple regression (Chapter 14) or time-series analysis (Chapter 12). Keep practicing. Once you start seeing how these measures fluctuate under different conditions, you’ll develop an intuitive feel that helps you build better analyses throughout your CFA career—trust me, I’ve been there, double-checking that R² score at 2 AM!
Important Notice: FinancialAnalystGuide.com provides supplemental CFA study materials, including mock exams, sample exam questions, and other practice resources to aid your exam preparation. These resources are not affiliated with or endorsed by the CFA Institute. CFA® and Chartered Financial Analyst® are registered trademarks owned exclusively by CFA Institute. Our content is independent, and we do not guarantee exam success. CFA Institute does not endorse, promote, or warrant the accuracy or quality of our products.