library(tidyverse)
## Warning: package 'tidyverse' was built under R version 4.5.3
## Warning: package 'readr' was built under R version 4.5.3
## Warning: package 'forcats' was built under R version 4.5.3
## Warning: package 'lubridate' was built under R version 4.5.3
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr     1.2.0     ✔ readr     2.2.0
## ✔ forcats   1.0.1     ✔ stringr   1.6.0
## ✔ ggplot2   4.0.2     ✔ tibble    3.3.1
## ✔ lubridate 1.9.5     ✔ tidyr     1.3.2
## ✔ purrr     1.2.1     
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(nnet)
library(car)
## Loading required package: carData
## 
## Attaching package: 'car'
## 
## The following object is masked from 'package:dplyr':
## 
##     recode
## 
## The following object is masked from 'package:purrr':
## 
##     some
library(caret)
## Warning: package 'caret' was built under R version 4.5.3
## Loading required package: lattice
## 
## Attaching package: 'caret'
## 
## The following object is masked from 'package:purrr':
## 
##     lift
library(MASS)
## 
## Attaching package: 'MASS'
## 
## The following object is masked from 'package:dplyr':
## 
##     select
library(biotools)
## Warning: package 'biotools' was built under R version 4.5.3
## ---
## biotools version 4.3

Import Data

data <- read.csv("gym_members_exercise_tracking.csv")
head(data)
##   Age Gender Weight..kg. Height..m. Max_BPM Avg_BPM Resting_BPM
## 1  56   Male        88.3       1.71     180     157          60
## 2  46 Female        74.9       1.53     179     151          66
## 3  32 Female        68.1       1.66     167     122          54
## 4  25   Male        53.2       1.70     190     164          56
## 5  38   Male        46.1       1.79     188     158          68
## 6  56 Female        58.0       1.68     168     156          74
##   Session_Duration..hours. Calories_Burned Workout_Type Fat_Percentage
## 1                     1.69            1313         Yoga           12.6
## 2                     1.30             883         HIIT           33.9
## 3                     1.11             677       Cardio           33.4
## 4                     0.59             532     Strength           28.8
## 5                     0.64             556     Strength           29.2
## 6                     1.59            1116         HIIT           15.5
##   Water_Intake..liters. Workout_Frequency..days.week. Experience_Level   BMI
## 1                   3.5                             4                3 30.20
## 2                   2.1                             4                2 32.00
## 3                   2.3                             4                2 24.71
## 4                   2.1                             3                1 18.41
## 5                   2.8                             3                1 14.39
## 6                   2.7                             5                3 20.55
names(data)
##  [1] "Age"                           "Gender"                       
##  [3] "Weight..kg."                   "Height..m."                   
##  [5] "Max_BPM"                       "Avg_BPM"                      
##  [7] "Resting_BPM"                   "Session_Duration..hours."     
##  [9] "Calories_Burned"               "Workout_Type"                 
## [11] "Fat_Percentage"                "Water_Intake..liters."        
## [13] "Workout_Frequency..days.week." "Experience_Level"             
## [15] "BMI"

Rename

