Step 1: Exploring the Dataset

# Load dataset
data("USArrests")
# View first few rows
head(USArrests)
##            Murder Assault UrbanPop Rape
## Alabama      13.2     236       58 21.2
## Alaska       10.0     263       48 44.5
## Arizona       8.1     294       80 31.0
## Arkansas      8.8     190       50 19.5
## California    9.0     276       91 40.6
## Colorado      7.9     204       78 38.7
# Structure of dataset
str(USArrests)
## 'data.frame':    50 obs. of  4 variables:
##  $ Murder  : num  13.2 10 8.1 8.8 9 7.9 3.3 5.9 15.4 17.4 ...
##  $ Assault : int  236 263 294 190 276 204 110 238 335 211 ...
##  $ UrbanPop: int  58 48 80 50 91 78 77 72 80 60 ...
##  $ Rape    : num  21.2 44.5 31 19.5 40.6 38.7 11.1 15.8 31.9 25.8 ...
# Summary statistics
summary(USArrests)
##      Murder          Assault         UrbanPop          Rape      
##  Min.   : 0.800   Min.   : 45.0   Min.   :32.00   Min.   : 7.30  
##  1st Qu.: 4.075   1st Qu.:109.0   1st Qu.:54.50   1st Qu.:15.07  
##  Median : 7.250   Median :159.0   Median :66.00   Median :20.10  
##  Mean   : 7.788   Mean   :170.8   Mean   :65.54   Mean   :21.23  
##  3rd Qu.:11.250   3rd Qu.:249.0   3rd Qu.:77.75   3rd Qu.:26.18  
##  Max.   :17.400   Max.   :337.0   Max.   :91.00   Max.   :46.00
# Dimensions
dim(USArrests)
## [1] 50  4
# Correlation matrix
cor(USArrests)
##              Murder   Assault   UrbanPop      Rape
## Murder   1.00000000 0.8018733 0.06957262 0.5635788
## Assault  0.80187331 1.0000000 0.25887170 0.6652412
## UrbanPop 0.06957262 0.2588717 1.00000000 0.4113412
## Rape     0.56357883 0.6652412 0.41134124 1.0000000

Step 2: Visualizing the Dataset

# Histograms
hist(USArrests$Murder, main="Histogram of Murder Rates", xlab="Murder")

hist(USArrests$Assault, main="Histogram of Assault Rates", xlab="Assault")

# Boxplot
boxplot(USArrests$UrbanPop, main="Boxplot of Urban Population")

# Scatterplot Matrix
pairs(USArrests, main="Scatterplot Matrix")

Step 3: Data Mining Process

# Splitting the data into train and test
set.seed(1234)
ind <- sample(2, nrow(USArrests), replace=TRUE, prob=c(0.7,0.3))
trainData <- USArrests[ind==1,]
testData <- USArrests[ind==2,]

# Decision Tree
library(party)
## Loading required package: grid
## Loading required package: mvtnorm
## Loading required package: modeltools
## Loading required package: stats4
## Loading required package: strucchange
## Loading required package: zoo
## 
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
## 
##     as.Date, as.Date.numeric
## Loading required package: sandwich
myFormula <- Murder ~ Assault + UrbanPop + Rape
crime_ctree <- ctree(myFormula, data=trainData)

# Plot Decision Tree
plot(crime_ctree)

# Predictions
table(predict(crime_ctree), trainData$Murder > median(trainData$Murder))
##                   
##                    FALSE TRUE
##   3.17                10    0
##   5.6                  9    2
##   11.7052631578947     1   18

Conclusion

This project explored, visualized, and applied a decision tree model on the USArrests dataset.