Determine if an automatic or manual transmission is better for MPG using the ‘mtcars’ dataset.
The ‘mtcars’ dataset contains data on 32 cars with variables such as MPG, transmission type, horsepower, and more. The initial box plot indicated that manual transmissions tend to have higher MPG compared for automatic transmissions.
A simple linear model shows a significant difference in MPG between automatic and manual transmissions, with manual providing higher MPG. A multiple linear regression model was fitted that included horsepower, weight, and quarter mile time. That model was a better fit with significant coefficients relative to each other.
Residual plots indicate that the multiple linear model fits the data well.
The coefficients of the model indicate that manual transmissions provide, on average, approximately 2.94 MPG more than automatic transmissions, relative to other factors. Confidence intervals were calculated to quantify the uncertainty.
Manual transmissions provide higher MPG compared to automatic transmissions. This analysis provided the quantifiable measure of the difference and it’s uncertainty.
This is the project for the John Hopkins Regression Models Course to explore the relationship between a set of variables and miles per gallon (MPG) as the outcome.
In this we will:
#Load dataset
data(mtcars)
#View first few rows
head(mtcars)
## mpg cyl disp hp drat wt qsec vs am gear carb
## Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4
## Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4
## Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1
## Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1
## Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2
## Valiant 18.1 6 225 105 2.76 3.460 20.22 1 0 3 1
#Summary of stats
summary(mtcars)
## mpg cyl disp hp
## Min. :10.40 Min. :4.000 Min. : 71.1 Min. : 52.0
## 1st Qu.:15.43 1st Qu.:4.000 1st Qu.:120.8 1st Qu.: 96.5
## Median :19.20 Median :6.000 Median :196.3 Median :123.0
## Mean :20.09 Mean :6.188 Mean :230.7 Mean :146.7
## 3rd Qu.:22.80 3rd Qu.:8.000 3rd Qu.:326.0 3rd Qu.:180.0
## Max. :33.90 Max. :8.000 Max. :472.0 Max. :335.0
## drat wt qsec vs
## Min. :2.760 Min. :1.513 Min. :14.50 Min. :0.0000
## 1st Qu.:3.080 1st Qu.:2.581 1st Qu.:16.89 1st Qu.:0.0000
## Median :3.695 Median :3.325 Median :17.71 Median :0.0000
## Mean :3.597 Mean :3.217 Mean :17.85 Mean :0.4375
## 3rd Qu.:3.920 3rd Qu.:3.610 3rd Qu.:18.90 3rd Qu.:1.0000
## Max. :4.930 Max. :5.424 Max. :22.90 Max. :1.0000
## am gear carb
## Min. :0.0000 Min. :3.000 Min. :1.000
## 1st Qu.:0.0000 1st Qu.:3.000 1st Qu.:2.000
## Median :0.0000 Median :4.000 Median :2.000
## Mean :0.4062 Mean :3.688 Mean :2.812
## 3rd Qu.:1.0000 3rd Qu.:4.000 3rd Qu.:4.000
## Max. :1.0000 Max. :5.000 Max. :8.000
#Plot mpg by trans type
boxplot(mpg ~ am, mtcars, main = "MPG by Transmission Type", xlab = "Transmission: 0 = Auto, 1= Manual", ylab = "MPG")
The dataset contains data on 32 cars with many variables. The boxplot indicates manual transmissions have higher MPG.
We will explore correlations and create a scatter plot to see relationships between the variables. Looking for strong predictors.
#Correlation Matrix - Linear relationships
cor(mtcars)
## mpg cyl disp hp drat wt
## mpg 1.0000000 -0.8521620 -0.8475514 -0.7761684 0.68117191 -0.8676594
## cyl -0.8521620 1.0000000 0.9020329 0.8324475 -0.69993811 0.7824958
## disp -0.8475514 0.9020329 1.0000000 0.7909486 -0.71021393 0.8879799
## hp -0.7761684 0.8324475 0.7909486 1.0000000 -0.44875912 0.6587479
## drat 0.6811719 -0.6999381 -0.7102139 -0.4487591 1.00000000 -0.7124406
## wt -0.8676594 0.7824958 0.8879799 0.6587479 -0.71244065 1.0000000
## qsec 0.4186840 -0.5912421 -0.4336979 -0.7082234 0.09120476 -0.1747159
## vs 0.6640389 -0.8108118 -0.7104159 -0.7230967 0.44027846 -0.5549157
## am 0.5998324 -0.5226070 -0.5912270 -0.2432043 0.71271113 -0.6924953
## gear 0.4802848 -0.4926866 -0.5555692 -0.1257043 0.69961013 -0.5832870
## carb -0.5509251 0.5269883 0.3949769 0.7498125 -0.09078980 0.4276059
## qsec vs am gear carb
## mpg 0.41868403 0.6640389 0.59983243 0.4802848 -0.55092507
## cyl -0.59124207 -0.8108118 -0.52260705 -0.4926866 0.52698829
## disp -0.43369788 -0.7104159 -0.59122704 -0.5555692 0.39497686
## hp -0.70822339 -0.7230967 -0.24320426 -0.1257043 0.74981247
## drat 0.09120476 0.4402785 0.71271113 0.6996101 -0.09078980
## wt -0.17471588 -0.5549157 -0.69249526 -0.5832870 0.42760594
## qsec 1.00000000 0.7445354 -0.22986086 -0.2126822 -0.65624923
## vs 0.74453544 1.0000000 0.16834512 0.2060233 -0.56960714
## am -0.22986086 0.1683451 1.00000000 0.7940588 0.05753435
## gear -0.21268223 0.2060233 0.79405876 1.0000000 0.27407284
## carb -0.65624923 -0.5696071 0.05753435 0.2740728 1.00000000
According to the correlation matrix:
#Scatterplot Matrix - Non-Linear Relationships
pairs(mtcars)
Here we begin to look for trends and patterns. We can confirm visually that as ‘wt’ increases, MPG decreases. Less linear, but ‘hp’ also has a negative relationship with MPG. On a positive note, quarter-mile times (‘qsec’) have a positive relationship indicating cars with higher quarter-mile times have better MPG.
# Fit a simple linear model
model_simple <- lm(mpg ~ am, mtcars)
# Fit a multiple linear regression model
model_multiple <- lm(mpg ~ am + hp + wt + qsec, mtcars)
# Summary of the first model
summary(model_simple)
##
## Call:
## lm(formula = mpg ~ am, data = mtcars)
##
## Residuals:
## Min 1Q Median 3Q Max
## -9.3923 -3.0923 -0.2974 3.2439 9.5077
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 17.147 1.125 15.247 1.13e-15 ***
## am 7.245 1.764 4.106 0.000285 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 4.902 on 30 degrees of freedom
## Multiple R-squared: 0.3598, Adjusted R-squared: 0.3385
## F-statistic: 16.86 on 1 and 30 DF, p-value: 0.000285
The first model shows a positive effect of manual transmission on MPG indicating that manual transmission cars have, on average, 7.245 more MPG than automatic cars.
The p-value (0.000285) is much smaller than the common alpha level of 0.05 indicating this is statistically significant.
This model explains about 36% of the variability between transmission type and MPG.
#Summary of the second model
summary(model_multiple)
##
## Call:
## lm(formula = mpg ~ am + hp + wt + qsec, data = mtcars)
##
## Residuals:
## Min 1Q Median 3Q Max
## -3.4975 -1.5902 -0.1122 1.1795 4.5404
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 17.44019 9.31887 1.871 0.07215 .
## am 2.92550 1.39715 2.094 0.04579 *
## hp -0.01765 0.01415 -1.247 0.22309
## wt -3.23810 0.88990 -3.639 0.00114 **
## qsec 0.81060 0.43887 1.847 0.07573 .
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 2.435 on 27 degrees of freedom
## Multiple R-squared: 0.8579, Adjusted R-squared: 0.8368
## F-statistic: 40.74 on 4 and 27 DF, p-value: 4.589e-11
The second model includes predictors previously identified. (‘hp’,‘wt’,‘qsec’) Right away this model explains the data better with a new model fit of about 86%. This is a better fit also confirmed by smaller residuals and small Residual standard error.
Accounting for the other variables:
-Manual transmission cars showed an increase of 2.93 MPG more than automatic cars. Significant p-value (0.046)
‘hp’ showed a decrease of 0.02 MPG, though NOT significant with a high p-value (0.223)
‘wt’ showed a decrease of 3.80 MPG per 1000lbs. Significant p-value (0.002)
‘qsec’ showed an increase of .81 MPG for each additional second. NOT significant p-value (0.076)
# Residuals plot for the multiple linear regression model
# Residual plot
plot(model_multiple$residuals, main = "Residual Plot", xlab = "Index", ylab = "Residuals")
abline(h = 0, col = "red")
We want randomness, otherwise it suggests non-linearity. So this is good
# Q-Q plot
qqnorm(model_multiple$residuals, main = "Q-Q Plot of Residuals")
qqline(model_multiple$residuals, col = "red")
The Q-Q Plot checks if the data follows a normal distribution. Since most align with the line, this looks normal.
# Confidence intervals for the model coefficients
confint(model_multiple)
## 2.5 % 97.5 %
## (Intercept) -1.68054821 36.5609304
## am 0.05879488 5.7922130
## hp -0.04668118 0.0113881
## wt -5.06401789 -1.4121758
## qsec -0.08988486 1.7110899
# Predicted values and residuals
pred <- predict(model_multiple)
resid <- residuals(model_multiple)
# Plot predicted vs. actual MPG
plot(mtcars$mpg, pred, xlab = "Actual MPG", ylab = "Predicted MPG", main = "Predicted vs. Actual MPG")
abline(0,1, col="red")
This plot shows how well the predicted values match the actual values. Points close to the line indicate good predictions.