As the name implies, visreg
is primarily designed to
visualize regression models. However, it is also compatible with any
formula-based model class that supplies a predict
method,
which includes models such as random forests and support vector
machines. Such methods are often thought of as
`black boxes'', but
visreg` offers a convenient way to
visualize the resulting fit and possibly gain some insight into the
model. Some of these packages do not automatically handle missing data,
so we first create a complete-case data set:
aq <- na.omit(airquality)
Random forests
library(randomForest, quietly=TRUE)
fit <- randomForest(Ozone ~ Solar.R + Wind + Temp, data=aq)
visreg(fit, "Temp", ylab="Ozone")
Support vector machines
Note that neither random forests nor support vector machines are able to provide confidence bands for fitted values, so no shaded bands appear.
Gradient boosted trees
The implementation of gradient boosted trees in the gbm
package does not offer a residuals
method. This would
normally cause visreg
to omit plotting the partial
residuals. However, we can supply our own user-defined
residuals
method:
residuals.gbm <- function(fit) {fit$data$y - fit$fit}
This is useful to be aware of in general: if you are ever working
with a model class that does not provide a residuals
method
or a predict
method, you can always write your own.
Once defined, we
library(gbm)
fit <- gbm(Ozone ~ Solar.R + Wind + Temp, data=aq, distribution="gaussian")
visreg(fit, "Temp", ylab="Ozone")
Note that the default settings for gbm
do not produce a
very good fit here. In particular, the default number of trees (100) is
too low to capture the relationship between temperature and ozone. By
increasing the number of trees, we obtain a much more reasonable
fit:
fit <- gbm(Ozone ~ Solar.R + Wind + Temp, data=aq, distribution="gaussian", n.trees=5000)
visreg(fit, "Temp", ylab="Ozone")
This is a nice illustration of how visualizing a “black box” method
using visreg
can provide insight into setting some of the
tuning parameters of these methods.