names(data) <- c("Age","Gender","Weight","Height","Max_BPM","Avg_BPM","Resting_BPM","Session_Duration","Calories_Burned","Workout_Type","Fat_Percentage","Water_Intake","Workout_Frequency","Experience_Level","BMI")
str(data)
## 'data.frame':    973 obs. of  15 variables:
##  $ Age              : int  56 46 32 25 38 56 36 40 28 28 ...
##  $ Gender           : chr  "Male" "Female" "Female" "Male" ...
##  $ Weight           : num  88.3 74.9 68.1 53.2 46.1 ...
##  $ Height           : num  1.71 1.53 1.66 1.7 1.79 1.68 1.72 1.51 1.94 1.84 ...
##  $ Max_BPM          : int  180 179 167 190 188 168 174 189 185 169 ...
##  $ Avg_BPM          : int  157 151 122 164 158 156 169 141 127 136 ...
##  $ Resting_BPM      : int  60 66 54 56 68 74 73 64 52 64 ...
##  $ Session_Duration : num  1.69 1.3 1.11 0.59 0.64 1.59 1.49 1.27 1.03 1.08 ...
##  $ Calories_Burned  : num  1313 883 677 532 556 ...
##  $ Workout_Type     : chr  "Yoga" "HIIT" "Cardio" "Strength" ...
##  $ Fat_Percentage   : num  12.6 33.9 33.4 28.8 29.2 15.5 21.3 30.6 28.9 29.7 ...
##  $ Water_Intake     : num  3.5 2.1 2.3 2.1 2.8 2.7 2.3 1.9 2.6 2.7 ...
##  $ Workout_Frequency: int  4 4 4 3 3 5 3 3 4 3 ...
##  $ Experience_Level : int  3 2 2 1 1 3 2 2 2 1 ...
##  $ BMI              : num  30.2 32 24.7 18.4 14.4 ...
summary(data)
##       Age           Gender              Weight           Height     
##  Min.   :18.00   Length:973         Min.   : 40.00   Min.   :1.500  
##  1st Qu.:28.00   Class :character   1st Qu.: 58.10   1st Qu.:1.620  
##  Median :40.00   Mode  :character   Median : 70.00   Median :1.710  
##  Mean   :38.68                      Mean   : 73.85   Mean   :1.723  
##  3rd Qu.:49.00                      3rd Qu.: 86.00   3rd Qu.:1.800  
##  Max.   :59.00                      Max.   :129.90   Max.   :2.000  
##     Max_BPM         Avg_BPM       Resting_BPM    Session_Duration
##  Min.   :160.0   Min.   :120.0   Min.   :50.00   Min.   :0.500   
##  1st Qu.:170.0   1st Qu.:131.0   1st Qu.:56.00   1st Qu.:1.040   
##  Median :180.0   Median :143.0   Median :62.00   Median :1.260   
##  Mean   :179.9   Mean   :143.8   Mean   :62.22   Mean   :1.256   
##  3rd Qu.:190.0   3rd Qu.:156.0   3rd Qu.:68.00   3rd Qu.:1.460   
##  Max.   :199.0   Max.   :169.0   Max.   :74.00   Max.   :2.000   
##  Calories_Burned  Workout_Type       Fat_Percentage   Water_Intake  
##  Min.   : 303.0   Length:973         Min.   :10.00   Min.   :1.500  
##  1st Qu.: 720.0   Class :character   1st Qu.:21.30   1st Qu.:2.200  
##  Median : 893.0   Mode  :character   Median :26.20   Median :2.600  
##  Mean   : 905.4                      Mean   :24.98   Mean   :2.627  
##  3rd Qu.:1076.0                      3rd Qu.:29.30   3rd Qu.:3.100  
##  Max.   :1783.0                      Max.   :35.00   Max.   :3.700  
##  Workout_Frequency Experience_Level      BMI       
##  Min.   :2.000     Min.   :1.00     Min.   :12.32  
##  1st Qu.:3.000     1st Qu.:1.00     1st Qu.:20.11  
##  Median :3.000     Median :2.00     Median :24.16  
##  Mean   :3.322     Mean   :1.81     Mean   :24.91  
##  3rd Qu.:4.000     3rd Qu.:2.00     3rd Qu.:28.56  
##  Max.   :5.000     Max.   :3.00     Max.   :49.84

Preprocessing

data$Workout_Type <- as.factor(data$Workout_Type)
data$Gender <- as.factor(data$Gender)
colSums(is.na(data))
##               Age            Gender            Weight            Height 
##                 0                 0                 0                 0 
##           Max_BPM           Avg_BPM       Resting_BPM  Session_Duration 
##                 0                 0                 0                 0 
##   Calories_Burned      Workout_Type    Fat_Percentage      Water_Intake 
##                 0                 0                 0                 0 
## Workout_Frequency  Experience_Level               BMI 
##                 0                 0                 0

deteksi Outlier

num_vars <- c("Age","Weight","Height","Max_BPM","Avg_BPM","Resting_BPM","Session_Duration","Calories_Burned","Fat_Percentage","Water_Intake","Workout_Frequency")

