DESKRIPSI TUGAS

penelitian ini dilakukan untuk menganalisis pengaruh faktor-faktor gaya hidup terhadap efisiensi kalori menggunakan beberapa metode analisis statistik, yaitu ANOVA, ANCOVA, MANOVA, dan MANCOVA. Analisis dilakukan secara bertahap untuk memahami hubungan antar variabel baik secara sederhana maupun multivariat. Tahapan penelitian meliputi preprocessing data, eksplorasi data (EDA), seleksi fitur, pengujian asumsi, hingga analisis inferensial.

Dalam penelitian ini, data yang digunakan diolah dan disederhanakan terlebih dahulu agar sesuai dengan kebutuhan analisis. Hal ini dilakukan untuk memastikan proses komputasi lebih efisien serta mempermudah interpretasi hasil tanpa mengurangi representativitas data. Oleh karena itu, hanya sebagian data yang digunakan sebagai sampel penelitian.

DESKRIPSI DATA

Dataset yang digunakan dalam penelitian ini berasal dari platform Kaggle, yaitu “Close to Realistic Calorie Efficiency Dataset” yang dapat diakses melalui tautan berikut: https://www.kaggle.com/datasets/parasharmanu/close-to-realistic-calorie-efficiency-dataset

Dataset ini berisi informasi terkait aktivitas fisik, kondisi tubuh, serta indikator kesehatan individu yang berhubungan dengan efisiensi pembakaran kalori. Variabel yang tersedia mencakup usia, jumlah langkah harian, durasi aktivitas, waktu tidur, tingkat hidrasi, indeks massa tubuh (BMI), hingga detak jantung.

Namun, karena jumlah data pada dataset asli sangat besar, dalam penelitian ini dilakukan pengambilan sampel sebanyak 110 data dari keseluruhan dataset. Pengambilan sampel ini bertujuan untuk:

  1. Mengurangi kompleksitas perhitungan dalam analisis statistik,
  2. Mempercepat proses komputasi,
  3. Tetap mempertahankan karakteristik utama data agar hasil analisis tetap representatif.
install.packages("dplyr")
## Installing package into '/cloud/lib/x86_64-pc-linux-gnu-library/4.5'
## (as 'lib' is unspecified)
install.packages("tidyr")
## Installing package into '/cloud/lib/x86_64-pc-linux-gnu-library/4.5'
## (as 'lib' is unspecified)
install.packages("biotools")
## Installing package into '/cloud/lib/x86_64-pc-linux-gnu-library/4.5'
## (as 'lib' is unspecified)
install.packages("rstatix")
## Installing package into '/cloud/lib/x86_64-pc-linux-gnu-library/4.5'
## (as 'lib' is unspecified)
install.packages("knitr")
## Installing package into '/cloud/lib/x86_64-pc-linux-gnu-library/4.5'
## (as 'lib' is unspecified)
install.packages("ggplot2")
## Installing package into '/cloud/lib/x86_64-pc-linux-gnu-library/4.5'
## (as 'lib' is unspecified)
library(dplyr)
## 
## 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
library(tidyr)
library(biotools)
## Loading required package: MASS
## 
## Attaching package: 'MASS'
## The following object is masked from 'package:dplyr':
## 
##     select
## ---
## biotools version 4.3
library(rstatix)
## 
## Attaching package: 'rstatix'
## The following object is masked from 'package:MASS':
## 
##     select
## The following object is masked from 'package:stats':
## 
##     filter
library(knitr)
library(ggplot2)
library(corrplot)
## corrplot 0.95 loaded

Load Data

