# How to compute adjusted R-squared (in Python, using statsmodels)

See all solutions.

If we have fit a multivariate linear model, how can we compute the Adjusted $R^2$ for that model, to measure its goodness of fit?

## Solution

We assume you have already fit a multivariate linear model to some data, as in the code below. (If youâ€™re unfamiliar with how to do so, see how to fit a multivariate linear model.) The data shown below is fake, and we assume you will replace it with your own real data if you use this code.

1
2
3
4
5
6
7
8
9
10
11
12
import pandas as pd
import statsmodels.api as sm
df = pd.DataFrame( {
'x1':[2, 7, 4, 3, 11, 18, 6, 15, 9, 12],
'x2':[4, 6, 10, 1, 18, 11, 8, 20, 16, 13],
'x3':[11, 16, 20, 6, 14, 8, 5, 23, 13, 10],
'y':[24, 60, 32, 29, 90, 45, 130, 76, 100, 120]
} )
xs = df[['x1', 'x2', 'x3']]
y = df['y']
model = sm.OLS(y, xs).fit()


You can get a lot of information about your model from its summary.

1
model.summary()

1
2
/opt/conda/lib/python3.11/site-packages/scipy/stats/_stats_py.py:1806: UserWarning: kurtosistest only valid for n>=20 ... continuing anyway, n=10
warnings.warn("kurtosistest only valid for n>=20 ... continuing "

Dep. Variable: R-squared: y 0.594 OLS 0.390 Least Squares 2.921 Mon, 24 Jul 2023 0.122 17:47:21 -45.689 10 99.38 6 100.6 3 nonrobust
coef std err t P>|t| [0.025 0.975] 77.2443 27.366 2.823 0.030 10.282 144.206 -2.7009 2.855 -0.946 0.381 -9.686 4.284 7.2989 2.875 2.539 0.044 0.265 14.333 -4.8607 2.187 -2.223 0.068 -10.211 0.490
 Omnibus: Durbin-Watson: 2.691 2.123 0.26 1.251 0.524 0.535 1.62 58.2

Notes:
[1] Standard Errors assume that the covariance matrix of the errors is correctly specified.

In particular, that printout contains the Adjusted $R^2$ value; it is the second value in the right-hand column, near the top.

You can also obtain it directly, as follows:

1

1

In this case, the Adjusted $R^2$ is $0.3904$.