Persiapan Data dan Analisis

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(emmeans)
## Welcome to emmeans.
## Caution: You lose important information if you filter this package's results.
## See '? untidy'
library(ggpubr)
## Loading required package: ggplot2
library(formattable)
library(kableExtra)
## 
## Attaching package: 'kableExtra'
## The following object is masked from 'package:dplyr':
## 
##     group_rows
library(rstatix)
## 
## Attaching package: 'rstatix'
## The following object is masked from 'package:stats':
## 
##     filter
library(report)
library(stats)

Library yang diperlukan untuk analisis yang akan dimuat.

Analisis ini menggunakan dataset yang diambil dari data_diet.csv untuk menyelidiki efek dari berbagai jenis diet terhadap berat badan setelah 6 minggu, dengan mempertimbangkan faktor gender dan kategori berat awal.

data <- read.csv("data_diet.csv", stringsAsFactors = T)
data
##    gender Diet weight weight6weeks
## 1       M    B      a         60.0
## 2       M    B      c        103.0
## 3       F    A      a         54.2
## 4       F    A      a         54.0
## 5       F    A      a         63.3
## 6       F    A      a         61.1
## 7       F    A      a         62.2
## 8       F    A      a         64.0
## 9       F    A      a         65.0
## 10      F    A      a         60.5
## 11      F    A      a         68.1
## 12      F    A      a         66.9
## 13      F    A      b         70.5
## 14      F    A      a         69.0
## 15      F    A      a         68.4
## 16      F    A      b         81.1
## 17      F    B      a         60.1
## 18      F    B      a         56.0
## 19      F    B      a         57.3
## 20      F    B      a         56.7
## 21      F    B      a         55.0
## 22      F    B      a         62.4
## 23      F    B      a         60.3
## 24      F    B      a         59.4
## 25      F    B      a         62.0
## 26      F    B      a         64.0
## 27      F    B      a         63.8
## 28      F    B      a         63.3
## 29      F    B      b         72.7
## 30      F    B      b         77.5
## 31      F    C      a         53.0
## 32      F    C      a         56.4
## 33      F    C      a         60.6
## 34      F    C      a         58.2
## 35      F    C      a         58.2
## 36      F    C      a         61.6
## 37      F    C      a         60.2
## 38      F    C      a         61.8
## 39      F    C      a         63.0
## 40      F    C      a         62.7
## 41      F    C      b         71.1
## 42      F    C      a         64.4
## 43      F    C      a         68.9
## 44      F    C      a         68.7
## 45      F    C      b         71.0
## 46      M    A      b         71.6
## 47      M    A      b         70.9
## 48      M    A      a         69.5
## 49      M    A      b         73.9
## 50      M    A      b         71.0
## 51      M    A      b         77.6
## 52      M    A      b         79.1
## 53      M    A      b         81.5
## 54      M    A      b         81.9
## 55      M    A      b         84.5
## 56      M    B      a         66.8
## 57      M    B      b         72.6
## 58      M    B      a         69.2
## 59      M    B      b         72.5
## 60      M    B      b         72.7
## 61      M    B      b         76.3
## 62      M    B      b         73.6
## 63      M    B      b         72.9
## 64      M    B      b         71.1
## 65      M    B      b         81.4
## 66      M    B      b         75.7
## 67      M    C      a         68.5
## 68      M    C      b         72.1
## 69      M    C      b         72.5
## 70      M    C      b         77.5
## 71      M    C      b         75.2
## 72      M    C      a         69.4
## 73      M    C      b         74.5
## 74      M    C      b         80.2
## 75      M    C      b         79.9
## 76      M    C      b         79.7
## 77      M    C      b         77.8
## 78      M    C      b         81.9

Data telah berhasil dimuat. Dataset berisi informasi tentang gender, jenis Diet (A, B, C), kategori berat (a=ringan, b=sedang, c=berat), dan berat badan setelah 6 minggu.