data <- read.csv("calorie_efficiency_dataset_kecil (2).csv")
str(data)
## 'data.frame':    110 obs. of  15 variables:
##  $ age                     : int  59 37 45 49 36 33 57 34 63 20 ...
##  $ steps_per_day           : int  4631 4458 10597 1839 4963 4186 10449 10768 6461 10812 ...
##  $ active_minutes          : int  26 34 123 40 68 24 97 105 72 129 ...
##  $ calories_burned         : int  1500 1500 1500 1500 1500 1500 1500 1500 1500 1500 ...
##  $ sleep_hours             : num  7.63 6.98 7.61 7.13 4.61 5.24 5.68 5.59 7.02 6.51 ...
##  $ hydration_liters        : num  2.69 2.28 3.62 2.41 1.81 3.35 2.74 1.9 2.04 2.05 ...
##  $ bmi                     : num  27.4 28.8 17.1 30.1 29.5 ...
##  $ workouts_per_week       : int  1 3 5 6 3 2 4 3 6 3 ...
##  $ muscle_mass_ratio       : num  0.353 0.538 0.289 0.2 0.317 0.359 0.252 0.426 0.2 0.316 ...
##  $ body_fat_percentage     : num  0.211 0.189 0.169 0.252 0.395 0.189 0.245 0.254 0.273 0.243 ...
##  $ heart_rate_resting      : num  69.9 75 58.6 77.8 68.1 71.2 56.1 61.8 66.1 57.2 ...
##  $ heart_rate_avg          : num  111.9 116.3 91.1 127.4 120.9 ...
##  $ continuous_exercise_days: int  4 1 7 1 1 1 1 1 1 1 ...
##  $ efficiency_score        : num  1.349 1.077 0.868 1.86 0.415 ...
##  $ calorie_efficiency      : chr  "Low Efficiency" "Low Efficiency" "Low Efficiency" "Low Efficiency" ...
head(data)
##   age steps_per_day active_minutes calories_burned sleep_hours hydration_liters
## 1  59          4631             26            1500        7.63             2.69
## 2  37          4458             34            1500        6.98             2.28
## 3  45         10597            123            1500        7.61             3.62
## 4  49          1839             40            1500        7.13             2.41
## 5  36          4963             68            1500        4.61             1.81
## 6  33          4186             24            1500        5.24             3.35
##     bmi workouts_per_week muscle_mass_ratio body_fat_percentage
## 1 27.36                 1             0.353               0.211
## 2 28.78                 3             0.538               0.189
## 3 17.10                 5             0.289               0.169
## 4 30.15                 6             0.200               0.252
## 5 29.53                 3             0.317               0.395
## 6 29.13                 2             0.359               0.189
##   heart_rate_resting heart_rate_avg continuous_exercise_days efficiency_score
## 1               69.9          111.9                        4            1.349
## 2               75.0          116.3                        1            1.077
## 3               58.6           91.1                        7            0.868
## 4               77.8          127.4                        1            1.860
## 5               68.1          120.9                        1            0.415
## 6               71.2          126.5                        1            1.078
##   calorie_efficiency
## 1     Low Efficiency
## 2     Low Efficiency
## 3     Low Efficiency
## 4     Low Efficiency
## 5     Low Efficiency
## 6     Low Efficiency
kable(head(data, 6), caption = "Preview Data")
Preview Data
age steps_per_day active_minutes calories_burned sleep_hours hydration_liters bmi workouts_per_week muscle_mass_ratio body_fat_percentage heart_rate_resting heart_rate_avg continuous_exercise_days efficiency_score calorie_efficiency
59 4631 26 1500 7.63 2.69 27.36 1 0.353 0.211 69.9 111.9 4 1.349 Low Efficiency
37 4458 34 1500 6.98 2.28 28.78 3 0.538 0.189 75.0 116.3 1 1.077 Low Efficiency
45 10597 123 1500 7.61 3.62 17.10 5 0.289 0.169 58.6 91.1 7 0.868 Low Efficiency
49 1839 40 1500 7.13 2.41 30.15 6 0.200 0.252 77.8 127.4 1 1.860 Low Efficiency
36 4963 68 1500 4.61 1.81 29.53 3 0.317 0.395 68.1 120.9 1 0.415 Low Efficiency
33 4186 24 1500 5.24 3.35 29.13 2 0.359 0.189 71.2 126.5 1 1.078 Low Efficiency

CLEANING DAN ANALISIS DATA EKSPLORATIF

df_clean <- data %>%
  mutate(across(c(sleep_hours, hydration_liters, bmi, muscle_mass_ratio, 
                  body_fat_percentage, heart_rate_resting, heart_rate_avg, 
                  efficiency_score), as.numeric)) %>%
  dplyr::select(-calories_burned) %>%
  drop_na()

df_clean$calorie_efficiency <- as.factor(df_clean$calorie_efficiency)

df_clean <- df_clean %>%
  group_by(calorie_efficiency) %>%
  filter(n() >= 3) %>%
  ungroup()

print(paste("Jumlah data setelah cleaning:", nrow(df_clean)))
## [1] "Jumlah data setelah cleaning: 108"

Pada tahap preprocessing, dilakukan pembersihan data dengan mengubah beberapa variabel menjadi tipe numerik serta menghapus variabel yang tidak digunakan, yaitu calories_burned. Selanjutnya, data dengan nilai kosong dihapus agar tidak memengaruhi analisis.

Variabel calorie_efficiency dikonversi menjadi faktor karena digunakan sebagai variabel kategorik. Selain itu, data difilter sehingga hanya kategori dengan minimal tiga observasi yang dipertahankan untuk menjaga validitas analisis.

