title: “Analisis Performa Angkat Barbel” author: “Sania Arij Ashari” date: “2025-02-24” output: html_document —
# Mengunduh dan membaca data
url_train <- "https://d396qusza40orc.cloudfront.net/predmachlearn/pml-training.csv"
url_test <- "https://d396qusza40orc.cloudfront.net/predmachlearn/pml-testing.csv"
train_data <- read.csv(url_train, na.strings = c("", "NA"))
test_data <- read.csv(url_test, na.strings = c("", "NA"))
# Menghapus kolom dengan banyak NA
train_data <- train_data[, colSums(is.na(train_data)) == 0]
test_data <- test_data[, colSums(is.na(test_data)) == 0]
# Menghapus kolom yang tidak berguna (misalnya, indeks dan ID)
train_data <- train_data[, -c(1:7)]
test_data <- test_data[, -c(1:7)]
summary(train_data)
## roll_belt pitch_belt yaw_belt total_accel_belt
## Min. :-28.90 Min. :-55.8000 Min. :-180.00 Min. : 0.00
## 1st Qu.: 1.10 1st Qu.: 1.7600 1st Qu.: -88.30 1st Qu.: 3.00
## Median :113.00 Median : 5.2800 Median : -13.00 Median :17.00
## Mean : 64.41 Mean : 0.3053 Mean : -11.21 Mean :11.31
## 3rd Qu.:123.00 3rd Qu.: 14.9000 3rd Qu.: 12.90 3rd Qu.:18.00
## Max. :162.00 Max. : 60.3000 Max. : 179.00 Max. :29.00
## gyros_belt_x gyros_belt_y gyros_belt_z accel_belt_x
## Min. :-1.040000 Min. :-0.64000 Min. :-1.4600 Min. :-120.000
## 1st Qu.:-0.030000 1st Qu.: 0.00000 1st Qu.:-0.2000 1st Qu.: -21.000
## Median : 0.030000 Median : 0.02000 Median :-0.1000 Median : -15.000
## Mean :-0.005592 Mean : 0.03959 Mean :-0.1305 Mean : -5.595
## 3rd Qu.: 0.110000 3rd Qu.: 0.11000 3rd Qu.:-0.0200 3rd Qu.: -5.000
## Max. : 2.220000 Max. : 0.64000 Max. : 1.6200 Max. : 85.000
## accel_belt_y accel_belt_z magnet_belt_x magnet_belt_y
## Min. :-69.00 Min. :-275.00 Min. :-52.0 Min. :354.0
## 1st Qu.: 3.00 1st Qu.:-162.00 1st Qu.: 9.0 1st Qu.:581.0
## Median : 35.00 Median :-152.00 Median : 35.0 Median :601.0
## Mean : 30.15 Mean : -72.59 Mean : 55.6 Mean :593.7
## 3rd Qu.: 61.00 3rd Qu.: 27.00 3rd Qu.: 59.0 3rd Qu.:610.0
## Max. :164.00 Max. : 105.00 Max. :485.0 Max. :673.0
## magnet_belt_z roll_arm pitch_arm yaw_arm
## Min. :-623.0 Min. :-180.00 Min. :-88.800 Min. :-180.0000
## 1st Qu.:-375.0 1st Qu.: -31.77 1st Qu.:-25.900 1st Qu.: -43.1000
## Median :-320.0 Median : 0.00 Median : 0.000 Median : 0.0000
## Mean :-345.5 Mean : 17.83 Mean : -4.612 Mean : -0.6188
## 3rd Qu.:-306.0 3rd Qu.: 77.30 3rd Qu.: 11.200 3rd Qu.: 45.8750
## Max. : 293.0 Max. : 180.00 Max. : 88.500 Max. : 180.0000
## total_accel_arm gyros_arm_x gyros_arm_y gyros_arm_z
## Min. : 1.00 Min. :-6.37000 Min. :-3.4400 Min. :-2.3300
## 1st Qu.:17.00 1st Qu.:-1.33000 1st Qu.:-0.8000 1st Qu.:-0.0700
## Median :27.00 Median : 0.08000 Median :-0.2400 Median : 0.2300
## Mean :25.51 Mean : 0.04277 Mean :-0.2571 Mean : 0.2695
## 3rd Qu.:33.00 3rd Qu.: 1.57000 3rd Qu.: 0.1400 3rd Qu.: 0.7200
## Max. :66.00 Max. : 4.87000 Max. : 2.8400 Max. : 3.0200
## accel_arm_x accel_arm_y accel_arm_z magnet_arm_x
## Min. :-404.00 Min. :-318.0 Min. :-636.00 Min. :-584.0
## 1st Qu.:-242.00 1st Qu.: -54.0 1st Qu.:-143.00 1st Qu.:-300.0
## Median : -44.00 Median : 14.0 Median : -47.00 Median : 289.0
## Mean : -60.24 Mean : 32.6 Mean : -71.25 Mean : 191.7
## 3rd Qu.: 84.00 3rd Qu.: 139.0 3rd Qu.: 23.00 3rd Qu.: 637.0
## Max. : 437.00 Max. : 308.0 Max. : 292.00 Max. : 782.0
## magnet_arm_y magnet_arm_z roll_dumbbell pitch_dumbbell
## Min. :-392.0 Min. :-597.0 Min. :-153.71 Min. :-149.59
## 1st Qu.: -9.0 1st Qu.: 131.2 1st Qu.: -18.49 1st Qu.: -40.89
## Median : 202.0 Median : 444.0 Median : 48.17 Median : -20.96
## Mean : 156.6 Mean : 306.5 Mean : 23.84 Mean : -10.78
## 3rd Qu.: 323.0 3rd Qu.: 545.0 3rd Qu.: 67.61 3rd Qu.: 17.50
## Max. : 583.0 Max. : 694.0 Max. : 153.55 Max. : 149.40
## yaw_dumbbell total_accel_dumbbell gyros_dumbbell_x gyros_dumbbell_y
## Min. :-150.871 Min. : 0.00 Min. :-204.0000 Min. :-2.10000
## 1st Qu.: -77.644 1st Qu.: 4.00 1st Qu.: -0.0300 1st Qu.:-0.14000
## Median : -3.324 Median :10.00 Median : 0.1300 Median : 0.03000
## Mean : 1.674 Mean :13.72 Mean : 0.1611 Mean : 0.04606
## 3rd Qu.: 79.643 3rd Qu.:19.00 3rd Qu.: 0.3500 3rd Qu.: 0.21000
## Max. : 154.952 Max. :58.00 Max. : 2.2200 Max. :52.00000
## gyros_dumbbell_z accel_dumbbell_x accel_dumbbell_y accel_dumbbell_z
## Min. : -2.380 Min. :-419.00 Min. :-189.00 Min. :-334.00
## 1st Qu.: -0.310 1st Qu.: -50.00 1st Qu.: -8.00 1st Qu.:-142.00
## Median : -0.130 Median : -8.00 Median : 41.50 Median : -1.00
## Mean : -0.129 Mean : -28.62 Mean : 52.63 Mean : -38.32
## 3rd Qu.: 0.030 3rd Qu.: 11.00 3rd Qu.: 111.00 3rd Qu.: 38.00
## Max. :317.000 Max. : 235.00 Max. : 315.00 Max. : 318.00
## magnet_dumbbell_x magnet_dumbbell_y magnet_dumbbell_z roll_forearm
## Min. :-643.0 Min. :-3600 Min. :-262.00 Min. :-180.0000
## 1st Qu.:-535.0 1st Qu.: 231 1st Qu.: -45.00 1st Qu.: -0.7375
## Median :-479.0 Median : 311 Median : 13.00 Median : 21.7000
## Mean :-328.5 Mean : 221 Mean : 46.05 Mean : 33.8265
## 3rd Qu.:-304.0 3rd Qu.: 390 3rd Qu.: 95.00 3rd Qu.: 140.0000
## Max. : 592.0 Max. : 633 Max. : 452.00 Max. : 180.0000
## pitch_forearm yaw_forearm total_accel_forearm gyros_forearm_x
## Min. :-72.50 Min. :-180.00 Min. : 0.00 Min. :-22.000
## 1st Qu.: 0.00 1st Qu.: -68.60 1st Qu.: 29.00 1st Qu.: -0.220
## Median : 9.24 Median : 0.00 Median : 36.00 Median : 0.050
## Mean : 10.71 Mean : 19.21 Mean : 34.72 Mean : 0.158
## 3rd Qu.: 28.40 3rd Qu.: 110.00 3rd Qu.: 41.00 3rd Qu.: 0.560
## Max. : 89.80 Max. : 180.00 Max. :108.00 Max. : 3.970
## gyros_forearm_y gyros_forearm_z accel_forearm_x accel_forearm_y
## Min. : -7.02000 Min. : -8.0900 Min. :-498.00 Min. :-632.0
## 1st Qu.: -1.46000 1st Qu.: -0.1800 1st Qu.:-178.00 1st Qu.: 57.0
## Median : 0.03000 Median : 0.0800 Median : -57.00 Median : 201.0
## Mean : 0.07517 Mean : 0.1512 Mean : -61.65 Mean : 163.7
## 3rd Qu.: 1.62000 3rd Qu.: 0.4900 3rd Qu.: 76.00 3rd Qu.: 312.0
## Max. :311.00000 Max. :231.0000 Max. : 477.00 Max. : 923.0
## accel_forearm_z magnet_forearm_x magnet_forearm_y magnet_forearm_z
## Min. :-446.00 Min. :-1280.0 Min. :-896.0 Min. :-973.0
## 1st Qu.:-182.00 1st Qu.: -616.0 1st Qu.: 2.0 1st Qu.: 191.0
## Median : -39.00 Median : -378.0 Median : 591.0 Median : 511.0
## Mean : -55.29 Mean : -312.6 Mean : 380.1 Mean : 393.6
## 3rd Qu.: 26.00 3rd Qu.: -73.0 3rd Qu.: 737.0 3rd Qu.: 653.0
## Max. : 291.00 Max. : 672.0 Max. :1480.0 Max. :1090.0
## classe
## Length:19622
## Class :character
## Mode :character
##
##
##
str(train_data)
## 'data.frame': 19622 obs. of 53 variables:
## $ roll_belt : num 1.41 1.41 1.42 1.48 1.48 1.45 1.42 1.42 1.43 1.45 ...
## $ pitch_belt : num 8.07 8.07 8.07 8.05 8.07 8.06 8.09 8.13 8.16 8.17 ...
## $ 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 ...
## $ gyros_belt_x : num 0 0.02 0 0.02 0.02 0.02 0.02 0.02 0.02 0.03 ...
## $ gyros_belt_y : num 0 0 0 0 0.02 0 0 0 0 0 ...
## $ gyros_belt_z : num -0.02 -0.02 -0.02 -0.03 -0.02 -0.02 -0.02 -0.02 -0.02 0 ...
## $ accel_belt_x : int -21 -22 -20 -22 -21 -21 -22 -22 -20 -21 ...
## $ accel_belt_y : int 4 4 5 3 2 4 3 4 2 4 ...
## $ accel_belt_z : int 22 22 23 21 24 21 21 21 24 22 ...
## $ magnet_belt_x : int -3 -7 -2 -6 -6 0 -4 -2 1 -3 ...
## $ magnet_belt_y : int 599 608 600 604 600 603 599 603 602 609 ...
## $ magnet_belt_z : int -313 -311 -305 -310 -302 -312 -311 -313 -312 -308 ...
## $ roll_arm : num -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 ...
## $ pitch_arm : num 22.5 22.5 22.5 22.1 22.1 22 21.9 21.8 21.7 21.6 ...
## $ 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 ...
## $ gyros_arm_x : num 0 0.02 0.02 0.02 0 0.02 0 0.02 0.02 0.02 ...
## $ gyros_arm_y : num 0 -0.02 -0.02 -0.03 -0.03 -0.03 -0.03 -0.02 -0.03 -0.03 ...
## $ gyros_arm_z : num -0.02 -0.02 -0.02 0.02 0 0 0 0 -0.02 -0.02 ...
## $ accel_arm_x : int -288 -290 -289 -289 -289 -289 -289 -289 -288 -288 ...
## $ accel_arm_y : int 109 110 110 111 111 111 111 111 109 110 ...
## $ accel_arm_z : int -123 -125 -126 -123 -123 -122 -125 -124 -122 -124 ...
## $ magnet_arm_x : int -368 -369 -368 -372 -374 -369 -373 -372 -369 -376 ...
## $ magnet_arm_y : int 337 337 344 344 337 342 336 338 341 334 ...
## $ magnet_arm_z : int 516 513 513 512 506 513 509 510 518 516 ...
## $ roll_dumbbell : num 13.1 13.1 12.9 13.4 13.4 ...
## $ pitch_dumbbell : num -70.5 -70.6 -70.3 -70.4 -70.4 ...
## $ yaw_dumbbell : num -84.9 -84.7 -85.1 -84.9 -84.9 ...
## $ total_accel_dumbbell: int 37 37 37 37 37 37 37 37 37 37 ...
## $ 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 -0.02 0 0 0 0 0 0 ...
## $ accel_dumbbell_x : int -234 -233 -232 -232 -233 -234 -232 -234 -232 -235 ...
## $ accel_dumbbell_y : int 47 47 46 48 48 48 47 46 47 48 ...
## $ accel_dumbbell_z : int -271 -269 -270 -269 -270 -269 -270 -272 -269 -270 ...
## $ magnet_dumbbell_x : int -559 -555 -561 -552 -554 -558 -551 -555 -549 -558 ...
## $ magnet_dumbbell_y : int 293 296 298 303 292 294 295 300 292 291 ...
## $ magnet_dumbbell_z : num -65 -64 -63 -60 -68 -66 -70 -74 -65 -69 ...
## $ roll_forearm : num 28.4 28.3 28.3 28.1 28 27.9 27.9 27.8 27.7 27.7 ...
## $ pitch_forearm : num -63.9 -63.9 -63.9 -63.9 -63.9 -63.9 -63.9 -63.8 -63.8 -63.8 ...
## $ yaw_forearm : num -153 -153 -152 -152 -152 -152 -152 -152 -152 -152 ...
## $ total_accel_forearm : int 36 36 36 36 36 36 36 36 36 36 ...
## $ gyros_forearm_x : num 0.03 0.02 0.03 0.02 0.02 0.02 0.02 0.02 0.03 0.02 ...
## $ gyros_forearm_y : num 0 0 -0.02 -0.02 0 -0.02 0 -0.02 0 0 ...
## $ gyros_forearm_z : num -0.02 -0.02 0 0 -0.02 -0.03 -0.02 0 -0.02 -0.02 ...
## $ accel_forearm_x : int 192 192 196 189 189 193 195 193 193 190 ...
## $ accel_forearm_y : int 203 203 204 206 206 203 205 205 204 205 ...
## $ accel_forearm_z : int -215 -216 -213 -214 -214 -215 -215 -213 -214 -215 ...
## $ magnet_forearm_x : int -17 -18 -18 -16 -17 -9 -18 -9 -16 -22 ...
## $ magnet_forearm_y : num 654 661 658 658 655 660 659 660 653 656 ...
## $ magnet_forearm_z : num 476 473 469 469 473 478 470 474 476 473 ...
## $ classe : chr "A" "A" "A" "A" ...
library(caret)
## Loading required package: ggplot2
## Loading required package: lattice
set.seed(123)
# Memisahkan data menjadi training dan validation set
trainIndex <- createDataPartition(train_data$classe, p = 0.7, list = FALSE)
train_set <- train_data[trainIndex, ]
validation_set <- train_data[-trainIndex, ]
library(randomForest)
## randomForest 4.6-14
## Type rfNews() to see new features/changes/bug fixes.
##
## Attaching package: 'randomForest'
## The following object is masked from 'package:ggplot2':
##
## margin
set.seed(123)
# Pastikan target (y) bertipe faktor
train_set$classe <- as.factor(train_set$classe)
validation_set$classe <- as.factor(validation_set$classe)
# Melatih model Random Forest
model_rf <- randomForest(classe ~ ., data = train_set, ntree = 100)
print(model_rf)
##
## Call:
## randomForest(formula = classe ~ ., data = train_set, ntree = 100)
## Type of random forest: classification
## Number of trees: 100
## No. of variables tried at each split: 7
##
## OOB estimate of error rate: 0.66%
## Confusion matrix:
## A B C D E class.error
## A 3902 3 0 0 1 0.001024066
## B 17 2636 5 0 0 0.008276900
## C 1 17 2373 5 0 0.009599332
## D 0 0 32 2218 2 0.015097691
## E 0 1 2 4 2518 0.002772277
predictions <- predict(model_rf, validation_set)
confusionMatrix(predictions, validation_set$classe)
## Confusion Matrix and Statistics
##
## Reference
## Prediction A B C D E
## A 1673 4 0 0 0
## B 1 1132 3 0 1
## C 0 3 1023 10 4
## D 0 0 0 954 4
## E 0 0 0 0 1073
##
## Overall Statistics
##
## Accuracy : 0.9949
## 95% CI : (0.9927, 0.9966)
## No Information Rate : 0.2845
## P-Value [Acc > NIR] : < 2.2e-16
##
## Kappa : 0.9936
##
## Mcnemar's Test P-Value : NA
##
## Statistics by Class:
##
## Class: A Class: B Class: C Class: D Class: E
## Sensitivity 0.9994 0.9939 0.9971 0.9896 0.9917
## Specificity 0.9991 0.9989 0.9965 0.9992 1.0000
## Pos Pred Value 0.9976 0.9956 0.9837 0.9958 1.0000
## Neg Pred Value 0.9998 0.9985 0.9994 0.9980 0.9981
## Prevalence 0.2845 0.1935 0.1743 0.1638 0.1839
## Detection Rate 0.2843 0.1924 0.1738 0.1621 0.1823
## Detection Prevalence 0.2850 0.1932 0.1767 0.1628 0.1823
## Balanced Accuracy 0.9992 0.9964 0.9968 0.9944 0.9958
test_predictions <- predict(model_rf, test_data)
test_predictions
## 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
## 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