Statistik Deskriptif

str(data)
## 'data.frame':    78 obs. of  4 variables:
##  $ gender      : Factor w/ 2 levels "F","M": 2 2 1 1 1 1 1 1 1 1 ...
##  $ Diet        : Factor w/ 3 levels "A","B","C": 2 2 1 1 1 1 1 1 1 1 ...
##  $ weight      : Factor w/ 3 levels "a","b","c": 1 3 1 1 1 1 1 1 1 1 ...
##  $ weight6weeks: num  60 103 54.2 54 63.3 61.1 62.2 64 65 60.5 ...

Data ini terdiri dari 78 observasi dan 4 variabel, yang dirangkum sebagai berikut: gender: variabel gender merupakan faktor dengan 2 level, yaitu: “F” untuk perempuan “M” untuk laki-laki Diet: variabel Diet menunjukkan tipe diet yang diikuti oleh partisipan, dengan 3 level: “A” “B” “C” weight: variabel weight merupakan faktor yang mewakili kategori berat badan awal partisipan, dengan 3 level: “a” (kategori berat badan ringan) “b” (kategori berat badan sedang) “c” (kategori berat badan berat) weight6weeks: variabel weight6weeks adalah variabel numerik yang menunjukkan berat badan partisipan setelah 6 minggu mengikuti diet. Nilai berat badan tercatat dalam satuan kilogram.

Hasil weight6weeks terhadap jenis diet untuk masing-masing gender.

ggboxplot(data, x = "Diet", y = "weight6weeks", color = "weight", facet.by = "gender")

Perempuan (F): Untuk kategori berat badan awal a (merah) dan b (hijau), berat badan setelah 6 minggu relatif lebih rendah untuk Diet A dan B, dengan variasi yang lebih kecil di Diet C. Partisipan perempuan dengan kategori b memiliki rentang berat badan yang lebih tinggi dan konsisten di semua diet dibandingkan dengan partisipan di kategori a.

Laki-laki (M): Partisipan laki-laki di kategori a memiliki berat badan lebih rendah secara signifikan setelah Diet B, sementara kategori b menunjukkan rentang yang lebih besar. Pada Diet C, ada satu partisipan laki-laki dengan kategori c yang memiliki berat badan sangat tinggi dibandingkan dengan yang lain.

Variasi berat badan lebih besar terlihat di kategori b dibandingkan dengan kategori a di sebagian besar diet. Ada beberapa outliers atau nilai yang menyimpang jauh dari nilai rata-rata, khususnya di Diet B untuk laki-laki di kategori b.

ms <- data %>%
  group_by(gender, Diet, weight) %>%
  get_summary_stats(weight6weeks, type = "mean_sd")

ms$sd <- color_bar("lightgreen")(ms$sd)
ms$mean <- color_tile("yellow", "red")(ms$mean)

ms$gender <- ifelse(
  ms$gender == "male",
  cell_spec(ms$gender, color = "steelblue", bold = T),
  cell_spec(ms$gender, color = "hotpink", bold = T)
)
ms %>% 
  kbl(escape = F) %>%
  kable_material_dark()
gender Diet weight variable n mean sd
F A a weight6weeks 12 63.058 5.049
F A b weight6weeks 2 75.800 7.495
F B a weight6weeks 12 60.025 3.173
F B b weight6weeks 2 75.100 3.394
F C a weight6weeks 13 61.362 4.482
F C b weight6weeks 2 71.050 0.071
M A a weight6weeks 1 69.500 NA
M A b weight6weeks 9 76.889 5.210
M B a weight6weeks 3 65.333 4.772
M B b weight6weeks 9 74.311 3.117
M B c weight6weeks 1 103.000 NA
M C a weight6weeks 2 68.950 0.636
M C b weight6weeks 10 77.130 3.406

