setwd("C:/Users/acer/Desktop/R Stuff")
library(caret)
## Warning: package 'caret' was built under R version 3.5.1
## Loading required package: lattice
## Loading required package: ggplot2
library(rattle)
## Warning: package 'rattle' was built under R version 3.5.1
## Rattle: A free graphical interface for data science with R.
## Version 5.1.0 Copyright (c) 2006-2017 Togaware Pty Ltd.
## Type 'rattle()' to shake, rattle, and roll your data.
library(corrplot)
## Warning: package 'corrplot' was built under R version 3.5.1
## corrplot 0.84 loaded
Using devices such as Jawbone Up, Nike FuelBand, and Fitbit it is now possible to collect a large amount of data about personal activity relatively inexpensively. These type of devices are part of the quantified self movement - a group of enthusiasts who take measurements about themselves regularly to improve their health, to find patterns in their behavior, or because they are tech geeks. One thing that people regularly do is quantify how much of a particular activity they do, but they rarely quantify how well they do it. In this project, my goal will be to use data from accelerometers on the belt, forearm, arm, and dumbell of 6 participants. They were asked to perform barbell lifts correctly and incorrectly in 5 different ways.
The goal of this project is to predict the manner in which they did the exercise. This is the “classe” variable in the training set. I can use any of the other variables to predict with, use cross validation,find the expected out of sample error and use my prediction model to predict 20 different test cases.
Downloading and loading data in R.
download.file("https://d396qusza40orc.cloudfront.net/predmachlearn/pml-training.csv","training.csv")
download.file("https://d396qusza40orc.cloudfront.net/predmachlearn/pml-testing.csv","testing.csv")
training<-read.csv("training.csv")
testing<-read.csv("testing.csv")
dim(training)
## [1] 19622 160
We see our data has 160 variables including the outcome variable classe and a total of 19622 observations.
str(training$classe)
## Factor w/ 5 levels "A","B","C","D",..: 1 1 1 1 1 1 1 1 1 1 ...
So we see there are 5 different Classes namely A,B,C,D, and E.
First we partition our data into 2 sets ,one for training our model and the other for cross validating it.
set.seed(999)
inTrain<-createDataPartition(training$classe,p=0.70,list=FALSE)
train<-training[inTrain,]
test<-training[-inTrain,]
Since our data is still huge,we start by removing Near Zero Variables from both train and test.
ZeroVar<-nearZeroVar(train,saveMetrics = TRUE)
train<-train[,ZeroVar$nzv==FALSE]
test<-test[,ZeroVar$nzv==FALSE]
str(train)
## 'data.frame': 13737 obs. of 106 variables:
## $ X : int 1 3 4 5 6 8 9 10 12 13 ...
## $ user_name : Factor w/ 6 levels "adelmo","carlitos",..: 2 2 2 2 2 2 2 2 2 2 ...
## $ raw_timestamp_part_1 : int 1323084231 1323084231 1323084232 1323084232 1323084232 1323084232 1323084232 1323084232 1323084232 1323084232 ...
## $ raw_timestamp_part_2 : int 788290 820366 120339 196328 304277 440390 484323 484434 528316 560359 ...
## $ cvtd_timestamp : Factor w/ 20 levels "02/12/2011 13:32",..: 9 9 9 9 9 9 9 9 9 9 ...
## $ num_window : int 11 11 12 12 12 12 12 12 12 12 ...
## $ roll_belt : num 1.41 1.42 1.48 1.48 1.45 1.42 1.43 1.45 1.43 1.42 ...
## $ pitch_belt : num 8.07 8.07 8.05 8.07 8.06 8.13 8.16 8.17 8.18 8.2 ...
## $ yaw_belt : num -94.4 -94.4 -94.4 -94.4 -94.4 -94.4 -94.4 -94.4 -94.4 -94.4 ...
## $ total_accel_belt : int 3 3 3 3 3 3 3 3 3 3 ...
## $ max_roll_belt : num NA NA NA NA NA NA NA NA NA NA ...
## $ max_picth_belt : int NA NA NA NA NA NA NA NA NA NA ...
## $ min_roll_belt : num NA NA NA NA NA NA NA NA NA NA ...
## $ min_pitch_belt : int NA NA NA NA NA NA NA NA NA NA ...
## $ amplitude_roll_belt : num NA NA NA NA NA NA NA NA NA NA ...
## $ amplitude_pitch_belt : int NA NA NA NA NA NA NA NA NA NA ...
## $ var_total_accel_belt : num NA NA NA NA NA NA NA NA NA NA ...
## $ avg_roll_belt : num NA NA NA NA NA NA NA NA NA NA ...
## $ stddev_roll_belt : num NA NA NA NA NA NA NA NA NA NA ...
## $ var_roll_belt : num NA NA NA NA NA NA NA NA NA NA ...
## $ avg_pitch_belt : num NA NA NA NA NA NA NA NA NA NA ...
## $ stddev_pitch_belt : num NA NA NA NA NA NA NA NA NA NA ...
## $ var_pitch_belt : num NA NA NA NA NA NA NA NA NA NA ...
## $ avg_yaw_belt : num NA NA NA NA NA NA NA NA NA NA ...
## $ stddev_yaw_belt : num NA NA NA NA NA NA NA NA NA NA ...
## $ var_yaw_belt : num NA NA NA NA NA NA NA NA NA NA ...
## $ gyros_belt_x : num 0 0 0.02 0.02 0.02 0.02 0.02 0.03 0.02 0.02 ...
## $ gyros_belt_y : num 0 0 0 0.02 0 0 0 0 0 0 ...
## $ gyros_belt_z : num -0.02 -0.02 -0.03 -0.02 -0.02 -0.02 -0.02 0 -0.02 0 ...
## $ accel_belt_x : int -21 -20 -22 -21 -21 -22 -20 -21 -22 -22 ...
## $ accel_belt_y : int 4 5 3 2 4 4 2 4 2 4 ...
## $ accel_belt_z : int 22 23 21 24 21 21 24 22 23 21 ...
## $ magnet_belt_x : int -3 -2 -6 -6 0 -2 1 -3 -2 -3 ...
## $ magnet_belt_y : int 599 600 604 600 603 603 602 609 602 606 ...
## $ magnet_belt_z : int -313 -305 -310 -302 -312 -313 -312 -308 -319 -309 ...
## $ roll_arm : num -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 ...
## $ pitch_arm : num 22.5 22.5 22.1 22.1 22 21.8 21.7 21.6 21.5 21.4 ...
## $ yaw_arm : num -161 -161 -161 -161 -161 -161 -161 -161 -161 -161 ...
## $ total_accel_arm : int 34 34 34 34 34 34 34 34 34 34 ...
## $ var_accel_arm : num NA NA NA NA NA NA NA NA NA NA ...
## $ gyros_arm_x : num 0 0.02 0.02 0 0.02 0.02 0.02 0.02 0.02 0.02 ...
## $ gyros_arm_y : num 0 -0.02 -0.03 -0.03 -0.03 -0.02 -0.03 -0.03 -0.03 -0.02 ...
## $ gyros_arm_z : num -0.02 -0.02 0.02 0 0 0 -0.02 -0.02 0 -0.02 ...
## $ accel_arm_x : int -288 -289 -289 -289 -289 -289 -288 -288 -288 -287 ...
## $ accel_arm_y : int 109 110 111 111 111 111 109 110 111 111 ...
## $ accel_arm_z : int -123 -126 -123 -123 -122 -124 -122 -124 -123 -124 ...
## $ magnet_arm_x : int -368 -368 -372 -374 -369 -372 -369 -376 -363 -372 ...
## $ magnet_arm_y : int 337 344 344 337 342 338 341 334 343 338 ...
## $ magnet_arm_z : int 516 513 512 506 513 510 518 516 520 509 ...
## $ max_picth_arm : num NA NA NA NA NA NA NA NA NA NA ...
## $ max_yaw_arm : int NA NA NA NA NA NA NA NA NA NA ...
## $ min_roll_arm : num NA NA NA NA NA NA NA NA NA NA ...
## $ min_pitch_arm : num NA NA NA NA NA NA NA NA NA NA ...
## $ min_yaw_arm : int NA NA NA NA NA NA NA NA NA NA ...
## $ amplitude_pitch_arm : num NA NA NA NA NA NA NA NA NA NA ...
## $ amplitude_yaw_arm : int NA NA NA NA NA NA NA NA NA NA ...
## $ roll_dumbbell : num 13.1 12.9 13.4 13.4 13.4 ...
## $ pitch_dumbbell : num -70.5 -70.3 -70.4 -70.4 -70.8 ...
## $ yaw_dumbbell : num -84.9 -85.1 -84.9 -84.9 -84.5 ...
## $ max_roll_dumbbell : num NA NA NA NA NA NA NA NA NA NA ...
## $ max_picth_dumbbell : num NA NA NA NA NA NA NA NA NA NA ...
## $ min_roll_dumbbell : num NA NA NA NA NA NA NA NA NA NA ...
## $ min_pitch_dumbbell : num NA NA NA NA NA NA NA NA NA NA ...
## $ amplitude_roll_dumbbell : num NA NA NA NA NA NA NA NA NA NA ...
## $ amplitude_pitch_dumbbell: num NA NA NA NA NA NA NA NA NA NA ...
## $ total_accel_dumbbell : int 37 37 37 37 37 37 37 37 37 37 ...
## $ var_accel_dumbbell : num NA NA NA NA NA NA NA NA NA NA ...
## $ avg_roll_dumbbell : num NA NA NA NA NA NA NA NA NA NA ...
## $ stddev_roll_dumbbell : num NA NA NA NA NA NA NA NA NA NA ...
## $ var_roll_dumbbell : num NA NA NA NA NA NA NA NA NA NA ...
## $ avg_pitch_dumbbell : num NA NA NA NA NA NA NA NA NA NA ...
## $ stddev_pitch_dumbbell : num NA NA NA NA NA NA NA NA NA NA ...
## $ var_pitch_dumbbell : num NA NA NA NA NA NA NA NA NA NA ...
## $ avg_yaw_dumbbell : num NA NA NA NA NA NA NA NA NA NA ...
## $ stddev_yaw_dumbbell : num NA NA NA NA NA NA NA NA NA NA ...
## $ var_yaw_dumbbell : num NA NA NA NA NA NA NA NA NA NA ...
## $ gyros_dumbbell_x : num 0 0 0 0 0 0 0 0 0 0 ...
## $ gyros_dumbbell_y : num -0.02 -0.02 -0.02 -0.02 -0.02 -0.02 -0.02 -0.02 -0.02 -0.02 ...
## $ gyros_dumbbell_z : num 0 0 -0.02 0 0 0 0 0 0 -0.02 ...
## $ accel_dumbbell_x : int -234 -232 -232 -233 -234 -234 -232 -235 -233 -234 ...
## $ accel_dumbbell_y : int 47 46 48 48 48 46 47 48 47 48 ...
## $ accel_dumbbell_z : int -271 -270 -269 -270 -269 -272 -269 -270 -270 -269 ...
## $ magnet_dumbbell_x : int -559 -561 -552 -554 -558 -555 -549 -558 -554 -552 ...
## $ magnet_dumbbell_y : int 293 298 303 292 294 300 292 291 291 302 ...
## $ magnet_dumbbell_z : num -65 -63 -60 -68 -66 -74 -65 -69 -65 -69 ...
## $ roll_forearm : num 28.4 28.3 28.1 28 27.9 27.8 27.7 27.7 27.5 27.2 ...
## $ pitch_forearm : num -63.9 -63.9 -63.9 -63.9 -63.9 -63.8 -63.8 -63.8 -63.8 -63.9 ...
## $ yaw_forearm : num -153 -152 -152 -152 -152 -152 -152 -152 -152 -151 ...
## $ max_roll_forearm : num NA NA NA NA NA NA NA NA NA NA ...
## $ max_picth_forearm : num NA NA NA NA NA NA NA NA NA NA ...
## $ min_roll_forearm : num NA NA NA NA NA NA NA NA NA NA ...
## $ min_pitch_forearm : num NA NA NA NA NA NA NA NA NA NA ...
## $ amplitude_roll_forearm : num NA NA NA NA NA NA NA NA NA NA ...
## $ amplitude_pitch_forearm : num NA NA NA NA NA NA NA NA NA NA ...
## $ total_accel_forearm : int 36 36 36 36 36 36 36 36 36 36 ...
## $ var_accel_forearm : num NA NA NA NA NA NA NA NA NA NA ...
## $ gyros_forearm_x : num 0.03 0.03 0.02 0.02 0.02 0.02 0.03 0.02 0.02 0 ...
## $ gyros_forearm_y : num 0 -0.02 -0.02 0 -0.02 -0.02 0 0 0.02 0 ...
## $ gyros_forearm_z : num -0.02 0 0 -0.02 -0.03 0 -0.02 -0.02 -0.03 -0.03 ...
## [list output truncated]
Next,we remove indicator variables.
train<-train[,-(1:5)]
test<-test[,-(1:5)]
str(train)
## 'data.frame': 13737 obs. of 101 variables:
## $ num_window : int 11 11 12 12 12 12 12 12 12 12 ...
## $ roll_belt : num 1.41 1.42 1.48 1.48 1.45 1.42 1.43 1.45 1.43 1.42 ...
## $ pitch_belt : num 8.07 8.07 8.05 8.07 8.06 8.13 8.16 8.17 8.18 8.2 ...
## $ yaw_belt : num -94.4 -94.4 -94.4 -94.4 -94.4 -94.4 -94.4 -94.4 -94.4 -94.4 ...
## $ total_accel_belt : int 3 3 3 3 3 3 3 3 3 3 ...
## $ max_roll_belt : num NA NA NA NA NA NA NA NA NA NA ...
## $ max_picth_belt : int NA NA NA NA NA NA NA NA NA NA ...
## $ min_roll_belt : num NA NA NA NA NA NA NA NA NA NA ...
## $ min_pitch_belt : int NA NA NA NA NA NA NA NA NA NA ...
## $ amplitude_roll_belt : num NA NA NA NA NA NA NA NA NA NA ...
## $ amplitude_pitch_belt : int NA NA NA NA NA NA NA NA NA NA ...
## $ var_total_accel_belt : num NA NA NA NA NA NA NA NA NA NA ...
## $ avg_roll_belt : num NA NA NA NA NA NA NA NA NA NA ...
## $ stddev_roll_belt : num NA NA NA NA NA NA NA NA NA NA ...
## $ var_roll_belt : num NA NA NA NA NA NA NA NA NA NA ...
## $ avg_pitch_belt : num NA NA NA NA NA NA NA NA NA NA ...
## $ stddev_pitch_belt : num NA NA NA NA NA NA NA NA NA NA ...
## $ var_pitch_belt : num NA NA NA NA NA NA NA NA NA NA ...
## $ avg_yaw_belt : num NA NA NA NA NA NA NA NA NA NA ...
## $ stddev_yaw_belt : num NA NA NA NA NA NA NA NA NA NA ...
## $ var_yaw_belt : num NA NA NA NA NA NA NA NA NA NA ...
## $ gyros_belt_x : num 0 0 0.02 0.02 0.02 0.02 0.02 0.03 0.02 0.02 ...
## $ gyros_belt_y : num 0 0 0 0.02 0 0 0 0 0 0 ...
## $ gyros_belt_z : num -0.02 -0.02 -0.03 -0.02 -0.02 -0.02 -0.02 0 -0.02 0 ...
## $ accel_belt_x : int -21 -20 -22 -21 -21 -22 -20 -21 -22 -22 ...
## $ accel_belt_y : int 4 5 3 2 4 4 2 4 2 4 ...
## $ accel_belt_z : int 22 23 21 24 21 21 24 22 23 21 ...
## $ magnet_belt_x : int -3 -2 -6 -6 0 -2 1 -3 -2 -3 ...
## $ magnet_belt_y : int 599 600 604 600 603 603 602 609 602 606 ...
## $ magnet_belt_z : int -313 -305 -310 -302 -312 -313 -312 -308 -319 -309 ...
## $ roll_arm : num -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 ...
## $ pitch_arm : num 22.5 22.5 22.1 22.1 22 21.8 21.7 21.6 21.5 21.4 ...
## $ yaw_arm : num -161 -161 -161 -161 -161 -161 -161 -161 -161 -161 ...
## $ total_accel_arm : int 34 34 34 34 34 34 34 34 34 34 ...
## $ var_accel_arm : num NA NA NA NA NA NA NA NA NA NA ...
## $ gyros_arm_x : num 0 0.02 0.02 0 0.02 0.02 0.02 0.02 0.02 0.02 ...
## $ gyros_arm_y : num 0 -0.02 -0.03 -0.03 -0.03 -0.02 -0.03 -0.03 -0.03 -0.02 ...
## $ gyros_arm_z : num -0.02 -0.02 0.02 0 0 0 -0.02 -0.02 0 -0.02 ...
## $ accel_arm_x : int -288 -289 -289 -289 -289 -289 -288 -288 -288 -287 ...
## $ accel_arm_y : int 109 110 111 111 111 111 109 110 111 111 ...
## $ accel_arm_z : int -123 -126 -123 -123 -122 -124 -122 -124 -123 -124 ...
## $ magnet_arm_x : int -368 -368 -372 -374 -369 -372 -369 -376 -363 -372 ...
## $ magnet_arm_y : int 337 344 344 337 342 338 341 334 343 338 ...
## $ magnet_arm_z : int 516 513 512 506 513 510 518 516 520 509 ...
## $ max_picth_arm : num NA NA NA NA NA NA NA NA NA NA ...
## $ max_yaw_arm : int NA NA NA NA NA NA NA NA NA NA ...
## $ min_roll_arm : num NA NA NA NA NA NA NA NA NA NA ...
## $ min_pitch_arm : num NA NA NA NA NA NA NA NA NA NA ...
## $ min_yaw_arm : int NA NA NA NA NA NA NA NA NA NA ...
## $ amplitude_pitch_arm : num NA NA NA NA NA NA NA NA NA NA ...
## $ amplitude_yaw_arm : int NA NA NA NA NA NA NA NA NA NA ...
## $ roll_dumbbell : num 13.1 12.9 13.4 13.4 13.4 ...
## $ pitch_dumbbell : num -70.5 -70.3 -70.4 -70.4 -70.8 ...
## $ yaw_dumbbell : num -84.9 -85.1 -84.9 -84.9 -84.5 ...
## $ max_roll_dumbbell : num NA NA NA NA NA NA NA NA NA NA ...
## $ max_picth_dumbbell : num NA NA NA NA NA NA NA NA NA NA ...
## $ min_roll_dumbbell : num NA NA NA NA NA NA NA NA NA NA ...
## $ min_pitch_dumbbell : num NA NA NA NA NA NA NA NA NA NA ...
## $ amplitude_roll_dumbbell : num NA NA NA NA NA NA NA NA NA NA ...
## $ amplitude_pitch_dumbbell: num NA NA NA NA NA NA NA NA NA NA ...
## $ total_accel_dumbbell : int 37 37 37 37 37 37 37 37 37 37 ...
## $ var_accel_dumbbell : num NA NA NA NA NA NA NA NA NA NA ...
## $ avg_roll_dumbbell : num NA NA NA NA NA NA NA NA NA NA ...
## $ stddev_roll_dumbbell : num NA NA NA NA NA NA NA NA NA NA ...
## $ var_roll_dumbbell : num NA NA NA NA NA NA NA NA NA NA ...
## $ avg_pitch_dumbbell : num NA NA NA NA NA NA NA NA NA NA ...
## $ stddev_pitch_dumbbell : num NA NA NA NA NA NA NA NA NA NA ...
## $ var_pitch_dumbbell : num NA NA NA NA NA NA NA NA NA NA ...
## $ avg_yaw_dumbbell : num NA NA NA NA NA NA NA NA NA NA ...
## $ stddev_yaw_dumbbell : num NA NA NA NA NA NA NA NA NA NA ...
## $ var_yaw_dumbbell : num NA NA NA NA NA NA NA NA NA NA ...
## $ gyros_dumbbell_x : num 0 0 0 0 0 0 0 0 0 0 ...
## $ gyros_dumbbell_y : num -0.02 -0.02 -0.02 -0.02 -0.02 -0.02 -0.02 -0.02 -0.02 -0.02 ...
## $ gyros_dumbbell_z : num 0 0 -0.02 0 0 0 0 0 0 -0.02 ...
## $ accel_dumbbell_x : int -234 -232 -232 -233 -234 -234 -232 -235 -233 -234 ...
## $ accel_dumbbell_y : int 47 46 48 48 48 46 47 48 47 48 ...
## $ accel_dumbbell_z : int -271 -270 -269 -270 -269 -272 -269 -270 -270 -269 ...
## $ magnet_dumbbell_x : int -559 -561 -552 -554 -558 -555 -549 -558 -554 -552 ...
## $ magnet_dumbbell_y : int 293 298 303 292 294 300 292 291 291 302 ...
## $ magnet_dumbbell_z : num -65 -63 -60 -68 -66 -74 -65 -69 -65 -69 ...
## $ roll_forearm : num 28.4 28.3 28.1 28 27.9 27.8 27.7 27.7 27.5 27.2 ...
## $ pitch_forearm : num -63.9 -63.9 -63.9 -63.9 -63.9 -63.8 -63.8 -63.8 -63.8 -63.9 ...
## $ yaw_forearm : num -153 -152 -152 -152 -152 -152 -152 -152 -152 -151 ...
## $ max_roll_forearm : num NA NA NA NA NA NA NA NA NA NA ...
## $ max_picth_forearm : num NA NA NA NA NA NA NA NA NA NA ...
## $ min_roll_forearm : num NA NA NA NA NA NA NA NA NA NA ...
## $ min_pitch_forearm : num NA NA NA NA NA NA NA NA NA NA ...
## $ amplitude_roll_forearm : num NA NA NA NA NA NA NA NA NA NA ...
## $ amplitude_pitch_forearm : num NA NA NA NA NA NA NA NA NA NA ...
## $ total_accel_forearm : int 36 36 36 36 36 36 36 36 36 36 ...
## $ var_accel_forearm : num NA NA NA NA NA NA NA NA NA NA ...
## $ gyros_forearm_x : num 0.03 0.03 0.02 0.02 0.02 0.02 0.03 0.02 0.02 0 ...
## $ gyros_forearm_y : num 0 -0.02 -0.02 0 -0.02 -0.02 0 0 0.02 0 ...
## $ gyros_forearm_z : num -0.02 0 0 -0.02 -0.03 0 -0.02 -0.02 -0.03 -0.03 ...
## $ accel_forearm_x : int 192 196 189 189 193 193 193 190 191 193 ...
## $ accel_forearm_y : int 203 204 206 206 203 205 204 205 203 205 ...
## $ accel_forearm_z : int -215 -213 -214 -214 -215 -213 -214 -215 -215 -215 ...
## $ magnet_forearm_x : int -17 -18 -16 -17 -9 -9 -16 -22 -11 -15 ...
## $ magnet_forearm_y : num 654 658 658 655 660 660 653 656 657 655 ...
## [list output truncated]
We notice that a lot of variables are constituted mostly of missing values.Hence we remove those variables from both train and test sets.
MaxNAs<-sapply(train,function(x)mean(is.na(x)))>0.95
train<-train[,MaxNAs==FALSE]
test<-test[,MaxNAs==FALSE]
dim(train)
## [1] 13737 54
dim(test)
## [1] 5885 54
mean(is.na(train))
## [1] 0
mean(is.na(test))
## [1] 0
We Plot a correlation matrix to check whether variables are highly correlated with each other.
Cor<-cor(train[,-54])
corrplot(Cor,"color",type="upper")
We move on with fitting every variable as a predictor.
Now we use different methods to fit a regression model and train it for better accuracy.
set.seed(999)
fit_rpart<-train(classe~.,method="rpart",data=train)
fancyRpartPlot(fit_rpart$finalModel)
pred_rpart<-predict(fit_rpart,test)
confusionMatrix(pred_rpart,test$classe)
## Confusion Matrix and Statistics
##
## Reference
## Prediction A B C D E
## A 1527 473 495 441 163
## B 23 376 31 171 132
## C 120 290 500 352 263
## D 0 0 0 0 0
## E 4 0 0 0 524
##
## Overall Statistics
##
## Accuracy : 0.4974
## 95% CI : (0.4845, 0.5102)
## No Information Rate : 0.2845
## P-Value [Acc > NIR] : < 2.2e-16
##
## Kappa : 0.3425
## Mcnemar's Test P-Value : NA
##
## Statistics by Class:
##
## Class: A Class: B Class: C Class: D Class: E
## Sensitivity 0.9122 0.33011 0.48733 0.0000 0.48429
## Specificity 0.6267 0.92478 0.78905 1.0000 0.99917
## Pos Pred Value 0.4927 0.51296 0.32787 NaN 0.99242
## Neg Pred Value 0.9472 0.85190 0.87936 0.8362 0.89584
## Prevalence 0.2845 0.19354 0.17434 0.1638 0.18386
## Detection Rate 0.2595 0.06389 0.08496 0.0000 0.08904
## Detection Prevalence 0.5266 0.12455 0.25913 0.0000 0.08972
## Balanced Accuracy 0.7694 0.62745 0.63819 0.5000 0.74173
Using R-part, we see that this model predicts with an accuracy of 52% and has an out of sample error of 47.8% .This is not a good prediction model.
set.seed(999)
fit_rf<-train(classe~.,method="rf",data=train,trControl=trainControl(method="cv",number=3,verboseIter=FALSE))
pred_rf<-predict(fit_rf,test)
confusionMatrix(pred_rf,test$classe)
## Confusion Matrix and Statistics
##
## Reference
## Prediction A B C D E
## A 1673 2 0 0 0
## B 0 1135 0 0 0
## C 0 2 1026 7 0
## D 0 0 0 956 0
## E 1 0 0 1 1082
##
## Overall Statistics
##
## Accuracy : 0.9978
## 95% CI : (0.9962, 0.9988)
## No Information Rate : 0.2845
## P-Value [Acc > NIR] : < 2.2e-16
##
## Kappa : 0.9972
## Mcnemar's Test P-Value : NA
##
## Statistics by Class:
##
## Class: A Class: B Class: C Class: D Class: E
## Sensitivity 0.9994 0.9965 1.0000 0.9917 1.0000
## Specificity 0.9995 1.0000 0.9981 1.0000 0.9996
## Pos Pred Value 0.9988 1.0000 0.9913 1.0000 0.9982
## Neg Pred Value 0.9998 0.9992 1.0000 0.9984 1.0000
## Prevalence 0.2845 0.1935 0.1743 0.1638 0.1839
## Detection Rate 0.2843 0.1929 0.1743 0.1624 0.1839
## Detection Prevalence 0.2846 0.1929 0.1759 0.1624 0.1842
## Balanced Accuracy 0.9995 0.9982 0.9991 0.9959 0.9998
Using Random forests method, we see that this model predicts with an accuracy of 99.7% and has an out of sample error of 0.3%.This is a good prediction model,and we’ll call it our best fit model.
Now we use our best fit model to predict values using testing set as newdata.
set.seed(999)
predict(fit_rf,newdata=testing)
## [1] B A B A A E D B A A B C B A E E A B B B
## Levels: A B C D E