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.
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.
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")
| 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.
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")
| 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 dengan menggunakan tes Levene.
data %>%
levene_test(weight6weeks~gender*Diet*weight) %>%
kbl(caption = "Levene's test") %>%
kable_material_dark()
| 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.
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)
| 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 |
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.
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()
| 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 |
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)
| 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 |
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()
| 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()
| 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.