Simple Linear Regression using mtcars

Chaitanya Krishna Yadav Sulam

Introduction

This presentation examines how car weight affects fuel efficiency (MPG) using simple linear regression.

Dataset

We use the built-in mtcars dataset: - mpg: fuel efficiency - wt: vehicle weight (in 1000 lbs) - hp: horsepower - cyl: number of cylinders

Regression Model (Math Slide)

\[ MPG = \beta_0 + \beta_1 \cdot Weight + \epsilon \]

Hypothesis Test (Math Slide)

\[ H_0: \beta_1 = 0 \]

\[ H_1: \beta_1 \ne 0 \]

Scatter Plot with Regression Line (ggplot)

ggplot(df, aes(wt, mpg)) +
  geom_point(size = 3) +
  geom_smooth(method = "lm", se = TRUE) +
  labs(title = "MPG vs Weight",
       x = "Weight (1000 lbs)",
       y = "MPG")
## `geom_smooth()` using formula = 'y ~ x'

3D Plot (plotly)

plot_ly(df, x = ~wt, y = ~hp, z = ~mpg,
        type = "scatter3d", mode = "markers")

Fit the Regression Model (Code Slide)

fit <- lm(mpg ~ wt, data = df)
summary(fit)
## 
## Call:
## lm(formula = mpg ~ wt, data = df)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -4.5432 -2.3647 -0.1252  1.4096  6.8727 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  37.2851     1.8776  19.858  < 2e-16 ***
## wt           -5.3445     0.5591  -9.559 1.29e-10 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 3.046 on 30 degrees of freedom
## Multiple R-squared:  0.7528, Adjusted R-squared:  0.7446 
## F-statistic: 91.38 on 1 and 30 DF,  p-value: 1.294e-10

Residual Diagnostics (ggplot)

aug <- augment(fit)
ggplot(aug, aes(.fitted, .resid)) +
  geom_hline(yintercept = 0, linetype = "dashed") +
  geom_point() +
  labs(title = "Residuals vs Fitted",
       x = "Fitted MPG",
       y = "Residuals")

Q–Q Plot (ggplot)

ggplot(aug, aes(sample = .std.resid)) +
  stat_qq() + stat_qq_line() +
  labs(title = "Normal Q–Q Plot",
       x = "Theoretical Quantiles",
       y = "Standardized Residuals")

Conclusion

Prediction Example

new_cars <- tibble(wt = c(2.5, 3.2, 4.0))
predict(fit, newdata = new_cars, interval = "prediction")
##        fit       lwr      upr
## 1 23.92395 17.554110 30.29378
## 2 20.18282 13.865817 26.49982
## 3 15.90724  9.527355 22.28712