This book is in Open Review. We want your feedback to make the book better for you and other students. You may annotate some text by selecting it with the cursor and then click "Annotate" in the pop-up menu. You can also see the annotations of others: click the arrow in the upper right hand corner of the page

6.6 Exercises

1. The Boston Housing Data Set

For the course of this section, you will work with Boston, the Boston Housing data set which contains 506 observations on housing values in suburbs of Boston. Boston data set comes with the package MASS. Both the package MASS and AER are required for the interactive R exercises below, and they are already installed.


  • Load both the package and the data set.

  • Get yourself an overview over the data using function(s) known from the previous chapters.

  • Estimate a simple linear regression model that explains the median house value of districts (medv) by the percent of households with low socioeconomic status, lstat, and a constant. Save the model to bh_mod.

  • Print a coefficient summary to the console that reports robust standard errors.


You only need basic R functions here: library(), data(), lm() and coeftest().

2. A Multiple Regression Model of Housing Prices I

Now, let us expand the approach from the previous exercise by adding additional regressors to the model and estimating it again.

As has been discussed in Chapter 6.3, adding regressors to the model improves the fit so the \(SER\) decreases and the \(R^2\) increases.

The packages AER and MASS have been loaded. The model object bh_mod is available in the environment.


  • Regress the median housing value in a district, medv, on the average age of the buildings, age, the per-capita crime rate, crim, the percentage of individuals with low socioeconomic status, lstat, and a constant. Put differently, estimate the model \[medv_i = \beta_0 + \beta_1 lstat_i + \beta_2 age_i + \beta_3 crim_i + u_i.\]

  • Print a coefficient summary to the console that reports robust standard errors for the augmented model.

  • The \(R^2\) of the simple regression model is stored in R2_res. Save the multiple regression model’s \(R^2\) to R2_unres and check whether the augmented model yields a higher \(R^2\). Use < or > for the comparison.

3. A Multiple Regression Model of Housing Prices II

The equation below describes estimated model from Exercise 2 (heteroskedasticity-robust standard errors in parentheses).

\[ \widehat{medv}_i = \underset{(0.74)}{32.828} \underset{(0.08)}{-0.994} \times lstat_i \underset{(0.03)}{-0.083} \times crim_i + \underset{(0.02)}{0.038} \times age_i\]

This model is saved in bh_mult_mod which is available in the working environment.


As has been stressed in Chapter 6.3, it is not meaningful to use \(R^2\) when comparing regression models with a different number of regressors. Instead, the \(\bar{R}^2\) should be used. \(\bar{R}^2\) adjusts for the circumstance that the \(SSR\) reduces when a regressor is added to the model.

  • Use the model object to compute the correction factor \(CF = \frac{n-1}{n-k-1}\) where \(n\) is the number of observations and \(k\) is the number of regressors, excluding the intercept. Save it to CF.

  • Use summary() to obtain \(R^2\) and \(\bar{R}^2\) for bh_mult_mod. It is sufficient if you print both values to the console.

  • Check that \[\bar{R}^2 = 1 - (1-R^2) \cdot CF.\] Use the == operator.

4. A Fully-Fledged Model for Housing Values?

Have a look at the description of the variables contained in the Boston data set. Which variable would you expect to have the lowest \(p\)-value in a multiple regression model which uses all variables as regressors to explain medv?


  • Regress medv on all remaining variables that you find in the Boston data set.

  • Obtain a heteroskedasticity-robust summary of the coefficients.

  • The \(\bar{R}^2\) for the model in exercise 3 is \(0.5533\). What can you say about the \(\bar{R}^2\) of the large regression model? Does this model improve on the previous one (no code submission needed)?

The packages AER and MASS as well as the data set Boston are loaded to the working environment.


  • For brevity, use the regression formula medv ~. in your call of lm(). This is a shortcut that specifies a regression of medv on all variables in the data set supplied to the argument data.

  • Use summary on both models for a comparison of both \(\bar{R}^2\)s.

5. Model Selection

Maybe we can improve the model by dropping a variable?

In this exercise, you have to estimate several models, each time dropping one of the explanatory variables used in the large regression model of Exercise 4 and compare the \(\bar{R}^2\).

The full regression model from the previous exercise, full_mod, is available in your environment.


  • You are completely free in solving this exercise. We recommend the following approach:

    1. Start by estimating a model mod_new, say, where, e.g., lstat is excluded from the explanatory variables. Next, access the \(\bar{R}^2\) of this model.

    2. Compare the \(\bar{R}^2\) of this model to the \(\bar{R}^2\) of the full model (this was about \(0.7338\)).

    3. Repeat Steps 1 and 2 for all explanatory variables used in the full regression model. Save the model with the highest improvement in \(\bar{R}^2\) to better_mod.