#Descriptive Outlier

library(readr)
data <- read.csv("D:/download/data_fix.csv")
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
str(data)
## 'data.frame':    78 obs. of  4 variables:
##  $ gender      : chr  "M" "M" "F" "F" ...
##  $ Diet        : chr  "B" "B" "A" "A" ...
##  $ weight      : chr  "a" "c" "a" "a" ...
##  $ weight6weeks: num  60 103 54.2 54 63.3 61.1 62.2 64 65 60.5 ...
library(ggpubr)
## Loading required package: ggplot2
ggboxplot(data, x = "Diet", y = "weight6weeks", color = "weight", facet.by = "gender")

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

library(kableExtra)
library(formattable)

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
library(rstatix)
## 
## Attaching package: 'rstatix'
## The following object is masked from 'package:stats':
## 
##     filter
library(kableExtra)

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

#Normality

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
library(ggpubr)
model <- lm(weight6weeks ~ gender * weight, data = data)
ggqqplot(residuals(model))

library(stats)
shapiro.test(residuals(model))
## 
##  Shapiro-Wilk normality test
## 
## data:  residuals(model)
## W = 0.9817, p-value = 0.325
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

#Homogenitas

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

##Fit linear model and plot

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

##Anova

library(formattable)
library(kableExtra)
library(dplyr)
## 
## Attaching package: 'dplyr'
## The following object is masked from 'package:kableExtra':
## 
##     group_rows
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(rstatix)
library(report)
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
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.

#Post hoc test

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
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
#Pairwise
library(ggplot2)
library(kableExtra)
library(dplyr)
library(rstatix)
library(report)
pwc <- data %>%
  group_by(gender, weight) %>%
  emmeans_test(weight6weeks ~ Diet, p.adjust.method = "bonferroni") %>%
  select(-df, -statistic, -p) # Remove details
# Show comparison results for male at high weight
pwc %>% filter(gender == "male", weight == "96-110") %>%
  kbl(caption = "Pairwise comparisons") %>% 
  kable_material_dark()
Pairwise comparisons
gender weight term .y. group1 group2 p.adj p.adj.signif