Statistik Deskriptif

summary(df_clean)
##       age        steps_per_day   active_minutes    sleep_hours    
##  Min.   :18.00   Min.   : 1000   Min.   : 10.00   Min.   : 3.330  
##  1st Qu.:30.00   1st Qu.: 5294   1st Qu.: 46.00   1st Qu.: 5.643  
##  Median :37.50   Median : 7237   Median : 70.00   Median : 6.550  
##  Mean   :39.94   Mean   : 6930   Mean   : 67.99   Mean   : 6.440  
##  3rd Qu.:52.00   3rd Qu.: 8826   3rd Qu.: 87.00   3rd Qu.: 7.140  
##  Max.   :64.00   Max.   :11689   Max.   :134.00   Max.   :10.000  
##  hydration_liters      bmi        workouts_per_week muscle_mass_ratio
##  Min.   :0.870    Min.   :16.00   Min.   :0.000     Min.   :0.2000   
##  1st Qu.:1.990    1st Qu.:21.00   1st Qu.:2.000     1st Qu.:0.3033   
##  Median :2.510    Median :24.30   Median :3.000     Median :0.3455   
##  Mean   :2.513    Mean   :24.57   Mean   :2.926     Mean   :0.3477   
##  3rd Qu.:2.945    3rd Qu.:27.94   3rd Qu.:4.000     3rd Qu.:0.3935   
##  Max.   :4.400    Max.   :37.45   Max.   :7.000     Max.   :0.5380   
##  body_fat_percentage heart_rate_resting heart_rate_avg 
##  Min.   :0.0500      Min.   :51.70      Min.   : 80.0  
##  1st Qu.:0.1890      1st Qu.:62.08      1st Qu.:100.2  
##  Median :0.2540      Median :65.15      Median :107.7  
##  Mean   :0.2552      Mean   :66.13      Mean   :107.9  
##  3rd Qu.:0.3095      3rd Qu.:69.72      3rd Qu.:115.6  
##  Max.   :0.4690      Max.   :84.40      Max.   :137.2  
##  continuous_exercise_days efficiency_score       calorie_efficiency
##  Min.   :1.000            Min.   :0.289    High Efficiency:  0     
##  1st Qu.:1.000            1st Qu.:0.541    Low Efficiency :103     
##  Median :2.000            Median :0.690    Moderate       :  5     
##  Mean   :2.463            Mean   :0.876                            
##  3rd Qu.:3.000            3rd Qu.:1.012                            
##  Max.   :7.000            Max.   :4.564

Boxplot Variabel Numerik

df_clean %>%
  dplyr::select(where(is.numeric)) %>%
  tidyr::pivot_longer(cols = everything(), 
                      names_to = "variable", 
                      values_to = "value") %>%
  ggplot(aes(x = variable, y = value)) +
  geom_boxplot(fill = "skyblue") +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1)) +
  labs(title = "Boxplot Variabel Numerik")

Berdasarkan boxplot, sebagian besar variabel memiliki rentang nilai kecil dan terpusat, sedangkan steps_per_day memiliki rentang jauh lebih besar sehingga mendominasi grafik dan membuat variabel lain tampak kecil.

Selain itu, terlihat adanya outlier pada beberapa variabel seperti active_minutes, continuous_exercise_days, dan heart_rate yang menunjukkan adanya data ekstrem. Secara keseluruhan, perbedaan skala antar variabel cukup besar sehingga diperlukan transformasi atau standarisasi sebelum analisis lanjutan.

Boxplot per Faktor

ggplot(df_clean, aes(x = calorie_efficiency, y = active_minutes, fill = calorie_efficiency)) +
  geom_boxplot() +
  theme_minimal() +
  labs(title = "Distribusi Menit Aktif berdasarkan Efisiensi Kalori",
       x = "Calorie Efficiency", y = "Active Minutes")

Berdasarkan boxplot, distribusi active_minutes pada kategori Low Efficiency cenderung lebih stabil dengan median yang lebih tinggi dibandingkan Moderate. Sementara itu, kategori Moderate memiliki variasi yang lebih besar, terlihat dari rentang data yang lebih lebar. Hal ini menunjukkan bahwa kelompok Moderate memiliki pola aktivitas yang lebih beragam dibandingkan Low Efficiency.

Korelasi

df_num <- df_clean %>%
  dplyr::select(where(is.numeric))

corr_matrix <- cor(df_num)

corrplot::corrplot(corr_matrix, tl.col = "black", type = "full", tl.srt = 40, tl.cex = 0.5)