z_scores <- scale(data[num_vars])

colSums(abs(z_scores)>3)
##               Age            Weight            Height           Max_BPM 
##                 0                 0                 0                 0 
##           Avg_BPM       Resting_BPM  Session_Duration   Calories_Burned 
##                 0                 0                 0                 3 
##    Fat_Percentage      Water_Intake Workout_Frequency 
##                 0                 0                 0
outlier_rows <- which(
apply(abs(z_scores)>3,1,any)
)

length(outlier_rows)
## [1] 3

Analisis Deskriptif

summary(data)
##       Age           Gender        Weight           Height         Max_BPM     
##  Min.   :18.00   Female:462   Min.   : 40.00   Min.   :1.500   Min.   :160.0  
##  1st Qu.:28.00   Male  :511   1st Qu.: 58.10   1st Qu.:1.620   1st Qu.:170.0  
##  Median :40.00                Median : 70.00   Median :1.710   Median :180.0  
##  Mean   :38.68                Mean   : 73.85   Mean   :1.723   Mean   :179.9  
##  3rd Qu.:49.00                3rd Qu.: 86.00   3rd Qu.:1.800   3rd Qu.:190.0  
##  Max.   :59.00                Max.   :129.90   Max.   :2.000   Max.   :199.0  
##     Avg_BPM       Resting_BPM    Session_Duration Calories_Burned 
##  Min.   :120.0   Min.   :50.00   Min.   :0.500    Min.   : 303.0  
##  1st Qu.:131.0   1st Qu.:56.00   1st Qu.:1.040    1st Qu.: 720.0  
##  Median :143.0   Median :62.00   Median :1.260    Median : 893.0  
##  Mean   :143.8   Mean   :62.22   Mean   :1.256    Mean   : 905.4  
##  3rd Qu.:156.0   3rd Qu.:68.00   3rd Qu.:1.460    3rd Qu.:1076.0  
##  Max.   :169.0   Max.   :74.00   Max.   :2.000    Max.   :1783.0  
##    Workout_Type Fat_Percentage   Water_Intake   Workout_Frequency
##  Cardio  :255   Min.   :10.00   Min.   :1.500   Min.   :2.000    
##  HIIT    :221   1st Qu.:21.30   1st Qu.:2.200   1st Qu.:3.000    
##  Strength:258   Median :26.20   Median :2.600   Median :3.000    
##  Yoga    :239   Mean   :24.98   Mean   :2.627   Mean   :3.322    
##                 3rd Qu.:29.30   3rd Qu.:3.100   3rd Qu.:4.000    
##                 Max.   :35.00   Max.   :3.700   Max.   :5.000    
##  Experience_Level      BMI       
##  Min.   :1.00     Min.   :12.32  
##  1st Qu.:1.00     1st Qu.:20.11  
##  Median :2.00     Median :24.16  
##  Mean   :1.81     Mean   :24.91  
##  3rd Qu.:2.00     3rd Qu.:28.56  
##  Max.   :3.00     Max.   :49.84
hist(data$Calories_Burned)

boxplot(Calories_Burned ~ Workout_Type, data = data)

hist(data$Avg_BPM)

hist(data$Session_Duration)

cor_matrix <- cor(data[num_vars])
heatmap(cor_matrix)

Split data

set.seed(123)

train_index <- createDataPartition(data$Workout_Type,p=0.8,list=FALSE)

train <- data[train_index,]
test  <- data[-train_index,]

Standarisasi

train_scaled <- train
test_scaled  <- test

train_means <- sapply(train[num_vars],mean)

train_sds <- sapply(train[num_vars],sd)

train_scaled[num_vars] <-scale(train[num_vars],center=train_means,scale=train_sds)

test_scaled[num_vars] <-scale(test[num_vars],center=train_means,scale=train_sds)

Uji Asumsi Multinomial

model_vif <- lm(Age ~ Weight + Height + Max_BPM +Avg_BPM + Resting_BPM +Session_Duration + Calories_Burned +Fat_Percentage + Water_Intake + Workout_Frequency,data=train)

