- R-squared is the share of the variation in \( y \) that your regression explains. In 500 house sales, floor area alone explains 55.2% of the variation in price.
- R-squared never falls when you add a regressor, even pure noise. Adding three columns of random numbers to our house model still raised it.
- Adjusted R-squared charges a price for each extra regressor: \( \bar{R}^2 \) \( = 1 – (1-R^2)\dfrac{n-1}{n-k-1} \). It rises only if the new variable’s \( |t| \) is greater than 1, and it can be negative.
- Use R-squared to describe how much a model explains; use adjusted R-squared to compare models with different numbers of regressors on the same \( y \) and the same sample.
- Adjusted R-squared is a mild penalty. For choosing variables, an \( F \) test, AIC/BIC or out-of-sample fit is more reliable.
R-squared vs adjusted R-squared is a question every regression table forces on you: the output prints both, they are usually close, and it is not obvious which to quote. This guide explains what each one measures, why R-squared can only go up, how adjusted R-squared corrects for that, whether it can be negative, what counts as a “good” value, and when neither is the right tool. Every number is computed from the house-price and wage datasets that accompany Econometrics Made Simple (Chapters 3 and 6), with code in Python, R and Stata.
What R-squared measures
Start with the simplest model in the book: the price of a house (in $000) regressed on its floor area in square feet, for 500 sales. OLS gives \( \widehat{\text{price}} \) \( = 115.22 + 0.1408\,\text{sqft} \): about $141 per extra square foot.
Prices vary a lot around their mean of $369,100. Measure that variation by the total sum of squares, \( \text{SST} \) \( = \sum(y_i – \bar{y})^2 \). OLS splits it into a part the fitted line explains and a part it leaves in the residuals:
For the houses, \( \text{SST} \) \( = 7{,}167{,}333 \), \( \text{SSE} \) \( = 3{,}953{,}551 \) and \( \text{SSR} \) \( = 3{,}213{,}782 \).
Here \( R^2 \) \( = 3{,}953{,}551 / 7{,}167{,}333 \) \( = 0.5516 \). Floor area explains 55.2% of the variation in house prices; the other 44.8% is due to everything else (location, age, condition, luck). In a simple regression \( R^2 \) is also the squared correlation between \( y \) and \( x \): \( \text{corr(price, sqft)}^2 \) \( = 0.5516 \).[1]
The problem: R-squared never falls when you add a variable
Add a second regressor and \( R^2 \) can only rise or stay the same. The reason is simple. When you add \( x_{k+1} \), OLS could set its coefficient to zero and keep all the others, which would reproduce the old residuals exactly. OLS chooses the coefficients that make SSR as small as possible, so the new SSR is at most the old one. SST does not change, so \( R^2 \) \( = 1 – \text{SSR}/\text{SST} \) cannot fall.[2]
That holds even if the new variable is meaningless. To prove it, we added three columns of computer-generated random numbers (noise1 to noise3) to the house data. They have nothing to do with prices, yet each one nudged \( R^2 \) upwards, from 0.6783 to 0.6803. A model with enough junk variables will always “explain” more. That is the flaw adjusted R-squared was designed to fix.
Adjusted R-squared: R-squared with a penalty
The trick is to replace the two sums of squares with variance estimates that account for degrees of freedom. SSR has \( n – k – 1 \) degrees of freedom (with \( k \) regressors plus an intercept), and SST has \( n – 1 \).
Adding a regressor now has two effects. SSR falls, which raises \( \bar{R}^2 \); but \( n – k – 1 \) also falls, which lowers it. Which effect wins depends on how much the new variable really contributes. The numerator \( \text{SSR}/(n-k-1) \) is \( s^2 \), the estimated error variance, so \( \bar{R}^2 \) \( = 1 – s^2/s_y^2 \): adjusted R-squared rises exactly when the standard error of the regression falls. The idea goes back to the early econometrics literature and is often credited to Theil.[3]
A log-wage model for 1,000 workers (Chapter 6 of the book) has eight regressors and \( R^2 = 0.2736 \). Compute \( \bar{R}^2 \), and see what it would be with only 40 workers.
With 1,000 observations the penalty for eight regressors is tiny (0.006). With 40 it wipes out more than two-thirds of the apparent fit. The penalty matters most when \( k \) is large relative to \( n \).
R-squared vs adjusted R-squared: side by side
| R-squared | Adjusted R-squared | |
|---|---|---|
| Formula | \( 1 – \text{SSR}/\text{SST} \) | \( 1 – (1-R^2)(n-1)/(n-k-1) \) |
| Range | 0 to 1 (with an intercept) | Up to 1; can be negative |
| Adding a regressor | Always rises or stays the same | Rises only if the new variable’s \( |t| > 1 \) |
| Size | Always at least as large | Always below \( R^2 \) when \( k \ge 1 \) |
| Interpretation | Share of variation in \( y \) explained in this sample | Corrected estimate of the population share; no “percentage” reading |
| Best used for | Describing a single model’s fit | Comparing models with different \( k \), same \( y \), same sample |
A worked example: building a house-price model one variable at a time
To see the two measures part company, we start from price on floor area and add one variable at a time: the age of the house, distance to the city centre, a pool dummy, bathrooms, bedrooms, lot size, and finally the three noise variables. Here is what happens in the full sample of 500 sales.
| \( k \) | Variable added | \( t \) of added variable | \( R^2 \) | Adjusted \( R^2 \) |
|---|---|---|---|---|
| 1 | sqft | 24.75 | 0.5516 | 0.5507 |
| 2 | age | −8.42 | 0.6076 | 0.6060 |
| 3 | dist_cbd | −9.48 | 0.6678 | 0.6658 |
| 4 | pool | 3.50 | 0.6758 | 0.6732 |
| 5 | bathrooms | 1.66 | 0.6776 | 0.6744 |
| 6 | bedrooms | 0.84 | 0.6781 | 0.6742 |
| 7 | lot | 0.62 | 0.6783 | 0.6738 |
| 8 | noise1 | 0.75 | 0.6787 | 0.6735 |
| 9 | noise2 | 1.07 | 0.6795 | 0.6736 |
| 10 | noise3 | 1.15 | 0.6803 | 0.6738 |
Three lessons stand out.
- R-squared rises at every step, including the three noise variables. Read on its own, it would tell you the 10-variable model is the best.
- Adjusted R-squared peaks at five variables (0.6744) and then falls when bedrooms (\( t = 0.84 \)) and lot size (\( t = 0.62 \)) are added. Check the rule: adjusted R-squared rises at a step if and only if the added variable has \( |t| > 1 \). It holds at every row of the table.[4]
- The penalty is mild. Two of the noise variables happen to have \( |t| \) just above 1, so adjusted R-squared ticks up when they enter. With pure noise, \( |t| > 1 \) happens by chance roughly a third of the time. Adjusted R-squared reduces over-fitting; it does not prevent it.
The same exercise with 30 houses
Repeat the sequence on only the first 30 sales and the gap between the two measures becomes large. With all ten variables, \( R^2 = 0.8411 \) but \( \bar{R}^2 = 0.7575 \): the penalty is now 0.08, not 0.007. Small samples also let noise look important: in the 30-house sample, noise1 has \( t = -2.09 \) and lifts adjusted R-squared from 0.7329 to 0.7685, purely by chance. The fewer observations per regressor, the more both measures flatter the model.
Can adjusted R-squared be negative?
Yes. Because \( (n-1)/(n-k-1) > 1 \), a model whose \( R^2 \) is small enough ends up below zero. Take 15 house sales and regress price on the three noise variables alone. \( R^2 = 0.1919 \), which sounds like 19% explained. But
A negative adjusted R-squared means the model does worse than simply predicting the mean price for every house, once you allow for the parameters it used up. The \( F \) test agrees: \( F = 0.87 \), \( p = 0.485 \). Ordinary R-squared, by contrast, is never negative in a regression with an intercept (it can be negative in a model without one, or when you compute it on new data, which is why software packages sometimes disagree about how to define it).[9]
Running both in Python, R and Stata
Python (statsmodels)import pandas as pd, statsmodels.formula.api as smf
houses = pd.read_csv("houses.csv")
m = smf.ols("price ~ sqft + age + dist_cbd + pool + bathrooms", data=houses).fit()
print(m.rsquared, m.rsquared_adj) # 0.6776 0.6744
n, k = m.nobs, m.df_model
print(1 - (1 - m.rsquared) * (n - 1) / (n - k - 1)) # same as rsquared_adj
R
m <- lm(price ~ sqft + age + dist_cbd + pool + bathrooms, data = houses)
summary(m)$r.squared # 0.6776
summary(m)$adj.r.squared # 0.6744
Stata
regress price sqft age dist_cbd pool bathrooms
display e(r2) " " e(r2_a) // R-squared and adjusted R-squared
estat ic // AIC and BIC
What is a good R-squared?
There is no universal threshold, and an answer of “above 0.7” is a myth. What counts as good depends on the data and on what the model is for.
- Cross-section data on people (wages, test scores, spending) typically give \( R^2 \) between 0.1 and 0.4. Our wage model explains 27% of the variation in log wages and still estimates the return to education precisely.
- Time series in levels (GDP, consumption) often give \( R^2 \) above 0.95 simply because both sides trend upwards. A high value there can be a warning sign of a spurious regression, not a triumph.
- For causal questions, \( R^2 \) is beside the point. What matters is whether the omitted factors in the error are correlated with the regressor you care about. A low \( R^2 \) with a credible design beats a high \( R^2 \) with omitted-variable bias.[5]
- For prediction, fit matters, but fit on new data, not the sample used to estimate the model.
Beyond adjusted R-squared: better ways to choose a model
Adjusted R-squared is a useful first check, but it is not a formal test and its penalty is light. Three better tools are standard.
1. An F test for groups of variables. Do bathrooms, bedrooms and lot size together add anything to a model with sqft, age, distance and pool? \( R^2 \) rises from 0.6758 to 0.6783. The \( F \) statistic is \( \dfrac{(0.6783 – 0.6758)/3}{(1 – 0.6783)/492} \) \( = 1.28 \), \( p = 0.28 \): no. In the wage data, by contrast, three region dummies raise adjusted R-squared from 0.2677 to 0.2759 and are jointly significant (\( F = 4.72 \), \( p = 0.003 \)).
2. Information criteria. AIC and BIC also trade fit against the number of parameters, with bigger penalties.[6][7] Lower is better. In the full house sample the four-variable model has the lowest AIC (5,650.9) and BIC (5,672.0) of the 4-, 7- and 10-variable models; adjusted R-squared preferred the five-variable one.
3. Out-of-sample fit. Estimate on half the data and predict the other half. We fitted the models on the first 250 sales and predicted the other 250:
| Regressors | \( R^2 \) (estimation half) | Adjusted \( R^2 \) | \( R^2 \) on the other 250 sales |
|---|---|---|---|
| 4 (sqft, age, dist_cbd, pool) | 0.6946 | 0.6896 | 0.6451 |
| 7 (+ bathrooms, bedrooms, lot) | 0.7003 | 0.6916 | 0.6391 |
| 10 (+ three noise variables) | 0.7047 | 0.6924 | 0.6332 |
In-sample, both measures keep rising. On new data, the predictions get worse as variables are added. This is over-fitting in one table, and it shows why machine-learning practice relies on validation data rather than adjusted R-squared.[8]
Practice questions
Give answers to 4 decimal places unless told otherwise.
EasyQ1. A regression with 4 regressors and 50 observations has \( R^2 = 0.60 \). Compute adjusted \( R^2 \). Show worked answer
EasyQ2. For 500 houses, SST = 7,167,333 and SSR = 3,213,782 in a regression of price on sqft. Find \( R^2 \) and adjusted \( R^2 \), and interpret \( R^2 \). Show worked answer
\( \bar{R}^2 \) \( = 1 – 0.4484 \times 499/498 \) \( = 1 – 0.4493 \) \( = 0.5507 \).
Floor area explains about 55% of the sample variation in house prices.
MediumQ3. Adding bedrooms to a house-price model gives a bedrooms coefficient with \( t = 0.84 \). Without running the regression, say what happens to \( R^2 \) and to adjusted \( R^2 \). Show worked answer
MediumQ4. Model A regresses price on sqft (\( R^2 = 0.5516 \)); Model B regresses log price on log sqft (\( R^2 = 0.5507 \)). A classmate says Model A fits better. Is she right? Show worked answer
ExamQ5. With \( n = 500 \), a house-price model with four regressors has \( R^2 = 0.6758 \). Adding bathrooms, bedrooms and lot size gives \( R^2 = 0.6783 \). (a) Compute adjusted \( R^2 \) for the larger model. [2] (b) Test whether the three added variables are jointly significant at 5% (the critical value of \( F_{3,492} \) is about 2.62). [4] (c) Explain why the answers to (a) and (b) need not point the same way. [2] Show worked answer
(b) \( F \) \( = \dfrac{(0.6783 – 0.6758)/3}{(1 – 0.6783)/492} \) \( = \dfrac{0.000833}{0.000654} \) \( = 1.27 \) [3]; 1.27 < 2.62, so do not reject: the three variables add nothing significant [1]. (Unrounded \( R^2 \)s give \( F = 1.28 \), \( p = 0.28 \).)
(c) Adjusted \( R^2 \) for adding variables one at a time rises when \( |t| > 1 \), a much weaker standard than a 5% test [1]; it is a descriptive measure, not a hypothesis test with a controlled error rate [1].
ExamQ6. A regression of price on three variables using 15 observations gives \( R^2 = 0.1919 \). (a) Compute adjusted \( R^2 \). [2] (b) Interpret its sign. [2] (c) Can \( R^2 \) itself ever be negative? [2] Show worked answer
(b) Negative: after paying for the three slope parameters, the model predicts no better than the sample mean [1]; the regressors have no explanatory power (here \( F = 0.87 \), \( p = 0.49 \)) [1].
(c) Not in OLS with an intercept on the estimation sample, since SSR \( \le \) SST [1]. It can be negative for a regression without an intercept, or when computed on new data where predictions are worse than the mean [1].
Frequently asked questions
What is the difference between R-squared and adjusted R-squared?
R-squared is the share of the variation in \( y \) explained by the model, and it never falls when you add a variable. Adjusted R-squared corrects for the number of regressors using degrees of freedom, so it falls when a new variable adds too little (when its \( |t| < 1 \)).
Why is adjusted R-squared lower than R-squared?
Because it multiplies the unexplained share \( 1 – R^2 \) by \( (n-1)/(n-k-1) \), which is greater than 1 whenever the model has at least one regressor. The gap is small with many observations per regressor and large with few.
Should I report R-squared or adjusted R-squared?
Most journals and textbooks report both. Use R-squared to describe the fit of a single model and adjusted R-squared when comparing models with different numbers of regressors. Neither should decide whether a variable belongs in a causal model.
Can adjusted R-squared be greater than R-squared?
No. For any model with at least one regressor, \( \bar{R}^2 < R^2 \) unless \( R^2 = 1 \), in which case both equal 1.
Is a low R-squared bad?
Not necessarily. Individual behaviour is noisy, so cross-section models often explain less than a third of the variation. A low R-squared means predictions for individuals are imprecise; it does not mean the coefficients are biased.
What is the difference between adjusted R-squared and predicted R-squared?
Adjusted R-squared applies a formula-based penalty on the estimation sample. Predicted (or out-of-sample) R-squared measures how well the model predicts observations that were not used to estimate it, for example by cross-validation. The second is the better guide to over-fitting, as our 250/250 split showed.
Does a high R-squared mean the model is correct?
No. Trending time series give R-squared close to 1 even when unrelated, and a model with omitted-variable bias can fit well while giving the wrong causal answer. Check the residuals, the specification and the identification, not just the fit.
Studying more than one subject? The Complete Book Bundle gives you every Economics, Statistics, Mathematics and Econometrics book we publish in one download. If your statistics needs a refresh first, the Statistics Made Simple bundle covers correlation and sums of squares from the start.
References
- Wooldridge, J. M. (2020). Introductory Econometrics: A Modern Approach, 7th edn, Chapter 2 (goodness of fit) and Chapter 6 (adjusted R-squared). Boston: Cengage Learning.
- Stock, J. H. and Watson, M. W. (2020). Introduction to Econometrics, 4th edn, Chapter 6 “Linear Regression with Multiple Regressors”. Harlow: Pearson.
- Theil, H. (1961). Economic Forecasts and Policy, 2nd edn. Amsterdam: North-Holland.
- Greene, W. H. (2018). Econometric Analysis, 8th edn. New York: Pearson.
- Angrist, J. D. and Pischke, J.-S. (2009). Mostly Harmless Econometrics: An Empiricist’s Companion. Princeton: Princeton University Press.
- Akaike, H. (1974). A new look at the statistical model identification. IEEE Transactions on Automatic Control, 19(6), 716–723.
- Schwarz, G. (1978). Estimating the dimension of a model. Annals of Statistics, 6(2), 461–464.
- James, G., Witten, D., Hastie, T. and Tibshirani, R. (2021). An Introduction to Statistical Learning, with Applications in R, 2nd edn. New York: Springer.
- Kvålseth, T. O. (1985). Cautionary note about \( R^2 \). The American Statistician, 39(4), 279–285.