Berdasarkan corrplot, terlihat bahwa beberapa variabel memiliki hubungan yang cukup kuat, baik positif maupun negatif. Variabel steps_per_day dan active_minutes menunjukkan korelasi positif yang kuat, yang berarti semakin banyak langkah per hari, semakin tinggi menit aktivitas. Sebaliknya, terdapat korelasi negatif antara beberapa variabel seperti bmi dengan steps_per_day dan active_minutes, yang menunjukkan bahwa semakin tinggi BMI, aktivitas cenderung lebih rendah.

Selain itu, efficiency_score terlihat memiliki hubungan dengan beberapa variabel seperti heart_rate dan continuous_exercise_days, meskipun tidak semuanya kuat. Secara keseluruhan, sebagian besar variabel memiliki korelasi yang rendah hingga sedang, sehingga menunjukkan tidak adanya multikolinearitas yang tinggi dalam data.

FEATURE SELECTION

model_fs <- lm(efficiency_score ~ ., data = df_clean)
summary(model_fs)
## 
## Call:
## lm(formula = efficiency_score ~ ., data = df_clean)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -1.13021 -0.16451 -0.03807  0.13325  1.50437 
## 
## Coefficients:
##                              Estimate Std. Error t value Pr(>|t|)    
## (Intercept)                 3.349e+00  1.201e+00   2.790 0.006385 ** 
## age                         2.143e-03  2.719e-03   0.788 0.432482    
## steps_per_day              -1.732e-04  4.295e-05  -4.033 0.000112 ***
## active_minutes             -5.048e-03  2.482e-03  -2.034 0.044787 *  
## sleep_hours                 9.803e-02  3.076e-02   3.187 0.001952 ** 
## hydration_liters            4.660e-02  4.591e-02   1.015 0.312700    
## bmi                        -1.266e-02  1.298e-02  -0.975 0.332169    
## workouts_per_week          -3.676e-02  2.282e-02  -1.611 0.110474    
## muscle_mass_ratio          -5.597e-01  5.219e-01  -1.072 0.286343    
## body_fat_percentage        -2.493e-01  3.716e-01  -0.671 0.503891    
## heart_rate_resting         -5.165e-03  1.235e-02  -0.418 0.676799    
## heart_rate_avg             -8.239e-03  3.763e-03  -2.190 0.031015 *  
## continuous_exercise_days    3.695e-02  2.249e-02   1.643 0.103724    
## calorie_efficiencyModerate  1.137e+00  1.770e-01   6.420 5.51e-09 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.3514 on 94 degrees of freedom
## Multiple R-squared:  0.7372, Adjusted R-squared:  0.7009 
## F-statistic: 20.28 on 13 and 94 DF,  p-value: < 2.2e-16
df_selected <- df_clean %>%
  dplyr::select(
    efficiency_score,
    calorie_efficiency,
    sleep_hours,
    hydration_liters,
    bmi,
    heart_rate_avg,
    heart_rate_resting,
    muscle_mass_ratio,
    continuous_exercise_days,
    active_minutes,
    steps_per_day
  )

Pemodelan regresi digunakan sebagai tahap feature selection untuk mengidentifikasi variabel yang memiliki pengaruh signifikan terhadap efficiency_score. Berdasarkan hasil tersebut, dipilih beberapa variabel yang dianggap relevan untuk digunakan dalam analisis lanjutan.

Selanjutnya, dilakukan pemilihan fitur dengan mengambil 10 variabel utama, yaitu efficiency_score, calorie_efficiency, sleep_hours, hydration_liters, bmi, heart_rate_avg, heart_rate_resting, muscle_mass_ratio, continuous_exercise_days, active_minutes, dan steps_per_day. Pemilihan ini bertujuan untuk menyederhanakan model sekaligus mempertahankan variabel yang paling representatif dalam menjelaskan efisiensi kalori.

UJI ASUMSI

Uji Normalitas

Y_vars <- df_selected[, c("active_minutes", "steps_per_day")] 
mshapiro_test(as.matrix(Y_vars))
## # A tibble: 1 × 2
##   statistic p.value
##       <dbl>   <dbl>
## 1     0.982   0.162

Hasil uji normalitas menunjukkan nilai p-value sebesar 0,162 (> 0,05), sehingga data dapat dianggap berdistribusi normal.

Uji Korelasi Pearson’s

korelasi <- cor.test(df_selected$active_minutes, df_selected$steps_per_day)
print(korelasi)
## 
##  Pearson's product-moment correlation
## 
## data:  df_selected$active_minutes and df_selected$steps_per_day
## t = 17.724, df = 106, p-value < 2.2e-16
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
##  0.8077060 0.9056781
## sample estimates:
##       cor 
## 0.8646966