vif(model_vif)
##            Weight            Height           Max_BPM           Avg_BPM 
##          1.332505          1.342852          1.012276          3.169694 
##       Resting_BPM  Session_Duration   Calories_Burned    Fat_Percentage 
##          1.015124         16.742279         19.206247          2.400171 
##      Water_Intake Workout_Frequency 
##          1.882849          1.866917

Multinomial Logistic Regression

model_multi <- multinom(Workout_Type ~ Age + Weight + Height +Max_BPM + Avg_BPM + Resting_BPM +Session_Duration + Calories_Burned +Fat_Percentage + Water_Intake +Workout_Frequency + Gender,data=train)
## # weights:  56 (39 variable)
## initial  value 1081.309602 
## iter  10 value 1070.711369
## iter  20 value 1069.409686
## iter  30 value 1063.102318
## iter  40 value 1061.627454
## final  value 1061.621852 
## converged
summary(model_multi)
## Call:
## multinom(formula = Workout_Type ~ Age + Weight + Height + Max_BPM + 
##     Avg_BPM + Resting_BPM + Session_Duration + Calories_Burned + 
##     Fat_Percentage + Water_Intake + Workout_Frequency + Gender, 
##     data = train)
## 
## Coefficients:
##          (Intercept)          Age       Weight     Height      Max_BPM
## HIIT       1.6329842  0.008829650 -0.002370679 -0.4509414 -0.006203904
## Strength   0.1743882 -0.006591111 -0.013361386 -0.8304537 -0.011112178
## Yoga      -1.7479268 -0.004844702 -0.009010846  0.1798826 -0.002616688
##               Avg_BPM  Resting_BPM Session_Duration Calories_Burned
## HIIT     -0.002751422  0.011469997        0.6308238    0.0001097375
## Strength  0.020234015  0.003946077        2.2266303   -0.0022571781
## Yoga      0.024419166 -0.005001967        3.4997645   -0.0042727771
##          Fat_Percentage Water_Intake Workout_Frequency GenderMale
## HIIT        -0.02235421   -0.2845721       -0.02716991  0.2897216
## Strength     0.01998058   -0.3604484        0.15101993  1.0392657
## Yoga        -0.02282657   -0.4263461        0.04125713  1.0180489
## 
## Std. Errors:
##          (Intercept)         Age      Weight    Height     Max_BPM     Avg_BPM
## HIIT      0.09667027 0.009008798 0.006036941 0.4206555 0.007146833 0.007777322
## Strength  0.09647849 0.008623840 0.005803335 0.4156300 0.006913683 0.007318757
## Yoga      0.09581656 0.008767705 0.005823035 0.4171416 0.006988960 0.007443703
##          Resting_BPM Session_Duration Calories_Burned Fat_Percentage
## HIIT      0.01367209        0.1506319    0.0006427593     0.02372661
## Strength  0.01313118        0.1482368    0.0006157324     0.02285938
## Yoga      0.01338227        0.1468112    0.0006279344     0.02333059
##          Water_Intake Workout_Frequency GenderMale
## HIIT        0.2584508         0.1488706  0.3322241
## Strength    0.2467884         0.1437047  0.3140044
## Yoga        0.2507396         0.1463441  0.3182626
## 
## Residual Deviance: 2123.244 
## AIC: 2201.244

Uji Parsial (Wald)

z <- summary(model_multi)$coefficients /
summary(model_multi)$standard.errors

p_value <-(1-pnorm(abs(z)))*2

p_value
##          (Intercept)       Age     Weight     Height   Max_BPM     Avg_BPM
## HIIT      0.00000000 0.3270298 0.69454445 0.28372139 0.3853597 0.723507574
## Strength  0.07067905 0.4446947 0.02131469 0.04571018 0.1079944 0.005697880
## Yoga      0.00000000 0.5805633 0.12175513 0.66630359 0.7081044 0.001036184
##          Resting_BPM Session_Duration Calories_Burned Fat_Percentage
## HIIT       0.4015056     2.816109e-05    8.644370e-01      0.3461118
## Strength   0.7637866     0.000000e+00    2.465252e-04      0.3820829
## Yoga       0.7085713     0.000000e+00    1.014033e-11      0.3278782
##          Water_Intake Workout_Frequency  GenderMale
## HIIT        0.2708668         0.8551850 0.383171955
## Strength    0.1441371         0.2933024 0.000933902
## Yoga        0.0890644         0.7780059 0.001380150