Perbedaan Gender: Rata-rata berat badan setelah 6 minggu cenderung lebih tinggi pada laki-laki (kategori b di semua diet) dibandingkan perempuan. Selain itu, partisipan laki-laki memiliki lebih banyak variasi dalam berat badan mereka, terutama di kategori b.

Pengaruh Diet: Untuk perempuan, Diet B tampaknya menghasilkan rata-rata berat badan yang lebih rendah dibandingkan dengan Diet A dan C. Namun, untuk laki-laki, Diet tidak menunjukkan pengaruh yang signifikan dalam perbedaan rata-rata berat badan, kecuali di beberapa kategori kecil.

Variasi Berat Badan: Kategori b umumnya menunjukkan standar deviasi yang lebih tinggi, yang menunjukkan lebih banyak variasi di antara partisipan dengan berat badan awal yang lebih tinggi.

Asumsi Outlier

tab <- data %>%
  group_by(gender, Diet, weight) %>%
  identify_outliers(weight6weeks)

tab$is.extreme <- cell_spec(tab$is.extreme, color =  ifelse(tab$is.extreme == TRUE, "red", "white"))

tab %>%
  kbl(caption = "Outliers identification", escape = F) %>% 
  kable_material_dark("striped")
Outliers identification
gender Diet weight weight6weeks is.outlier is.extreme
M B b 81.4 TRUE FALSE

81.4 adalah outlier namun tidak extreme, meskipun nilainya cukup tinggi dibandingkan kelompok lainnya, masih dalam batas wajar.

Normalitas

Menguji asumsi normalitas dengan menganalisis model residual, QQ plot, dan Shapiro-Wilk tes.

model  <- lm(weight6weeks ~ gender*Diet*weight, data = data)
ggqqplot(residuals(model))

Mayoritas titik-titik mengikuti garis diagonal dengan baik, menunjukkan bahwa data memiliki distribusi yang mendekati normal, meskipun ada sedikit deviasi di bagian ujung bawah dan atas.

shapiro.test(residuals(model))
## 
##  Shapiro-Wilk normality test
## 
## data:  residuals(model)
## W = 0.98732, p-value = 0.6362

Berdasarkan hasil uji Shapiro-Wilk, dapat disimpulkan bahwa residual model tidak menunjukkan deviasi yang signifikan dari normalitas. Hal ini menunjukkan bahwa asumsi normalitas terpenuhi.

Cek asumsi normalitas menurut grup. Menghitung Shapiro-Wilk tes untuk masing-masing kombinasi faktor.

sw <- data %>%
  group_by(gender, Diet, weight) %>%
  filter(n() >= 3) %>% 
  summarise(
    statistic = shapiro.test(weight6weeks)$statistic,
    p = shapiro.test(weight6weeks)$p.value,
    n = n()
  ) %>%
  ungroup()
## `summarise()` has grouped output by 'gender', 'Diet'. You can override using
## the `.groups` argument.
sw$p <- cell_spec(round(sw$p, 4), color = ifelse(sw$p < 0.05, "red", "white"))

sw %>% 
  kbl(caption = "Shapiro-Wilk Test Results", escape = F) %>% 
  kable_material_dark("striped")
Shapiro-Wilk Test Results
gender Diet weight statistic p n
F A a 0.9037493 0.1773 12
F B a 0.9259728 0.3394 12
F C a 0.9664736 0.8489 13
M A b 0.9022056 0.2651 9
M B a 0.9291569 0.4855 3
M B b 0.8222197 0.0365 9
M C b 0.9343508 0.492 10

Nilai W mendekati 1 menunjukkan data berdistribusi normal. Semakin rendah nilai W, semakin besar kemungkinan data tidak berdistribusi normal. Jika p-value > 0.05, maka tidak ada cukup bukti untuk menolak hipotesis nol (H₀) yang menyatakan bahwa data berasal dari distribusi normal. Sebaliknya, jika p-value ≤ 0.05, kita menolak H₀. Semua kelompok (gender, diet, weight) menunjukkan bahwa data berdistribusi normal, kecuali untuk M B b, yang memiliki p-value sebesar 0.0365.

