make_3dplot <- function(dat, with_plane = FALSE) {
p <- dat %>%
plot_ly(x = ~review_scores_cleanliness,
y = ~review_scores_location,
z = ~review_scores_rating,
size = 2) %>%
add_markers() %>%
layout(scene = list(xaxis = list(title = "Cleanliness"),
yaxis = list(title = "Location"),
zaxis = list(title = "Rating")))
if (!with_plane) return(p)
lm_surf <- lm(review_scores_rating ~ review_scores_cleanliness + review_scores_location,
data = dat) %>%
get_regression_points(newdata = expand.grid(review_scores_cleanliness = 2:10,
review_scores_location = 2:10))
p %>%
add_trace(x = lm_surf$review_scores_cleanliness,
y = lm_surf$review_scores_location,
z = lm_surf$review_scores_rating_hat,
type = "mesh3d")
}
make_3dplot(airbnb)
make_3dplot(airbnb, with_plane = TRUE)