plotmo(object = stop("no 'object' arg"),
type=NULL, nresponse = NA, clip = TRUE, ylim = NULL,
center = FALSE, ndiscrete = 5,
degree1 = TRUE, all1=FALSE, degree2 = TRUE, all2=FALSE,
grid.func = median, grid.levels = NULL,
col.response = 0, cex.response = 1, pch.response = 1,
jitter.response=0, npoints = -1,
inverse.func = NULL, trace = FALSE,
nrug = 0, col.degree1 = 1, lty.degree1 = 1, lwd.degree1 = 1,
col.smooth = 0, lty.smooth = 1, lwd.smooth = 1,
se = 0, col.shade = "lightgray", col.se = 0, lty.se = 2,
func = NULL, col.func = "lightblue", lty.func = 1, lwd.func = 1,
ngrid1 = 50,
type2 = "persp", ngrid2 = 20,
col.image = gray(0:10/10), col.persp = "lightblue",
theta = NA, phi = 30, dvalue = 1, shade = 0.5,
do.par = TRUE, caption = NULL, main = NULL,
xlab = "", ylab = "", cex = NULL, cex.lab = 1,
xflip = FALSE, yflip = FALSE, swapxy = FALSE, ...)
predict
.
For legal values see the predict
method for
your object
(such as
predict.earth
predict
returns multiple columns.
This can be a column index or column name
(which may be abbreviated, partial matching is used).
Ignored when predict
returns a single column.TRUE
, meaning plot only predicted values that
are in the expected range.
Use FALSE
to plot all values.
See ``The clip
argument'' section below for details.NULL
(default) all y axes have same limits
(where ``y'' is actually ``z'' on degree2 plots).
The limits are the min and max values of the predicted response
across all plots (after applying clip
FALSE
.
(This is an initial implementation of centering, details will change.)5
(a somewhat arbitrary value).
Variables with no more than ndiscrete
unique values
are plotted as quantized in plots (a staircase rather than a curve).
Factors are always considered discrete.TRUE
, meaning all degree1 plots (the TRUE
gets recycled).
Use FALSE
(or 0
) for no degree1 plots.
The easiest way to use thFALSE
.
Use TRUE
to plot all predictors,
not just those usually selected by plotmo
.
See ``Which variables are plotted?'' below.
The all1
argument increases the number of ploTRUE
, meaning all degree2 plots.FALSE
.
Use TRUE
to plot all pairs of predictors,
not just those usually selected by plotmo
.median
.
(This argument is ignored for factors. The first level of
factors is used. NULL
.
Else a list of variables and their fixed value to be used
when the variable is not on the axis.
Supersedes grid.func
for variables in the list.
Names and values can be abbreviated, partial maty
in the data
used to build the model.
Default is 0, don't plot the response.
Can be a vector, for example,
col.response=as.nume
1
.
Applies only if col.response!=0
.1
.
Applies only if col.response!=0
.col.response!=0
.
Default 0
, no jitter.
A typical useful value is .3
, but it depends on the data.
Points are jittered horizontally and verticalcol.response!=0
.
Default is the special value -1
meaning all.
Otherwise a sample of npoints
points is taken.NULL
.
Else a function applied to the predicted response before plotting.
For example, you could use inverse.func=exp
if your
model formula is log(y)~x
.FALSE
.
Use TRUE
to trace operation.
Use values greater than 1
for more detailed tracing.
The following arguments are for degree1 (main effect) plots0
, no rug.
Special value -1
for all.
Otherwise a sample of nrug
points is taken.1
.1
.1
.col.response
is set.)
This refers to the response y
in the data
used to build the model.
Default is 0
1
.
Applies only if col.smooth!=0
.1
.
Applies only if col.smooth!=0
.se
times the pointwise standard errors.
Default is 0
, no standard error bands.
A typical value would be 2
.
The predict method for the model object
se
shading. Default is "lightgray"
.
Use 0
for no shading.
Applies only if se!=0
.se
lines. Default is 0
, no lines just shading.
Applies only if se!=0
.se
lines. Default is 2
.func(x)
if func
is not NULL
.
Default is NULL
.
This is useful if you are comparing the model to a known function.
The func
is called for each plot with a single argfunc
line.
Default is "lightblue"
.func
line.
Default is 1.func
line.
Default is 1.50
.""
, no label, which gives more plottable area.
The special value NULL
means use the current variable xlab
.
The following arguments are for degree2 plotsngrid2 x ngrid2
points are plotted,
but less for factors and variables with less than ngrid2
discrete values).
Default is 20
.
Note 1: the default will often be too small for image
plot.
Default is gray(0:10/10)
, a range of grays.
Clipped values will be displayed in blue (only applies if clip=TRUE
).persp
surface. Default is "lightblue"
.
Use 0 for no color.persp
.
Default is NA
, meaning automatically rotate each graph
so the highest corner is furthest away.
Use trace=TRUE
to see the calculated valuepersp
. Default is 30
.
Lower values to view from the side; higher to view from above.persp
as d
. Default is 1
.
The name was changed from d
to avoid partial matching problems.persp
. Default is 0.5
.
The following are related to par
and other graphical settings.TRUE
, meaning start a new page and call par
as
appropriate (this adjusts mfrow
, cex
, mar
, and mgp
).
Use FALSE
to type
, response name, and call
.caption
, for the overall title.1
.FALSE
.
Use TRUE
to flip the direction of the x axis.
This argument (and yflip
and swapxy
) is useful when comparing
to a plot from another source and you want the axes to be the samFALSE
.
Use TRUE
to flip the direction of the y axis of the degree2 graphs.FALSE
.
Use TRUE
to swap the x and y axes on the degree2 graphs.persp
plots, ticktype="d", nticks=2
is useful.)Plotmo
can be used on a wide variety of regression models.
It plots a degree1 (main effect) plot by calling predict
to
predict the response when changing one variable while holding all
other variables at their median values.
For degree2 (interaction) plots, two variables are changed while holding others
at their medians.
The first level is used instead of the median for factors.
You can change this with the grid.func
and
grid.levels
arguments.Each graph shows only a thin slice of the data because most variables are fixed. Please be aware of that when interpreting the graph --- over-interpretation is a temptation.
Plotmo
was originally part of the earth
package
and a few connections to that package still remain.
Limitations
NAs are not yet supported.
To prevent confusing error messages from functions called by plotmo
,
it is safest to remove NAs before building your model.
(However, rpart
models are treated specially by
plotmo
. For these, plotmo
predicts with na.pass
so plotmo
can be used with rpart
's default NA handling.)
Keep the variable names in the original model formula simple.
Use temporary variables or attach
rather than using
$
and similar in formulas.
Plotmo
evaluates the model data in the environment
used when the model was built, if that environment was saved with the model
(typically this is the case if the formula interface was used to the
model function). If the environment was not saved with the model
(typically if the x,y
interface was used),
the model data is evaluated in the environment in which plotmo
is called.
Alternatives
An alternative approach is to use partial dependence plots
(e.g. The Elements of Statistical Learning 10.13.2).
Plotmo
sets the ``other'' variables to their median
value, whereas in a partial dependence plot at each plotted point the
effect of the other variables is averaged.
(Eventually plotmo
will be enhanced to draw partial dependence plots.)
Termplot
is effective where applicable, but
it can be used only on models with a predict
method that
supports type="terms"
, and it does not generate
degree2 plots.
Which variables are plotted?
The set of variables plotted for some common objects is listed below.
This may leave out variables that you would like to see ---
in that case use all1=TRUE
and all2=TRUE
.
[object Object],[object Object],[object Object],[object Object],[object Object]
The clip
argument
With the default clip=TRUE
, predicted values out of the
expected range are not displayed.
Generally, the ``expected range'' is the range of the response
y
used when building the model.
But that depends on the type of model, and plotmo
knows about some special cases.
For example, it knows that for some models we are predicting a
probability, and it scales the axes accordingly, 0
to 1
.
However, plotmo
cannot know about every possible model and
prediction type
, and will sometimes determine the expected response range
incorrectly.
In that case use clip=FALSE
.
The default clip
is TRUE
because it is a useful sanity
check to test that the predicted values are in the expected range.
While not necessarily an error, predictions outside the expected range
are usually something we want to know about.
Also, with clip=FALSE
, a few errant predictions can expand the
entire y-axis, making it difficult to see the shape of the other
predictions.
Using plotmo
on various models
Here are some examples which illustrate plotmo
on various
objects.
(The models here are just for illustrating plotmo
and
shouldn't be taken too seriously.)
# use a small set of variables for illustration
library(earth) # for ozone1 data
data(ozone1)
oz <- ozone1[, c("O3", "humidity", "temp", "ibt")]
lm.fit <- lm(O3 ~ humidity + temp*ibt, data=oz) # linear model plotmo(lm.fit, se=2, col.response="gray", nrug=-1)
library(rpart) # rpart rpart.fit <- rpart(O3 ~ ., data=oz) plotmo(rpart.fit, all2=TRUE)
library(randomForest) # randomForest rf.fit <- randomForest(O3~., data=oz) plotmo(rf.fit) # partialPlot(rf.fit, oz, temp) # compare to partial dependence plot
library(gbm) # gbm gbm.fit <- gbm(O3~., data=oz, dist="gaussian", inter=2, n.trees=1000) plotmo(gbm.fit) # plot(gbm.fit, i.var=2) # compare to partial dependence plots # plot(gbm.fit, i.var=c(2,3))
library(mgcv) # gam gam.fit <- gam(O3 ~ s(humidity)+s(temp)+s(ibt)+s(temp,ibt), data=oz) plotmo(gam.fit, se=2, all2=TRUE)
library(nnet) # nnet set.seed(4) nnet.fit <- nnet(O3~., data=scale(oz), size=2, decay=0.01, trace=FALSE) plotmo(nnet.fit, type="raw", all2=T)
library(MASS) # qda lcush <- data.frame(Type=as.numeric(Cushings$Type),log(Cushings[,1:2])) lcush <- lcush[1:21,] qda.fit <- qda(Type~., data=lcush) plotmo(qda.fit, type="class", all2=TRUE, type2="contour", ngrid2=100, nlevels=2, drawlabels=FALSE, col.response=as.numeric(lcush$Type)+1, pch.response=as.character(lcush$Type)) Extending plotmo
Plotmo
needs to access the data used to build the model.
It does that with the method functions listed below.
The default methods suffice for many objects.
However, the default methods don't work (plotmo
will issue
an error message) if the model function did not save
the call or data with the object in a standard fashion.
Object-specific methods can usually be written to deal with such
issues.
See plotmo.methods.gbm.R
in the plotmo
source code for an example.
The methods are:
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object] Common error messages
oError in match.arg(type): 'arg' should be one of ...
The message is probably issued by the predict
method for your
model object
.
See the appropriate predict
help page.oError: predicted values are out of ylim, try clip=FALSE
Probably plotmo
has incorrectly determined the expected range
of the response, and hence also ylim
.
Re-invoke plotmo
with clip=FALSE
.
See the section ``The clip
argument''.oError: predict.lm(xgrid, type="response") returned a response of the wrong length.
oWarning: 'newdata' had 100 rows but variable(s) found have 30 rows
oError: variable 'x' was fitted with type "nmatrix.2" but type "numeric" was supplied
oError in model.frame: invalid type (list) for variable 'x[,3]'
These and similar messages usually mean that predict
is
misinterpreting the new data generated by plotmo
.
The underlying issue is that many predict
methods, including
predict.lm
, seem to reject any reasonably constructed new data
for certain models. The work-around is to simplify or standardize the
way the model function is called. Use a formula and a data frame, or
at least explicitly name the the variables rather than passing a
matrix. Use simple variable names (so x1
rather than
dat$x1
, for example).
If the symptoms persist after changing the way the model is called,
and the model is not one of those listed in ``Which variables are
plotted'', it is possible that the model class is not supported
by plotmo
. See ``Extending plotmo''.oError: get.plotmo.x.default cannot get the x matrix
This and similar messages mean that plotmo
cannot get the data
it needs from the model object
.
You can try simplifying and standardizing the way the
model function is called, as described above.
Perhaps you need to use keepxy
or similar in the call to the
model function, so the data is attached to the object and available for
plotmo
.
Is a variable that was used to build the model no longer available in
the environment when plotmo
is called?oError: this object is not supported by plotmo
Plotmo
's default methods are insufficient for your model object.
See ``Extending plotmo'' above (and contact the author --- this is often
easy to fix).FAQ
o I am not seeing any interaction plots. How can I change that?
Use all2=TRUE
.
By default, degree2 plots are drawn only for some types of model.
See the section ``Which variables are plotted?''.
o The persp
display is unnaturally jagged. How can I change that?
Use clip=FALSE
.
The jaggedness is probably an artifact of the way persp
works
at the boundaries.
You can also try increasing ngrid2
.
o The image
display has blue ``holes'' in it. What gives?
The holes are areas where the predicted response is out-of-range.
Try using clip=FALSE
.
o I want to add lines or points to a plot created by plotmo
.
and am having trouble getting my axis scaling right. Help?
Use do.par=FALSE
or do.par=2
.
With the default do.par=TRUE
, plotmo
restores the
par
parameters and axis scales to
their values before plotmo
was called.
www.milbo.org/rpart-plot/prp.pdf
has a section on plotmo
library(earth)
data(ozone1)
earth.model <- earth(O3 ~ ., data = ozone1, degree = 2)
plotmo(earth.model)
Run the code above in your browser using DataCamp Workspace