Uji Serentak

model_null <- multinom(Workout_Type~1,data=train)
## # weights:  8 (3 variable)
## initial  value 1081.309602 
## final  value 1079.862374 
## converged
anova(model_null,model_multi,test="Chisq")
## Likelihood ratio tests of Multinomial Models
## 
## Response: Workout_Type
##                                                                                                                                                       Model
## 1                                                                                                                                                         1
## 2 Age + Weight + Height + Max_BPM + Avg_BPM + Resting_BPM + Session_Duration + Calories_Burned + Fat_Percentage + Water_Intake + Workout_Frequency + Gender
##   Resid. df Resid. Dev   Test    Df LR stat.   Pr(Chi)
## 1      2337   2159.725                                
## 2      2301   2123.244 1 vs 2    36 36.48105 0.4462963

Odds Ratio

exp(coef(model_multi))
##          (Intercept)       Age    Weight    Height   Max_BPM   Avg_BPM
## HIIT       5.1191283 1.0088687 0.9976321 0.6370282 0.9938153 0.9972524
## Strength   1.1905176 0.9934306 0.9867275 0.4358515 0.9889493 1.0204401
## Yoga       0.1741346 0.9951670 0.9910296 1.1970768 0.9973867 1.0247198
##          Resting_BPM Session_Duration Calories_Burned Fat_Percentage
## HIIT       1.0115360         1.879158       1.0001097      0.9778938
## Strength   1.0039539         9.268581       0.9977454      1.0201815
## Yoga       0.9950105        33.107654       0.9957363      0.9774320
##          Water_Intake Workout_Frequency GenderMale
## HIIT        0.7523361         0.9731959   1.336055
## Strength    0.6973635         1.1630198   2.827140
## Yoga        0.6528903         1.0421200   2.767789

Prediksi & Evaluasi Multinomial

pred_multi <- predict(model_multi,newdata=test)

confusionMatrix(pred_multi,test$Workout_Type)
## Confusion Matrix and Statistics
## 
##           Reference
## Prediction Cardio HIIT Strength Yoga
##   Cardio       16   19       19   21
##   HIIT         10    4        8    6
##   Strength     17   12       15   11
##   Yoga          8    9        9    9
## 
## Overall Statistics
##                                           
##                Accuracy : 0.228           
##                  95% CI : (0.1708, 0.2937)
##     No Information Rate : 0.2642          
##     P-Value [Acc > NIR] : 0.8910          
##                                           
##                   Kappa : -0.0366         
##                                           
##  Mcnemar's Test P-Value : 0.1114          
## 
## Statistics by Class:
## 
##                      Class: Cardio Class: HIIT Class: Strength Class: Yoga
## Sensitivity                 0.3137     0.09091         0.29412     0.19149
## Specificity                 0.5845     0.83893         0.71831     0.82192
## Pos Pred Value              0.2133     0.14286         0.27273     0.25714
## Neg Pred Value              0.7034     0.75758         0.73913     0.75949
## Prevalence                  0.2642     0.22798         0.26425     0.24352
## Detection Rate              0.0829     0.02073         0.07772     0.04663
## Detection Prevalence        0.3886     0.14508         0.28497     0.18135
## Balanced Accuracy           0.4491     0.46492         0.50621     0.50670
acc_multi <-mean(pred_multi==test$Workout_Type)

acc_multi
## [1] 0.2279793

Uji Asumsi LDA

Normalitas visual

qqnorm(train_scaled$Calories_Burned)

qqline(train_scaled$Calories_Burned)

Homogenitas kovarians

