`plot3d.lm.Rd`

This function provides several plots of the result of fitting a two-predictor model.

```
# S3 method for lm
plot3d(x,
which = 1,
plane.col = "gray", plane.alpha = 0.5,
sharedMouse = TRUE,
use_surface3d,
do_grid = TRUE,
grid.col = "black",
grid.alpha = 1,
grid.steps = 5,
sub.steps = 4,
vars = get_all_vars(terms(x), x$model),
clip_to_density = 0,
...)
```

- x
An object inheriting from class

`"lm"`

obtained by fitting a two-predictor model.- which
Which plot to show? See Details below.

- plane.col, plane.alpha
These parameters control the colour and transparency of a plane or surface.

- sharedMouse
If multiple plots are requested, should they share mouse controls, so that they move in sync?

- use_surface3d
Use the

`surface3d`

function to plot the surface rather than`planes3d`

. This allows curved surfaces to be shown. The default is`FALSE`

if the model looks like a simple 2 parameter linear fit, otherwise`TRUE`

.- do_grid
Plot a grid.

- grid.col, grid.alpha, grid.steps
Characteristics of the grid.

- sub.steps
If

`use_surface3d`

is`TRUE`

, use an internal grid of`grid.steps*sub.steps`

to draw the surface.`sub.steps > 1`

allows curvature within facets. Similarly, if`do_grid`

is`TRUE`

, it allows curvature within grid lines.- vars
A dataframe containing the variables to plot in the first three columns, with the response assumed to be in column 1. See the Note below.

- clip_to_density
If positive, the surface, plane or grid will be clipped to a region with sufficient data.

- ...
Other parameters to pass to the default

`plot3d`

method, to control the appearance of aspects of the plot other than the plane.

Three plots are possible, depending on the value(s) in `which`

:

(default) Show the points and the fitted plane or surface.

Show the residuals and the plane at

`z = 0`

.Show the predicted values on the fitted plane or surface.

If `clip_to_density`

is positive, then the
surface, plane or grid will be clipped to
the region where a non-parametric density estimate
(using `MASS::kde2d`

), normalized to have a
maximum value of 1, is greater than the given value.
This will suppress parts of the plot that aren't
supported by the observed data.

Called for the side effect of drawing one or more plots. Invisibly returns a high-level vector of object ids. Names of object ids have the plot number (in drawing order) appended.

The default value for the `vars`

argument will handle
simple linear models with a response and two predictors, and
some models with functions of those two predictors. For
models that fail (e.g. models using `poly`

), you
can include the observed values as in the third example below.

If `clip_to_density > 0`

,

The clipping is approximate, so it may not agree perfectly between surfaces, planes and grids.

This option requires the suggested packages MASS and akima, and will be ignored with a warning if either is not installed.

```
open3d()
ids <- plot3d(lm(mpg ~ wt + qsec, data = mtcars), which = 1:3)
names(ids)
#> [1] "data.1" "axes.1" "xlab.1" "ylab.1" "zlab.1" "plane.1" "grid.1"
#> [8] "data.2" "axes.2" "xlab.2" "ylab.2" "zlab.2" "plane.2" "grid.2"
#> [15] "data.3" "axes.3" "xlab.3" "ylab.3" "zlab.3" "plane.3" "grid.3"
open3d()
#> cleared GL_STACK_UNDERFLOW
plot3d(lm(mpg ~ wt + I(wt^2) + qsec, data = mtcars))
open3d()
# Specify vars in the order: response, pred1, pred2.
plot3d(lm(mpg ~ poly(wt, 3) + qsec, data = mtcars),
vars = mtcars[,c("mpg", "wt", "qsec")])
open3d()
# Clip parts of the plot with few (wt, qsec) points
plot3d(lm(mpg ~ poly(wt, 3) + qsec, data = mtcars),
vars = mtcars[,c("mpg", "wt", "qsec")],
clip_to_density = 0.1)
```