Ames housing more in depth: Added Variable Plots (avPlots)

I did some exploratory data analysis with Tableau on the Ames housing dataset from the eponymous Kaggle competition. Time to switch to R for uglier if more informative plots: I will use Added Variable Plots to get further insight on the interactions between variables in predicting the price of a house.

First of all I selected a handful of features to concentrate on. Instead of going by gut feeling, I used the importance score from randomForest, since I had already written a script using that function. The importance drops sharply after the 11th feature, so I stuck to the first 11, which happen to be more or less the same that I considered in the previous visualisations.

Importance of features

With these variables I set up a linear model in R using lm. I use the function avPlots from the car library to do some regression diagnostics on the model. Warning: ugly plots to follow.

Added variable plot for overall quality

This is the added variable plot for the most important variable, the Overall Quality score. Added variable plots are a way to look at the effect of an independent variable on the dependent variable in a regression with multiple independent variables, as is our case. They are explained well here. Let’s just say that they are like looking at the regression residuals as a function of the given variable, but better, because they take into account correlations between the independent variables. Do use these plots every time you run a regression, please.

Anyway, we see that the sale price increases OverallQual, no surprises here. The relation seems linear and not overly affected by outliers. So we can move on.

Added variable plot for GrLivArea

GrLivArea doesn’t look linear. There is also an ugly outlier in the lower-right corner (around (1500, -0.4)) that has lots of leverage on the regression. Let’s address the non-linearity first. I already had the feeling that a log transform would improve the situation even before seeing the plot, because of the large range in area covered by the dataset: so let’s switch to log GrLivArea.

Added variable plot for Log GrLivArea

So this is the added variable plot for log GrLivArea in a new model where GrLivArea was replaced by its log. This looks so much better, and the outlier also magically disappeared. The adjusted R-square of the model also went up a little bit, from 0.849 to 0.857. Let’s move on to another feature: YearBuilt.

Added variable plot for YearBuilt

I don’t like it but I can’t put my finger on why. All the points seem concentrated near the origin, with little leverage, and the slope is set by the few points that are far to the right or to the left. Can’t blame the data for being what they are. Still, even without looking at the plot, I already planned to use the age of the building (difference between the year of the sale YrSold, and the year in which the house was built or remodeled, YearRemodAdd) instead of YearBuilt.

Added variable plot for age

Ok, new model with Age replacing YearBuilt. This plot looks nicer even though there is a hint of nonlinearity. Maybe it’s worth a adding quadratic in Age. Anyway, before doing that, let me celebrate that the adjusted R-square went up a little bit more. Note that until now I kept the number of parameters in the model constant, by the way.

What about GarageCars? I wasn’t expecting the size of the garage in terms of cars to be so important. Let’s look at its added variable plot.

Added variable plot for GarageCars

Look at that point to the extreme right and at the one on the left at around y = -0.2. Bad, bad outliers. A look at the variable GarageCars shows that it is mostly 0, 1, 2, or 3. Who needs a garage where more than three cars fit? Only five homeowners out of 1460, in this dataset. And their houses aren’t the most expensive ones, not even close.

Median prices of houses as a function of GarageCars

Well, I’ll think about this. Meanwhile, based on the understanding gained so far, this script does get a slightly better leaderboard score than the previous one, where I was already making some avPlots.