boxM(train_scaled[num_vars],train_scaled$Workout_Type)
## 
##  Box's M-test for Homogeneity of Covariance Matrices
## 
## data:  train_scaled[num_vars]
## Chi-Sq (approx.) = 200.34, df = 198, p-value = 0.4402

Korelasi

cor(train_scaled[num_vars])
##                            Age       Weight       Height     Max_BPM
## Age                1.000000000 -0.039701705 -0.021562878 -0.02565244
## Weight            -0.039701705  1.000000000  0.352037009  0.04740481
## Height            -0.021562878  0.352037009  1.000000000 -0.02124188
## Max_BPM           -0.025652441  0.047404806 -0.021241877  1.00000000
## Avg_BPM            0.003856346  0.014622634 -0.004998731 -0.03033613
## Resting_BPM       -0.026773212 -0.042076030 -0.002357584  0.02166654
## Session_Duration  -0.021736295 -0.002620743 -0.009906399  0.03307844
## Calories_Burned   -0.167645021  0.108055508  0.089709082  0.03067578
## Fat_Percentage     0.002653242 -0.223024585 -0.257008790 -0.03369801
## Water_Intake       0.045310132  0.382273698  0.401344643  0.05234815
## Workout_Frequency  0.005573690 -0.018154550 -0.001422962 -0.01878913
##                        Avg_BPM   Resting_BPM Session_Duration Calories_Burned
## Age                0.003856346 -0.0267732123     -0.021736295     -0.16764502
## Weight             0.014622634 -0.0420760300     -0.002620743      0.10805551
## Height            -0.004998731 -0.0023575842     -0.009906399      0.08970908
## Max_BPM           -0.030336130  0.0216665367      0.033078437      0.03067578
## Avg_BPM            1.000000000  0.0735288060      0.003089358      0.34031031
## Resting_BPM        0.073528806  1.0000000000     -0.010142081      0.03014362
## Session_Duration   0.003089358 -0.0101420811      1.000000000      0.90229535
## Calories_Burned    0.340310309  0.0301436217      0.902295350      1.00000000
## Fat_Percentage     0.005303530  0.0007151486     -0.581315552     -0.59517791
## Water_Intake       0.006553855 -0.0076356748      0.277574519      0.35840395
## Workout_Frequency -0.017636885 -0.0285804362      0.647596146      0.57466298
##                   Fat_Percentage Water_Intake Workout_Frequency
## Age                 0.0026532424  0.045310132       0.005573690
## Weight             -0.2230245847  0.382273698      -0.018154550
## Height             -0.2570087897  0.401344643      -0.001422962
## Max_BPM            -0.0336980136  0.052348153      -0.018789128
## Avg_BPM             0.0053035304  0.006553855      -0.017636885
## Resting_BPM         0.0007151486 -0.007635675      -0.028580436
## Session_Duration   -0.5813155524  0.277574519       0.647596146
## Calories_Burned    -0.5951779123  0.358403951       0.574662977
## Fat_Percentage      1.0000000000 -0.592357844      -0.522684880
## Water_Intake       -0.5923578440  1.000000000       0.213628638
## Workout_Frequency  -0.5226848802  0.213628638       1.000000000

LDA

model_lda <- lda(Workout_Type ~ Age + Weight + Height +Max_BPM + Avg_BPM + Resting_BPM +Session_Duration + Calories_Burned +Fat_Percentage + Water_Intake +Workout_Frequency + Gender,data=train_scaled)

