Exploring mtcars Data

1. Exploratory Data Analysis

data("mtcars")
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
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
str(mtcars)
## 'data.frame':    32 obs. of  11 variables:
##  $ mpg : num  21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ...
##  $ cyl : num  6 6 4 6 8 6 8 4 4 6 ...
##  $ disp: num  160 160 108 258 360 ...
##  $ hp  : num  110 110 93 110 175 105 245 62 95 123 ...
##  $ drat: num  3.9 3.9 3.85 3.08 3.15 2.76 3.21 3.69 3.92 3.92 ...
##  $ wt  : num  2.62 2.88 2.32 3.21 3.44 ...
##  $ qsec: num  16.5 17 18.6 19.4 17 ...
##  $ vs  : num  0 0 1 1 0 1 0 1 1 1 ...
##  $ am  : num  1 1 1 0 0 0 0 0 0 0 ...
##  $ gear: num  4 4 4 3 3 3 3 4 4 4 ...
##  $ carb: num  4 4 1 1 2 1 4 2 2 4 ...

As of right now, the data does not show anything unusual. With further investigation, we’ll be able to observe is there is anything out of the ordinary.

2. Visualization

boxplot(mtcars$mpg,
        main = "Boxplot of Miles per Gallon",
        ylab = "Miles per Gallon")

The boxplot shows the distribution of miles per gallon among the automobiles in the dataset.

3. Correlations

plot(mtcars$wt, mtcars$mpg, 
     main = "Vehicle Weight vs. Miles per Gallon", 
     xlab = "Weight", 
     ylab = "Miles per Gallon", pch = 19)

The scatterplot shows a negative relationship between vehicle weight and miles per gallon. As vehicle weight increases, miles per gallon decrease.

4. Variables most strongly correlated with mpg

cor_mpg <- cor(mtcars)[, "mpg"]

sort(abs(cor_mpg[-1]), decreasing = TRUE)
##        wt       cyl      disp        hp      drat        vs        am      carb 
## 0.8676594 0.8521620 0.8475514 0.7761684 0.6811719 0.6640389 0.5998324 0.5509251 
##      gear      qsec 
## 0.4802848 0.4186840

The results show that several variables have strong relationships with mpg. In particular, wt, cyl, disp, and hp have strong negative correlations with miles per gallon. This means that automobiles with greater weight, more cylinders, greater displacement, or more horsepower generally tend to have lower miles per gallon.

5. Checking for missing data

colSums(is.na(mtcars))
##  mpg  cyl disp   hp drat   wt qsec   vs   am gear carb 
##    0    0    0    0    0    0    0    0    0    0    0
sum(is.na(mtcars))
## [1] 0

There is no missing values in the data. The evidence is shown above where I calculated the total number of missing values.

6. Use boxplot to check for outliers

boxplot(mtcars,
        main = "Boxplots of mtcars Variables", 
        las = 2)

The boxplots show that some variables contain observations that may be considered outliers.

7. Apply standardization. Report max and min of standarization.

mtcars$hp_rs <- (mtcars$hp - min(mtcars$hp)) / (max(mtcars$hp) - min(mtcars$hp))

min(mtcars$hp_rs) 
## [1] 0
max(mtcars$hp_rs)
## [1] 1

The minimum value is 0 and the maximum value is 1.

8. Winsorize the variable. Report new max and min.

wt_cutoffs <- quantile(mtcars$wt, probs = c(0.05, 0.95))

mtcars$wt_win <- pmin(pmax(mtcars$wt, wt_cutoffs[1]), wt_cutoffs[2])

min(mtcars$wt_win)
## [1] 1.736
max(mtcars$wt_win)
## [1] 5.29275

The new minimum value is 1.736 and the new maximum value is 5.29275.