Hasil uji korelasi Pearson menunjukkan nilai korelasi sebesar 0,8647, yang berarti terdapat hubungan positif yang sangat kuat antara active_minutes dan steps_per_day. Nilai p-value yang sangat kecil (< 0,05) menunjukkan bahwa hubungan tersebut signifikan secara statistik. Selain itu, interval kepercayaan 95% berada pada rentang 0,8077 hingga 0,9057, yang semakin memperkuat bahwa korelasi antara kedua variabel tersebut tinggi dan konsisten.

Uji Homogenitas

res_boxm <- boxM(data = Y_vars, group = df_selected$calorie_efficiency)
print(res_boxm)
## 
##  Box's M-test for Homogeneity of Covariance Matrices
## 
## data:  Y_vars
## Chi-Sq (approx.) = 6.4277, df = 3, p-value = 0.09256

Hasil uji Box’s M menunjukkan nilai p-value sebesar 0,09256 (> 0,05), sehingga tidak terdapat perbedaan matriks kovarians antar kelompok. Asumsi terpenuhi

MANOVA

manova_model <- manova(
  cbind(active_minutes, steps_per_day) ~ calorie_efficiency,
  data = df_selected
)
summary(manova_model)
##                     Df   Pillai approx F num Df den Df Pr(>F)
## calorie_efficiency   1 0.036607   1.9949      2    105 0.1411
## Residuals          106

Hasil MANOVA menunjukkan bahwa variabel calorie_efficiency tidak memiliki pengaruh yang signifikan terhadap variabel dependen secara simultan, dengan nilai p-value sebesar 0,1411 (> 0,05). Hal ini berarti tidak terdapat perbedaan yang signifikan antar kelompok calorie_efficiency terhadap kombinasi variabel dependen.

MANCOVA

mancova_model <- manova(
  cbind(active_minutes, steps_per_day) ~ calorie_efficiency + bmi,
  data = df_selected
)
summary(mancova_model)
##                     Df  Pillai approx F num Df den Df    Pr(>F)    
## calorie_efficiency   1 0.08826    5.034      2    104  0.008188 ** 
## bmi                  1 0.71443  130.094      2    104 < 2.2e-16 ***
## Residuals          105                                             
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Hasil MANCOVA menunjukkan bahwa variabel calorie_efficiency dan bmi berpengaruh signifikan terhadap variabel dependen secara simultan, dengan p-value masing-masing 0,008 (< 0,05) dan < 2,2e-16. Hal ini berarti terdapat perbedaan yang signifikan antar kategori calorie_efficiency setelah mengontrol variabel bmi. Selain itu, bmi memiliki pengaruh yang sangat kuat terhadap variabel dependen dalam model.

ANOVA

summary.aov(manova_model)
##  Response active_minutes :
##                     Df Sum Sq Mean Sq F value Pr(>F)
## calorie_efficiency   1    462  462.33  0.5672  0.453
## Residuals          106  86403  815.12               
## 
##  Response steps_per_day :
##                     Df    Sum Sq  Mean Sq F value Pr(>F)
## calorie_efficiency   1  14732561 14732561  2.5045 0.1165
## Residuals          106 623537161  5882426

Hasil ANOVA menunjukkan bahwa variabel calorie_efficiency tidak berpengaruh signifikan terhadap active_minutes maupun steps_per_day. Hal ini terlihat dari nilai p-value masing-masing sebesar 0,453 dan 0,1165 yang lebih besar dari 0,05. Dengan demikian, tidak terdapat perbedaan yang signifikan rata-rata active_minutes dan steps_per_day antar kategori calorie_efficiency.

ANCOVA

ancova_model <- aov(
  efficiency_score ~ calorie_efficiency + sleep_hours + bmi,
  data = df_selected
)
summary(ancova_model)
##                     Df Sum Sq Mean Sq F value   Pr(>F)    
## calorie_efficiency   1  8.598   8.598   43.47 1.83e-09 ***
## sleep_hours          1  2.324   2.324   11.75 0.000872 ***
## bmi                  1 12.665  12.665   64.03 1.82e-12 ***
## Residuals          104 20.572   0.198                     
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Hasil ANCOVA menunjukkan bahwa variabel calorie_efficiency, sleep_hours, dan bmi berpengaruh signifikan terhadap efficiency_score (p-value < 0,05). Variabel bmi memiliki pengaruh paling kuat, diikuti oleh calorie_efficiency dan sleep_hours. Hal ini berarti terdapat perbedaan yang signifikan antar kategori calorie_efficiency setelah mengontrol variabel sleep_hours dan bmi.