model_lda
## Call:
## lda(Workout_Type ~ Age + Weight + Height + Max_BPM + Avg_BPM + 
##     Resting_BPM + Session_Duration + Calories_Burned + Fat_Percentage + 
##     Water_Intake + Workout_Frequency + Gender, data = train_scaled)
## 
## Prior probabilities of groups:
##    Cardio      HIIT  Strength      Yoga 
## 0.2615385 0.2269231 0.2653846 0.2461538 
## 
## Group means:
##                  Age       Weight      Height       Max_BPM     Avg_BPM
## Cardio   -0.05465320  0.080694961  0.01161909  0.0644646092 -0.01825354
## HIIT      0.03212576  0.048390769 -0.01159818 -0.0001621824 -0.02404169
## Strength -0.03039964 -0.119582108 -0.07116589 -0.0818628975  0.08309933
## Yoga      0.06122770 -0.001424176  0.07507251  0.0199143011 -0.04803364
##          Resting_BPM Session_Duration Calories_Burned Fat_Percentage
## Cardio   -0.01579653     -0.144164615    -0.122283065     0.09612008
## HIIT      0.06373055      0.113822942     0.101398017    -0.10924266
## Strength  0.01817494      0.006778346     0.027180247     0.08445025
## Yoga     -0.06156264      0.040936473     0.007145756    -0.09246744
##          Water_Intake Workout_Frequency GenderMale
## Cardio    0.006095365       -0.11500553  0.5098039
## HIIT      0.040221959        0.05700456  0.5254237
## Strength -0.073869195        0.03035714  0.5072464
## Yoga      0.036084281        0.03691350  0.5625000
## 
## Coefficients of linear discriminants:
##                           LD1         LD2          LD3
## Age               -0.23037526 -0.25313369 -0.544533005
## Weight            -0.68842443 -0.23206792 -0.222748836
## Height            -0.15238719 -0.23409672  0.356491713
## Max_BPM           -0.24804755 -0.16117475  0.261347916
## Avg_BPM            0.89632054  0.04846051  1.086743487
## Resting_BPM       -0.01141986  0.01661187 -0.458789690
## Session_Duration   2.47694450 -1.01405384  2.577867559
## Calories_Burned   -2.21716850  0.90118081 -3.506118891
## Fat_Percentage     0.14403384  0.91443359  0.029048334
## Water_Intake      -0.62359176  0.28235807 -0.006867517
## Workout_Frequency  0.30093586  0.30919626  0.117787677
## GenderMale         2.84921846  0.02168909  1.462293389
## 
## Proportion of trace:
##    LD1    LD2    LD3 
## 0.5044 0.3153 0.1802
lda_values <- predict(model_lda)

plot(
  lda_values$x[,1],
  lda_values$x[,2],
  col=as.numeric(train_scaled$Workout_Type),
  pch=19,
  xlab="LD1",
  ylab="LD2"
)

legend(
  "topright",
  legend=levels(train_scaled$Workout_Type),
  col=1:length(levels(train_scaled$Workout_Type)),
  pch=19
)

prediksi LDA

pred_lda <- predict(model_lda,newdata=test_scaled)

Evaluasi LDA

confusionMatrix(
pred_lda$class,
test_scaled$Workout_Type
)
## Confusion Matrix and Statistics
## 
##           Reference
## Prediction Cardio HIIT Strength Yoga
##   Cardio       16   19       19   21
##   HIIT         10    4        8    6
##   Strength     17   11       15   11
##   Yoga          8   10        9    9
## 
## Overall Statistics
##                                           
##                Accuracy : 0.228           
##                  95% CI : (0.1708, 0.2937)
##     No Information Rate : 0.2642          
##     P-Value [Acc > NIR] : 0.8910          
##                                           
##                   Kappa : -0.0364         
##                                           
##  Mcnemar's Test P-Value : 0.1086          
## 
## Statistics by Class:
## 
##                      Class: Cardio Class: HIIT Class: Strength Class: Yoga
## Sensitivity                 0.3137     0.09091         0.29412     0.19149
## Specificity                 0.5845     0.83893         0.72535     0.81507
## Pos Pred Value              0.2133     0.14286         0.27778     0.25000
## Neg Pred Value              0.7034     0.75758         0.74101     0.75796
## Prevalence                  0.2642     0.22798         0.26425     0.24352
## Detection Rate              0.0829     0.02073         0.07772     0.04663
## Detection Prevalence        0.3886     0.14508         0.27979     0.18653
## Balanced Accuracy           0.4491     0.46492         0.50973     0.50328
acc_lda <-
mean(
pred_lda$class==
test_scaled$Workout_Type
)

acc_lda
## [1] 0.2279793

perbandingan

acc_multi
## [1] 0.2279793
acc_lda
## [1] 0.2279793