# Visualizing a regression plane (two predictors)

Plotting a “simple” regression (one regression) is pretty straight forward in R.

# Setup

library(tidyverse)
data(mtcars)
library(mosaic)
library(modelr)
library(plotly)

# Define model

lm1 <- lm(mpg ~ hp, data = mtcars)

mtcars <- mtcars %>%
mutate(lm1_pred = predict(lm1))

# Plot

One way:

ggplot(mtcars) +
aes(y = mpg, x = hp) +
geom_point() +
geom_lm()

Another way:

ggplot(mtcars) +
aes(x = hp) +
geom_point(aes(y = mpg)) +
geom_point(aes(y = lm1_pred), color = "blue") +
geom_line(aes(y = lm1_pred), color = "blue")

Using the ggformula interface to ggplot2:

gf_point(mpg ~ hp, data = mtcars) %>%
gf_lm()

# 3D scatterplot with regression plane

## Define model with two predictors

lm2 <- lm(mpg ~ hp  + wt, data = mtcars)

mtcars <-
mtcars %>%
mutate(lm2_pred = predict(lm2))

## Plot with plotly

Define prediction grid as the cartesian product of (the unique values of) weight and hp.

wts <- unique(mtcars$wt) hps <- unique(mtcars$hp)

wts <- seq(min(mtcars$wt), max(mtcars$wt), length.out = 25)
hps <- seq(min(mtcars$hp), max(mtcars$hp), length.out = 25)

pred_grid <- expand.grid(wts, hps) %>%
rename(wt = Var1,
hp = Var2) %>%