Data
data<- read.csv("gym_members_exercise_tracking.csv")
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..kg. : num 88.3 74.9 68.1 53.2 46.1 ...
## $ Height..m. : 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..hours. : 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..liters. : num 3.5 2.1 2.3 2.1 2.8 2.7 2.3 1.9 2.6 2.7 ...
## $ Workout_Frequency..days.week.: 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..kg. Height..m.
## 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..hours.
## 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..liters.
## 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..days.week. 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
names(data)[names(data) == "Session_Duration..hours."] <- "Session_Duration"
names(data)[names(data) == "Weight..kg."] <- "Weight"
names(data)[names(data) == "Height..m."] <- "Height"
names(data)[names(data) == "Workout_Frequency..days.week."] <- "Workout_Frequency"
names(data)[names(data) == "Water_Intake..liters."] <- "Water_Intake"
data$Gender <- as.factor(data$Gender)
data$Workout_Type <- as.factor(data$Workout_Type)
Manova
manova_model <- manova(
cbind(Calories_Burned, Avg_BPM, Fat_Percentage, Max_BPM) ~
Workout_Type * Gender + Experience_Level,
data = data
)
summary(manova_model, test = "Wilks")
## Df Wilks approx F num Df den Df Pr(>F)
## Workout_Type 3 0.97660 1.90 12 2542.9 0.02947 *
## Gender 1 0.70465 100.70 4 961.0 < 2e-16 ***
## Experience_Level 1 0.34254 461.12 4 961.0 < 2e-16 ***
## Workout_Type:Gender 3 0.99122 0.71 12 2542.9 0.74518
## Residuals 964
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Mancova
mancova_model <- manova(
cbind(Calories_Burned, Avg_BPM, Fat_Percentage, Max_BPM) ~
Workout_Type * Gender + Experience_Level +
Age + BMI + Session_Duration + Workout_Frequency + Weight,
data = data
)
summary(mancova_model, test = "Wilks")
## Df Wilks approx F num Df den Df Pr(>F)
## Workout_Type 3 0.85505 12.9 12 2529.6 <2e-16 ***
## Gender 1 0.41296 339.7 4 956.0 <2e-16 ***
## Experience_Level 1 0.04010 5721.1 4 956.0 <2e-16 ***
## Age 1 0.45336 288.2 4 956.0 <2e-16 ***
## BMI 1 0.99053 2.3 4 956.0 0.0584 .
## Session_Duration 1 0.05839 3853.9 4 956.0 <2e-16 ***
## Workout_Frequency 1 0.99631 0.9 4 956.0 0.4727
## Weight 1 0.99947 0.1 4 956.0 0.9731
## Workout_Type:Gender 3 0.98176 1.5 12 2529.6 0.1271
## Residuals 959
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Visualisasi
pkgs <- c("ggplot2", "dplyr", "tidyr", "corrplot",
"patchwork", "ggridges", "heplots", "GGally", "viridis")
for (p in pkgs) {
if (!requireNamespace(p, quietly = TRUE)) install.packages(p)
library(p, character.only = TRUE)
}
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
## corrplot 0.95 loaded
## Warning: package 'patchwork' was built under R version 4.5.3
## Warning: package 'ggridges' was built under R version 4.5.3
## Warning: package 'heplots' was built under R version 4.5.3
## Loading required package: broom
## Warning: package 'GGally' was built under R version 4.5.3
## Loading required package: viridisLite
dep_vars <- c("Calories_Burned", "Avg_BPM", "Fat_Percentage", "Max_BPM")
warna_workout <- c("Cardio" = "#E63946",
"HIIT" = "#F4A261",
"Strength" = "#2A9D8F",
"Yoga" = "#457B9D")
warna_gender <- c("Male" = "#3A86FF", "Female" = "#FF006E")
library(reshape2)
##
## Attaching package: 'reshape2'
## The following object is masked from 'package:tidyr':
##
## smiths
data_long <- melt(data,
id.vars = "Workout_Type",
measure.vars = c("Calories_Burned", "Avg_BPM", "Fat_Percentage", "Max_BPM"))
ggplot(data_long, aes(x = Workout_Type, y = value, fill = Workout_Type)) +
geom_boxplot() +
facet_wrap(~variable, scales = "free") +
theme_minimal()

library(corrplot)
num_data <- data[, c("Calories_Burned", "Avg_BPM", "Fat_Percentage",
"Max_BPM", "Resting_BPM", "Session_Duration",
"Age", "BMI")]
cor_matrix <- cor(num_data)
print(cor_matrix)
## Calories_Burned Avg_BPM Fat_Percentage Max_BPM
## Calories_Burned 1.000000000 0.339658667 -0.597615248 0.002090016
## Avg_BPM 0.339658667 1.000000000 -0.007301655 -0.039751443
## Fat_Percentage -0.597615248 -0.007301655 1.000000000 -0.009055731
## Max_BPM 0.002090016 -0.039751443 -0.009055731 1.000000000
## Resting_BPM 0.016517951 0.059635502 -0.016834389 0.036647481
## Session_Duration 0.908140376 0.016014438 -0.581519771 0.010050981
## Age -0.154678760 0.035969143 0.002370051 -0.017072597
## BMI 0.059760826 0.021605500 -0.119257760 0.067105231
## Resting_BPM Session_Duration Age BMI
## Calories_Burned 0.016517951 0.908140376 -0.154678760 0.059760826
## Avg_BPM 0.059635502 0.016014438 0.035969143 0.021605500
## Fat_Percentage -0.016834389 -0.581519771 0.002370051 -0.119257760
## Max_BPM 0.036647481 0.010050981 -0.017072597 0.067105231
## Resting_BPM 1.000000000 -0.016648808 0.004353714 -0.032542632
## Session_Duration -0.016648808 1.000000000 -0.019911904 -0.006492647
## Age 0.004353714 -0.019911904 1.000000000 -0.013691370
## BMI -0.032542632 -0.006492647 -0.013691370 1.000000000
corrplot(cor_matrix, method = "color", type = "upper",
tl.col = "black", tl.srt = 45)
