MPG vs. Vehicle Weight and Engine Displacement
\[\Large MPG = \beta_0 + \beta_1(Weight) + \beta_2(Displacement) + \varepsilon\]
# Remove rows with N/A values
cars_clean <- na.omit(cars)
# Multiple linear regression
mpg_model <- lm(mpg ~ weight + displacement, data = cars_clean)
b0 <- round(coef(mpg_model)[1], 4)
b1 <- round(coef(mpg_model)[2], 4)
b2 <- round(coef(mpg_model)[3], 4)
cat("NOTE: For prediction, we typically assume epsilon = 0 (the average case)\n
General Equation
MPG = ", b0, " + ", b1, "(Weight) + ", b2, "(Displacement)\n\n", sep = "")
NOTE: For prediction, we typically assume epsilon = 0 (the average case)
General Equation
MPG = 43.9005 + -0.0058(Weight) + -0.0164(Displacement)
# Solve for MPG (example)
example_weight <- 3000
example_displacement <- 200
prediction = b0 + b1 * example_weight + b2 * example_displacement
cat("Example Calculation:
If weight: ", example_weight, " lbs
If displacement: ", example_displacement, " cu in
MPG = ", b0, " + ", b1, "(", example_weight, ") + ", b2, "(", example_displacement, ")
MPG = ", prediction, " mpg\n\n", sep = "")
Example Calculation:
If weight: 3000 lbs
If displacement: 200 cu in
MPG = 43.9005 + -0.0058(3000) + -0.0164(200)
MPG = 23.2205 mpg
# Remove rows with N/A values
cars_clean <- na.omit(cars)
# Multiple Linear Regression plane for fuel efficiency
mpg_model <- lm(mpg ~ weight + displacement, data = cars_clean)
weight_range <- seq(min(cars_clean$weight), max(cars_clean$weight), length.out = 20)
displacement_range <- seq(min(cars_clean$displacement), max(cars_clean$displacement), length.out = 20)
grid <- expand.grid(weight = weight_range, displacement = displacement_range)
grid$prediction <- predict(mpg_model, newdata = grid)
# 3D scatter plot
plot_ly() %>%
add_trace(x = cars_clean$weight, y = cars_clean$displacement, z = cars_clean$mpg,
type = "scatter3d", mode = "markers",
marker = list(color = "forestgreen", size = 3),
showlegend = FALSE) %>%
add_surface(x = weight_range, y = displacement_range,
z = matrix(grid$prediction, nrow = length(weight_range), ncol = length(displacement_range)),
colorscale = list(list(0, "blue"), list(1, "blue")),
opacity = 0.3,
showscale = FALSE,
name = "fitted") %>%
layout(title = list(text = "MPG vs. Weight and Displacement",
x = 0.5, y = 0.95,
font = list(size = 20)),
scene = list(
xaxis = list(title = "Weight (lbs)"),
yaxis = list(title = "Displacement (cu in)"),
zaxis = list(title = "MPG"),
aspectmode = "cube",
camera = list(eye = list(x = 1.5, y = 1.5, z = 1.5))
),
annotations = list(
text = "Heavier vehicles and larger engines correlate with decreased fuel efficiency",
x = 0.5, y = 0.93,
xref = "paper", yref = "paper",
showarrow = FALSE,
font = list(size = 15, color = "gray")
))