ggqqplot(data, "weight6weeks", ggtheme = theme_bw()) +
  facet_grid(gender + Diet ~ weight, labeller = "label_both")
## `geom_line()`: Each group consists of only one observation.
## ℹ Do you need to adjust the group aesthetic?
## `geom_line()`: Each group consists of only one observation.
## ℹ Do you need to adjust the group aesthetic?

Pengaruh Diet: Diet A: memiliki efek yang cukup konsisten dalam meningkatkan berat badan pada sebagian besar sampel. Tren kenaikan berat badan secara umum terlihat jelas pada Diet A. Diet B: efek Diet B terhadap berat badan cenderung lebih bervariasi. Beberapa sampel menunjukkan peningkatan berat badan, sementara yang lain tidak menunjukkan perubahan yang signifikan. Diet C: menunjukkan variasi dalam efeknya terhadap berat badan. Beberapa sampel mengalami penurunan berat badan, sementara yang lain mengalami peningkatan atau tidak ada perubahan. Berat Badan Awal: Berat badan awal dari setiap sampel juga mempengaruhi respons terhadap diet. Sampel dengan berat badan awal yang lebih rendah cenderung menunjukkan perubahan yang lebih besar dibandingkan dengan sampel yang memiliki berat badan awal yang lebih tinggi.

Uji Homogenitas

Uji homogenitas dengan menggunakan tes Levene.

data %>% 
  levene_test(weight6weeks~gender*Diet*weight) %>%
  kbl(caption = "Levene's test") %>%
  kable_material_dark()
Levene’s test
df1 df2 statistic p
12 65 1.33497 0.2211714

Berdasarkan nilai p yang diberikan sebesar 0,2211714, yang lebih besar dari 0,05, dapat disimpulkan bahwa tidak ada perbedaan yang signifikan dalam varians weight6weeks di seluruh kombinasi gender, Diet, dan weight. Jadi, asumsi homogenitas varians terpenuhi.

plot(lm(weight6weeks~gender*Diet*weight, data=data),1)

Titik-titik tampaknya menyebar secara acak di sekitar garis horizontal nol tanpa pola yang jelas. Meskipun ada beberapa titik yang sedikit menyimpang, secara keseluruhan, tidak ada indikasi yang kuat adanya heteroskedastisitas.

ANOVA

res.aov <- data %>% anova_test(weight6weeks ~ gender*Diet*weight)
res.aov %>% kbl(caption = "ANOVA table") %>% 
  kable_material_dark() %>%
  row_spec(c(7), color ="red", bold = T)
