1. Exploratory Data Analysis

1.1 Load the mtcars dataset, review its codebook, and report summary statistics for each column. Is there anything you find abnormal?(10pts)

# Load required libraries
library(ggplot2)
## Warning: package 'ggplot2' was built under R version 4.6.1
library(corrplot)
## Warning: package 'corrplot' was built under R version 4.6.1
## corrplot 0.95 loaded
# Load the mtcars dataset
data(mtcars)

# Review the codebook by ?
?mtcars
## starting httpd help server ...
##  done
# Display the first few rows and summary statistics
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(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

Answer: I don’t find any variable abnormal at this stage. Maybe I will discover some later.

1.2 Provide any ONE visualization you used to understand the data (10pts)

# Create scatter plot for mpg vs. wt
ggplot(mtcars, aes(x = wt, y = mpg)) +
  geom_point() +
  labs(title = "MPG vs. Weight", x = "Weight", y = "MPG (Miles per Gallon)")

Answer: I am presenting a scatterplot of MPG (miles per gallon) vs. weight, which shows the relationship between a car’s weight and how many miles it can travel per gallon. The graph shows that as the weight of a car increases, the MPG decreases.

1.4 What variables are most strongly correlated with mpg? Answer this with code ALONG WITH markdown narrative. (10pts)

# Create correlation table
corr_matrix <- cor(mtcars)
print(corr_matrix)
##             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

Answer: Based on the correlation table above, it is evident that -other than wt- variables cyl (# of cylinders), disp (displacement), and hp (gross horsepower) are all strongly correlated with MPG.

1.5 Check whether there are missing data using R codes. If not, show evidence. If yes, which column and how many? (10pts)

# Check 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

Answer: My output shows me that all variables contain a “0” meaning that there are no missing values within the columns.

1.6 Use Box plot to decide if any variable has significant outliers. (10pts)

# Create Box plot
boxplot(mtcars, las=2, cex.axis=0.6)

Answer: The boxplot shows that there could be outliers for hp, qsec, and carb because the data goes above the boxplot “whiskers”.

1.7 Apply range standardization on variable hp, and save it with the new name hp_rs in data.frame mtcars. Report the max and min of the standardized hp_rs to validate. (20pts)

# Apply range standardization
mtcars$hp_rs <- (mtcars$hp - min(mtcars$hp)) /
                (max(mtcars$hp) - min(mtcars$hp))

# Report max and min to validate
min(mtcars$hp_rs)
## [1] 0
max(mtcars$hp_rs)
## [1] 1

Answer: The min is 0 and the max is 1, showing my standardization was successful.

1.8 Winsorize the variable wt with 5%/95%, save it with the new name wt_win, and report the new max and min. (20pts)

# Calculate the 5th and 95th percentiles of "wt"
lower_bound_wt <- quantile(mtcars$wt, 0.05)
upper_bound_wt <- quantile(mtcars$wt, 0.95)

# Winsorize wt and save as wt_win
mtcars$wt_win <- pmin(pmax(mtcars$wt, lower_bound_wt), upper_bound_wt)

# Report the new minimum and maximum
min(mtcars$wt_win)
## [1] 1.736
max(mtcars$wt_win)
## [1] 5.29275

Answer: The new min is 1.736 and the new max is 5.29275.