ANOVA table
Effect DFn DFd F p p<.05 ges
gender 1 65 10.239 0.002
0.136
Diet 2 65 2.776 0.070 0.079
weight 2 65 56.401 0.000
0.634
gender:Diet 2 65 1.037 0.360 0.031
gender:weight 1 65 2.531 0.116 0.037
Diet:weight 2 65 0.468 0.628 0.014
gender:Diet:weight 2 65 0.296 0.745 0.009
Efek yang signifikan ditunjukkan ketika nilai p kurang dari 0,05. Ini menunjukkan bahwa faktor yang sedang diuji memiliki dampak yang signifikan terhadap variabel dependen. Nilai eta-squared umum (ges) memberikan perkiraan ukuran efek untuk setiap efek yang signifikan. Nilai ges yang lebih besar menunjukkan efek yang lebih kuat. Kesimpulan: Ada perbedaan yang signifikan dalam variabel dependen antara laki-laki dan perempuan (efek gender). weight memiliki dampak yang signifikan terhadap variabel dependen. Efek weight terhadap variabel dependen berbeda antara laki-laki dan perempuan (efek interaksi).
results <- aov(weight6weeks ~ gender*Diet*weight, data = data)
anova(results) %>% kbl %>% kable_material_dark()
Df Sum Sq Mean Sq F value Pr(>F)
gender 1 2854.20155 2854.201553 162.0065705 0.0000000
Diet 2 67.01552 33.507760 1.9019250 0.1574962
weight 2 1974.09789 987.048944 56.0256210 0.0000000
gender:Diet 2 23.79940 11.899701 0.6754358 0.5124701
gender:weight 1 41.60905 41.609054 2.3617604 0.1291957
Diet:weight 2 16.50181 8.250904 0.4683273 0.6281445
gender:Diet:weight 2 10.41805 5.209024 0.2956680 0.7450297
Residuals 65 1145.15788 17.617814 NA NA
report(results)
## The ANOVA (formula: weight6weeks ~ gender * Diet * weight) suggests that:
## 
##   - The main effect of gender is statistically significant and large (F(1, 65) =
## 162.01, p < .001; Eta2 (partial) = 0.71, 95% CI [0.62, 1.00])
##   - The main effect of Diet is statistically not significant and small (F(2, 65)
## = 1.90, p = 0.157; Eta2 (partial) = 0.06, 95% CI [0.00, 1.00])
##   - The main effect of weight is statistically significant and large (F(2, 65) =
## 56.03, p < .001; Eta2 (partial) = 0.63, 95% CI [0.51, 1.00])
##   - The interaction between gender and Diet is statistically not significant and
## small (F(2, 65) = 0.68, p = 0.512; Eta2 (partial) = 0.02, 95% CI [0.00, 1.00])
##   - The interaction between gender and weight is statistically not significant
## and small (F(1, 65) = 2.36, p = 0.129; Eta2 (partial) = 0.04, 95% CI [0.00,
## 1.00])
##   - The interaction between Diet and weight is statistically not significant and
## small (F(2, 65) = 0.47, p = 0.628; Eta2 (partial) = 0.01, 95% CI [0.00, 1.00])
##   - The interaction between gender, Diet and weight is statistically not
## significant and very small (F(2, 65) = 0.30, p = 0.745; Eta2 (partial) =
## 9.02e-03, 95% CI [0.00, 1.00])
## 
## Effect sizes were labelled following Field's (2013) recommendations.

Dari hasil analisis ANOVA ini, kita dapat menyimpulkan bahwa: Jenis kelamin dan berat badan adalah faktor utama yang mempengaruhi variabel yang Anda ukur. Diet tidak memberikan kontribusi signifikan terhadap variasi dalam data. Tidak ada interaksi yang signifikan antara faktor-faktor yang diuji. Artinya, perbedaan utama dalam variabel dependen Anda disebabkan oleh perbedaan jenis kelamin dan variasi berat badan.

Post-hoc tes

Two-way interactions Kita mengevaluasi efek dari Diet*weight pada weight6weeks pada masing-masing kategori gender.

model  <- lm(weight6weeks ~ gender*Diet*weight, data = data)
data %>%
  group_by(gender) %>%
  anova_test(weight6weeks ~ Diet*weight, error = model) %>% 
  kbl(caption = "Two-way interactions") %>% 
  kable_material_dark()
Two-way interactions
gender Effect DFn DFd F p p<.05 ges
F Diet 2 65 1.607 0.208 0.047
F weight 1 65 45.717 0.000
0.413
F Diet:weight 2 65 0.714 0.493 0.022
M Diet 2 28 2.046 0.148 0.127
M weight 2 28 38.469 0.000
0.733
M Diet:weight 2 28 0.055 0.947 0.004
Berat badan adalah faktor utama yang mempengaruhi variabel dependen. Jenis kelamin dan diet tidak memiliki pengaruh yang signifikan secara individu. Tidak ada interaksi yang signifikan antara faktor-faktor yang diuji.

Efek utama Kelompokkan data berdasarkan jenis kelamin dan weight, dan analisis efek utama sederhana dari perlakuan terhadap weight6weeks.

weight.effect <- data %>%
  group_by(gender, Diet) %>%
  anova_test(weight6weeks ~ weight, error = model)

weight.effect %>% kbl(caption = "weight effect") %>% 
  kable_material_dark() %>%
  row_spec(c(1,2), color ="red", bold = T)
weight effect
gender Diet Effect DFn DFd F p p<.05 ges
F A weight 1 65 15.797 1.79e-04
0.196
F B weight 1 65 22.113 1.38e-05
0.254
F C weight 1 65 9.235 3.00e-03
0.124
M A weight 1 65 2.789 1.00e-01 0.041
M B weight 2 65 30.214 0.00e+00
0.482
M C weight 1 65 6.330 1.40e-02
0.089
Terdapat efek yang signifikan dari weight terhadap weight6weeks pada perempuan di semua kategori diet, tetapi lebih kuat pada Diet B. Pada laki-laki, efek weight hanya signifikan pada Diet B dan C, sementara Diet A tidak menunjukkan efek yang signifikan. Ukuran efek menunjukkan bahwa Diet B memiliki pengaruh yang paling kuat pada laki-laki, sementara efek pada perempuan cenderung bervariasi tergantung pada diet yang diambil.

Pairwise comparisons

Membandingkan perbedaan weight terhadap gender dan variabel Diet.

pwc <- data %>%
  group_by(gender, Diet) %>%
  emmeans_test(weight6weeks ~ weight, p.adjust.method = "bonferroni") %>%
  select(-df, -statistic, -p)

pwc %>% filter(gender == "F", Diet == "A") %>%
  kbl(caption = "Pairwise comparisons") %>% 
  kable_material_dark()
Pairwise comparisons
gender Diet term .y. group1 group2 p.adj p.adj.signif
F A weight weight6weeks a b 0.0001795 ***
F A weight weight6weeks a c NA
F A weight weight6weeks b c NA
pwc %>% filter(gender == "F", Diet == "B") %>%
  kbl(caption = "Pairwise comparisons") %>% 
  kable_material_dark()
Pairwise comparisons
gender Diet term .y. group1 group2 p.adj p.adj.signif
F B weight weight6weeks a b 1.38e-05 ****
F B weight weight6weeks a c NA
F B weight weight6weeks b c NA

Perbandingan Berpasangan untuk Jenis Kelamin (gender) dan Diet A: Perbandingan antara kelompok A dan B: p-value yang disesuaikan sangat kecil (1.795e-05), menunjukkan perbedaan yang signifikan antara laki-laki dan perempuan pada diet A. Perbandingan antara kelompok A dan C: Tidak ada perbandingan yang tersedia (NA). Perbandingan antara kelompok B dan C: Tidak ada perbandingan yang tersedia (NA).

Perbandingan Berpasangan untuk Jenis Kelamin (gender) dan Diet B: Perbandingan antara kelompok A dan B: p-value yang disesuaikan sangat kecil (1.38e-05), menunjukkan perbedaan yang signifikan antara laki-laki dan perempuan pada diet B. Perbandingan antara kelompok A dan C: Tidak ada perbandingan yang tersedia (NA). Perbandingan antara kelompok B dan C: Tidak ada perbandingan yang tersedia (NA).

Kesimpulan: Terdapat efek yang signifikan dari weight terhadap weight6weeks pada perempuan di semua kategori diet, tetapi lebih kuat pada Diet B. Pada laki-laki, efek weight hanya signifikan pada Diet B dan C, sementara Diet A tidak menunjukkan efek yang signifikan. Ukuran efek menunjukkan bahwa Diet B memiliki pengaruh yang paling kuat pada laki-laki, sementara efek pada perempuan cenderung bervariasi tergantung pada diet yang diambil.