Librerias requeridas

library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr     1.1.4     ✔ readr     2.1.5
## ✔ forcats   1.0.0     ✔ stringr   1.5.1
## ✔ ggplot2   3.5.1     ✔ tibble    3.2.1
## ✔ lubridate 1.9.4     ✔ tidyr     1.3.1
## ✔ purrr     1.0.4     
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(ggpubr)
library(rstatix)
## 
## Attaching package: 'rstatix'
## 
## The following object is masked from 'package:stats':
## 
##     filter
library(readxl)
library(reshape2)
## 
## Attaching package: 'reshape2'
## 
## The following object is masked from 'package:tidyr':
## 
##     smiths
library(afex)
## Loading required package: lme4
## Loading required package: Matrix
## 
## Attaching package: 'Matrix'
## 
## The following objects are masked from 'package:tidyr':
## 
##     expand, pack, unpack
## 
## ************
## Welcome to afex. For support visit: http://afex.singmann.science/
## - Functions for ANOVAs: aov_car(), aov_ez(), and aov_4()
## - Methods for calculating p-values with mixed(): 'S', 'KR', 'LRT', and 'PB'
## - 'afex_aov' and 'mixed' objects can be passed to emmeans() for follow-up tests
## - Get and set global package options with: afex_options()
## - Set sum-to-zero contrasts globally: set_sum_contrasts()
## - For example analyses see: browseVignettes("afex")
## ************
## 
## Attaching package: 'afex'
## 
## The following object is masked from 'package:lme4':
## 
##     lmer
library(car)
## Loading required package: carData
## 
## Attaching package: 'car'
## 
## The following object is masked from 'package:dplyr':
## 
##     recode
## 
## The following object is masked from 'package:purrr':
## 
##     some

DISEÑO EN MEDIDAS REPETIDAS EN UNA VÍA - FACTOR INTRA-SUJETO Tiempo (Aceite I, Aceite II, Aceite III) FACTORIAL SIMPLE

excel_sheets("aceite.xlsx")
## [1] "una_via"   "dos_vias"  "tres_vias"
data_una_via=read_excel("aceite.xlsx", sheet = "una_via")
head(data_una_via, 3)
## # A tibble: 3 × 3
##   aceite_I aceite_II aceite_III
##      <dbl>     <dbl>      <dbl>
## 1     2.79      2.41       2.01
## 2     2.81      2.02       1.96
## 3     2.69      2.08       1.85
data_una_via$ID=1:nrow(data_una_via)

data_una_via= data_una_via %>%
  gather(key = "tiempo", value = "score", aceite_I,aceite_II, aceite_III) %>%
  convert_as_factor(ID, tiempo)

head(data_una_via, 3)
## # A tibble: 3 × 3
##   ID    tiempo   score
##   <fct> <fct>    <dbl>
## 1 1     aceite_I  2.79
## 2 2     aceite_I  2.81
## 3 3     aceite_I  2.69

La creación del ID se usa para identificar cada planta de limonaria (Cymbopogon citratus), indicando que los valores de score en diferentes niveles de tiempo provienen de las mismas unidades experimentales

data_una_via %>%
  group_by(tiempo) %>%
  get_summary_stats(score, type = "mean_sd")
## # A tibble: 3 × 5
##   tiempo     variable     n  mean    sd
##   <fct>      <fct>    <dbl> <dbl> <dbl>
## 1 aceite_I   score      120  2.80 0.095
## 2 aceite_II  score      120  2.20 0.12 
## 3 aceite_III score      120  2.00 0.095
#Visualización gráfica
bxp = ggboxplot(data_una_via, x = "tiempo", y = "score", add = "point")
bxp

En el gráfico se puede evidenciar una disminución progresiva respecto a los valores medios de aceite I a aceite III. Donde el aceite I presenta la menor dispersión y menos valores atípicos, por lo que hay mayor estabilidad en los datos; mientras que los aceites II y III presentan mayor variablidad y más valores atípicos. La tendencia descendente en los puntajes indica que el factor tiempo influye en la cantidad de aceite esencial.

data_una_via %>%
  group_by(tiempo) %>%
  identify_outliers(score)
## # A tibble: 5 × 5
##   tiempo     ID    score is.outlier is.extreme
##   <fct>      <fct> <dbl> <lgl>      <lgl>     
## 1 aceite_II  56     1.90 TRUE       FALSE     
## 2 aceite_II  60     1.89 TRUE       FALSE     
## 3 aceite_II  61     2.54 TRUE       FALSE     
## 4 aceite_III 26     1.75 TRUE       FALSE     
## 5 aceite_III 29     2.28 TRUE       FALSE

Según la tabla anterior se puede evidenciar que aunque hay datos atípicos estos no son extremos

data_una_via %>%
  group_by(tiempo) %>%
  shapiro_test(score)
## # A tibble: 3 × 4
##   tiempo     variable statistic     p
##   <fct>      <chr>        <dbl> <dbl>
## 1 aceite_I   score        0.987 0.331
## 2 aceite_II  score        0.996 0.976
## 3 aceite_III score        0.994 0.901

Según la evaluacion del test de shapiro-Wilk. Los valores p fueron > 0.05, por lo cual no se rechaza la hipotesis nula, lo que significa que los datos no presentan desviaciones significativas respecto a la normalidad.

Visualizaciòn Gráfica

ggqqplot(data_una_via, "score", facet.by = "tiempo")

Este gráfico de normalidad permite verificar visualmente que en los tres tiempos los puntos se alinean mayormente con la diagonal, lo que sugiere que la distribución de los datos no presenta fuertes desviaciones de la normalidad. Afirmando los resultados de la prueba Shapiro-Wilk.

res.aov= anova_test(data = data_una_via, dv = score, wid = ID, within = tiempo)
summary(res.aov)
##                               Length Class      Mode
## ANOVA                         7      data.frame list
## Mauchly's Test for Sphericity 4      data.frame list
## Sphericity Corrections        9      data.frame list
res.aov$`Mauchly's Test for Sphericity`
##   Effect     W        p p<.05
## 1 tiempo 0.794 1.25e-06     *
res.aov$`Sphericity Corrections`
##   Effect   GGe       DF[GG]     p[GG] p[GG]<.05  HFe       DF[HF]     p[HF]
## 1 tiempo 0.829 1.66, 197.38 8.55e-166         * 0.84 1.68, 199.83 8.25e-168
##   p[HF]<.05
## 1         *
get_anova_table(res.aov, correction="GG")#Greenhouse-Geissser
## ANOVA Table (type III tests)
## 
##   Effect  DFn    DFd        F         p p<.05   ges
## 1 tiempo 1.66 197.38 5429.055 8.55e-166     * 0.914

En este caso el valor p fue < 0.05, indicando que la esfericidad no se cumple. Por lo cual, se deben aplicar correciones (greenhouse-Geissser o Huynh-Feldt) para ajustar los grados de libertad y evitar errores en la inferencia estadística. Ádemas la estimación ges indica un efecto muy grande del factor tiempo sobre la variable respuesta.

Prueba Posc-hoc

  • Comparación entre tiempos
pwc= data_una_via %>%
  pairwise_t_test(
    score ~ tiempo, paired = TRUE,
    p.adjust.method = "bonferroni"
  )
pwc
## # A tibble: 3 × 10
##   .y.   group1    group2        n1    n2 statistic    df         p     p.adj
## * <chr> <chr>     <chr>      <int> <int>     <dbl> <dbl>     <dbl>     <dbl>
## 1 score aceite_I  aceite_II    120   120      71.6   119 1.11e- 99 3.33e- 99
## 2 score aceite_I  aceite_III   120   120     133.    119 2.95e-131 8.85e-131
## 3 score aceite_II aceite_III   120   120      21.8   119 2.72e- 43 8.16e- 43
## # ℹ 1 more variable: p.adj.signif <chr>

Basandonos en la tabla anterior se rechaza la hipótesis nula, ya que todos los p- value = < 0.05. Por ende hay diferencias significativas por pares, lo que confirma que almenos un aceite tiene un efecto diferente en el score.

  • Resumen Estadístico ANOVA de Una Sola Via
pwc= pwc %>% add_xy_position(x = "tiempo")
bxp + stat_pvalue_manual(pwc) +labs(subtitle = get_test_label(res.aov, detailed = TRUE),
    caption = get_pwc_label(pwc)
  )

Esta gráfica final representa los resultados del ANOVA de medidas repetidas para el factor tiempo, comparando el efecto de los diferentes aceites en el score, con resultados altamente significativos (p < 0.0001) entre los diferentes niveles de tiempo. El valor de n²g indica una variabilidad total de 91%, adicionalmente el valor F indica una alta variabilidad explicada por el factor tiempo.

DISEÑO EN MEDIDAS REPETIDAS EN DOS VÍAS - FACTOR INTRA-SUJETOS Tiempo (Aceite I, Aceite II, Aceite III) Y FACTOR ENTRE-SUJETOS Método de Extracción (Vapor, CO2) FACTORIAL MIXTO

En este diseño se quiere saber si existe una interacción significativa entre la extracción y el tiempo en la cantidad de aceite esencial recolectado.

set.seed(123)
data_dos_vias=read_excel("aceite.xlsx", sheet = "dos_vias")
data_dos_vias$ID=1:nrow(data_dos_vias)
data_dos_vias %>% sample_n_by(Extracción, size = 1)
## # A tibble: 2 × 5
##   aceite_I aceite_II aceite_III Extracción    ID
##      <dbl>     <dbl>      <dbl> <chr>      <int>
## 1     2.87      2.35       1.88 CO2           91
## 2     2.77      2.09       2.03 vapor         15
data_dos_vias = data_dos_vias %>%
  gather(key = "tiempo", value = "score", aceite_I, aceite_II, aceite_III) %>%
  convert_as_factor(ID, tiempo)

set.seed(123)
data_dos_vias %>% sample_n_by(Extracción, tiempo, size = 1)  
## # A tibble: 6 × 4
##   Extracción ID    tiempo     score
##   <chr>      <fct> <fct>      <dbl>
## 1 CO2        91    aceite_I    2.87
## 2 CO2        75    aceite_II   2.35
## 3 CO2        111   aceite_III  1.97
## 4 vapor      14    aceite_I    2.86
## 5 vapor      3     aceite_II   2.08
## 6 vapor      42    aceite_III  2.09

En este ejemplo, el efecto del “tiempo” es la variable focal, ya que se cree que el efecto sera diferente si se realiza la extracción en CO2 o en Vapor

data_dos_vias %>%
  group_by(Extracción, tiempo) %>%
  get_summary_stats(score, type = "mean_sd")
## # A tibble: 6 × 6
##   Extracción tiempo     variable     n  mean    sd
##   <chr>      <fct>      <fct>    <dbl> <dbl> <dbl>
## 1 CO2        aceite_I   score       60  2.77 0.103
## 2 CO2        aceite_II  score       60  2.19 0.13 
## 3 CO2        aceite_III score       60  1.94 0.068
## 4 vapor      aceite_I   score       60  2.83 0.077
## 5 vapor      aceite_II  score       60  2.21 0.11 
## 6 vapor      aceite_III score       60  2.06 0.074
#Visualización gráfica 
bxp=ggboxplot(data_dos_vias, x = "tiempo", y = "score",
  color = "Extracción", palette = "jco")
bxp

El analisis presentado comprara los valores de s de dos metodos de extraccion “CO2” y “Vapor” aplicados a tres tipos de aceites, la tabla de medias y desviaciones estandar indica que en general el aceite I tiene los valores de score mas altos en ambos metodos de extraccion, mientras que el aceite III presenta los valores mas bajos, ademas se observa que la extracción de Vapor tiende a generar mas valores ligeramente superiores, en comparacion por la extraccion CO2 para todos los aceites. Confirmando estos resultados con la gráfica anterior

SUPUESTOS DE CHECK

  • Valores Atípicos
data_dos_vias %>%
  group_by(Extracción, tiempo) %>%
  identify_outliers(score)
## # A tibble: 9 × 6
##   Extracción tiempo     ID    score is.outlier is.extreme
##   <chr>      <fct>      <fct> <dbl> <lgl>      <lgl>     
## 1 CO2        aceite_II  61     1.90 TRUE       FALSE     
## 2 CO2        aceite_II  63     1.89 TRUE       FALSE     
## 3 CO2        aceite_III 68     1.75 TRUE       FALSE     
## 4 CO2        aceite_III 114    2.12 TRUE       FALSE     
## 5 vapor      aceite_I   22     3.05 TRUE       FALSE     
## 6 vapor      aceite_II  54     2.54 TRUE       FALSE     
## 7 vapor      aceite_III 9      1.88 TRUE       FALSE     
## 8 vapor      aceite_III 11     1.82 TRUE       FALSE     
## 9 vapor      aceite_III 16     2.28 TRUE       FALSE

Según la tabla anterior se puede evidenciar que aunque hay datos atípicos estos no son extremos

  • Supuesto de Normalidad
data_dos_vias %>%
  group_by(Extracción, tiempo) %>%
  shapiro_test(score)
## # A tibble: 6 × 5
##   Extracción tiempo     variable statistic       p
##   <chr>      <fct>      <chr>        <dbl>   <dbl>
## 1 CO2        aceite_I   score        0.966 0.0930 
## 2 CO2        aceite_II  score        0.979 0.383  
## 3 CO2        aceite_III score        0.957 0.0330 
## 4 vapor      aceite_I   score        0.976 0.284  
## 5 vapor      aceite_II  score        0.977 0.324  
## 6 vapor      aceite_III score        0.945 0.00887

Este análisis se evaluo mediante la prueba de Shapiro- Wilk y se visualizo con gráficos para tener una mejor claridad al respecto. Los valores de p indican que en la mayoria de los casos, se acepta la hipotesis nula de normalidad (p > 0,05), excepto en el caso del aceite III extraido tanto por CO2 como por Vapor, lo que sugiere que la distribución de los datos en estos casos podria no ajustarse completamente a una distribución normal.

Visualización gráfica

ggqqplot(data_dos_vias, "score", ggtheme = theme_bw()) +
  facet_grid(tiempo ~ Extracción, labeller = "label_both")

A partir del gráfico anterior, como todos los puntos caen aproximadamente a lo largo de la línea de referencia, podemos suponer normalidad incluso en los casos que se afirmaban que no podian ajustarse a una distribución normal.

  • Supuesto de Esfericidad
res.aov2= anova_test(data = data_dos_vias, dv = score, wid = ID, within = tiempo)
summary(res.aov2)
##                               Length Class      Mode
## ANOVA                         7      data.frame list
## Mauchly's Test for Sphericity 4      data.frame list
## Sphericity Corrections        9      data.frame list
res.aov2$`Mauchly's Test for Sphericity`
##   Effect     W     p p<.05
## 1 tiempo 0.916 0.006     *
res.aov2$`Sphericity Corrections`
##   Effect   GGe       DF[GG]     p[GG] p[GG]<.05   HFe       DF[HF]     p[HF]
## 1 tiempo 0.922 1.84, 219.53 1.47e-146         * 0.936 1.87, 222.83 1.03e-148
##   p[HF]<.05
## 1         *
get_anova_table(res.aov2, correction="GG")#Greenhouse-Geissser
## ANOVA Table (type III tests)
## 
##   Effect  DFn    DFd        F         p p<.05   ges
## 1 tiempo 1.84 219.53 2407.499 1.47e-146     * 0.914

En este caso el valor p fue < 0.05, indicando que la esfericidad no se cumple. Por lo cual, se deben aplicar correciones (greenhouse-Geissser o Huynh-Feldt) para ajustar los grados de libertad y evitar errores en la inferencia estadística. Ádemas la estimación ges indica un efecto muy grande del factor tiempo sobre la variable respuesta.

Efectos

res.aov2=  anova_test(data = data_dos_vias, dv = score, wid = ID,
  within = "tiempo", between = "Extracción")

get_anova_table(res.aov2)
## ANOVA Table (type II tests)
## 
##              Effect  DFn    DFd        F         p p<.05   ges
## 1        Extracción 1.00 118.00   37.932  1.05e-08     * 0.120
## 2            tiempo 1.85 218.64 2582.532 1.60e-149     * 0.926
## 3 Extracción:tiempo 1.85 218.64    9.652  1.50e-04     * 0.045
# Visualización gráfica

ggplot(data_dos_vias, aes(x = tiempo, y = score, color = Extracción, group = Extracción)) +
  stat_summary(fun = mean, geom = "line") +
  stat_summary(fun = mean, geom = "point") +
  labs(title = "Interacción entre Tiempo y Método de Extracción")

Se observa que tanto el factor extracción como el factor tiempo tienen efectos significativos en la variable respuesta. Además la interacción entre extracción y tiempo también es significativa lo que indica que la relación entre el tiempo y el score depende del método de extracción utilizado. Apreciando estos resultados mediante la gráfica de interacción donde el score disminuye con el tiempo en ambos métodos de extracción.

PRUEBA POST-HOC

Interacción Bidireccional Significativa
  • Efecto de la extracción por cada momento temporal
one.way = data_dos_vias %>%
  group_by(tiempo) %>%
  anova_test(dv = score, wid = ID, between = "Extracción") %>%
  get_anova_table() %>%
  adjust_pvalue(method = "bonferroni")
one.way
## # A tibble: 3 × 9
##   tiempo     Effect       DFn   DFd     F        p `p<.05`   ges    p.adj
##   <fct>      <chr>      <dbl> <dbl> <dbl>    <dbl> <chr>   <dbl>    <dbl>
## 1 aceite_I   Extracción     1   118 12.6  5.52e- 4 "*"     0.097 1.66e- 3
## 2 aceite_II  Extracción     1   118  1.46 2.29e- 1 ""      0.012 6.87e- 1
## 3 aceite_III Extracción     1   118 93.9  1.08e-16 "*"     0.443 3.24e-16
  • Comparaciones por pares entre grupos de extracción
pwc <- data_dos_vias %>%
  group_by(tiempo) %>%
  pairwise_t_test(
    score ~ Extracción, paired = TRUE,
    p.adjust.method = "bonferroni")
pwc
## # A tibble: 3 × 11
##   tiempo     .y.   group1 group2    n1    n2 statistic    df        p    p.adj
## * <fct>      <chr> <chr>  <chr>  <int> <int>     <dbl> <dbl>    <dbl>    <dbl>
## 1 aceite_I   score CO2    vapor     60    60     -3.57    59 7.13e- 4 7.13e- 4
## 2 aceite_II  score CO2    vapor     60    60     -1.24    59 2.22e- 1 2.22e- 1
## 3 aceite_III score CO2    vapor     60    60    -10.7     59 1.76e-15 1.76e-15
## # ℹ 1 more variable: p.adj.signif <chr>

Considerando el valor p ajustado de Bonferroni (p.adj), se puede observar que el efecto principal simple de la extracción no fue significativo en el caso del tiempo aceite II (p = 0,687 ) débido a que no hay suficiente evidencia estadistíca para rechazar la hipotesis nula. Se vuelve significativo en el aceite I (p = 0,00166) y aceite III (p = 0,000000000000000324), por lo que se puede concluir que la extracción tiene un impacto real sobre la variable score en ese tiempo.

  • Resumen Estadístico ANOVA de Dos Vias
pwc = pwc %>% add_xy_position(x = "tiempo")
bxp + stat_pvalue_manual(pwc, tip.length = 0, hide.ns = TRUE) + labs(
  subtitle = get_test_label(res.aov, detailed = TRUE),
    caption = get_pwc_label(pwc))

El análisis de ANOVA revela que la extracción tiene un efecto altamente significativo (p < 0.0001) sobre el score, ádemas cuenta con una variabilidad de n²g = 91 %. Los resultados muestran que el método de extracción con vapor genera valores de score mayores en comparación con CO2 en los tiempos aceite I y aceite III.

DISEÑO EN MEDIDAS REPETIDAS EN TRES VÍAS - FACTOR INTRA-SUJETOS Tiempo (Aceite I, Aceite II, Aceite III) Y FACTOR ENTRE-SUJETOS F1: Método de Extracción (Vapor, CO2) Y F2: Variedad (Antioquia, Cundinamarca) FACTORIAL MIXTO

En este diseño se quiere saber si existe una interacción significativa entre la extracción, la variedad y el tiempo en la cantidad de aceite esencial recolectado.

set.seed(123)

data_tres_vias=read_excel("aceite.xlsx", 
                         sheet = "tres_vias")
data_tres_vias$ID=1:nrow(data_tres_vias)
head(data_tres_vias)
## # A tibble: 6 × 6
##   aceite_I aceite_II aceite_III Extracción Variedad        ID
##      <dbl>     <dbl>      <dbl> <chr>      <chr>        <int>
## 1     3.05      2.41       2.01 vapor      Cundinamarca     1
## 2     2.97      2.02       2.03 vapor      Cundinamarca     2
## 3     2.96      2.08       2.11 vapor      Cundinamarca     3
## 4     2.96      2.01       2.08 vapor      Cundinamarca     4
## 5     2.95      2.24       2.11 vapor      Cundinamarca     5
## 6     2.95      2.22       1.92 vapor      Cundinamarca     6
data_tres_vias = data_tres_vias %>%
  gather(key = "tiempo", value = "score", aceite_I, aceite_II, aceite_III) %>%
  convert_as_factor(ID, tiempo)

set.seed(123)
data_tres_vias %>% sample_n_by(Extracción, Variedad, tiempo, size = 1)
## # A tibble: 12 × 5
##    Extracción Variedad     ID    tiempo     score
##    <chr>      <chr>        <fct> <fct>      <dbl>
##  1 CO2        Antioquia    105   aceite_I    2.67
##  2 CO2        Antioquia    109   aceite_II   2.15
##  3 CO2        Antioquia    104   aceite_III  1.96
##  4 CO2        Cundinamarca 33    aceite_I    2.82
##  5 CO2        Cundinamarca 40    aceite_II   2.09
##  6 CO2        Cundinamarca 48    aceite_III  1.86
##  7 vapor      Antioquia    82    aceite_I    2.81
##  8 vapor      Antioquia    71    aceite_II   2.46
##  9 vapor      Antioquia    65    aceite_III  2.02
## 10 vapor      Cundinamarca 20    aceite_I    2.86
## 11 vapor      Cundinamarca 14    aceite_II   2.23
## 12 vapor      Cundinamarca 22    aceite_III  2.12
data_tres_vias %>%
  group_by(Extracción, Variedad, tiempo) %>%
  get_summary_stats(score, type = "mean_sd")
## # A tibble: 12 × 7
##    Extracción Variedad     tiempo     variable     n  mean    sd
##    <chr>      <chr>        <fct>      <fct>    <dbl> <dbl> <dbl>
##  1 CO2        Antioquia    aceite_I   score       30  2.69 0.053
##  2 CO2        Antioquia    aceite_II  score       30  2.19 0.1  
##  3 CO2        Antioquia    aceite_III score       30  1.96 0.063
##  4 CO2        Cundinamarca aceite_I   score       30  2.77 0.041
##  5 CO2        Cundinamarca aceite_II  score       30  2.07 0.139
##  6 CO2        Cundinamarca aceite_III score       30  1.91 0.064
##  7 vapor      Antioquia    aceite_I   score       30  2.85 0.068
##  8 vapor      Antioquia    aceite_II  score       30  2.50 0.127
##  9 vapor      Antioquia    aceite_III score       30  2.09 0.058
## 10 vapor      Cundinamarca aceite_I   score       30  2.89 0.054
## 11 vapor      Cundinamarca aceite_II  score       30  2.22 0.116
## 12 vapor      Cundinamarca aceite_III score       30  2.04 0.082
# Visualización gráfica

bxp = ggboxplot(
 data_tres_vias, x = "tiempo", y = "score",
  color = "Extracción", palette = "jco",
  facet.by = "Variedad", short.panel.labs = FALSE)
bxp

En ambas variedades, se observa que la extracción con vapor tiende a generar valores de score mayores en comparación con CO2 en todos los tiempos. Sin embargo, el score disminuye progresivamente a lo largo del tiempo para ambos métodos. Además, los valores de score iniciales en Cundinamarca son ligeramente mayores que en Antioquia, lo que podría indicar una diferencia de calidad entre variedades desde el inicio del proceso.

data_tres_vias %>%
  group_by(Variedad,Extracción, tiempo) %>%
  identify_outliers(score)
## # A tibble: 18 × 7
##    Extracción Variedad     tiempo     ID    score is.outlier is.extreme
##    <chr>      <chr>        <fct>      <fct> <dbl> <lgl>      <lgl>     
##  1 CO2        Antioquia    aceite_II  91     2.35 TRUE       FALSE     
##  2 CO2        Antioquia    aceite_II  103    2.37 TRUE       FALSE     
##  3 CO2        Antioquia    aceite_II  114    2.40 TRUE       FALSE     
##  4 CO2        Antioquia    aceite_II  117    2.44 TRUE       FALSE     
##  5 CO2        Antioquia    aceite_III 91     1.88 TRUE       FALSE     
##  6 CO2        Antioquia    aceite_III 107    1.85 TRUE       FALSE     
##  7 CO2        Antioquia    aceite_III 108    1.82 TRUE       TRUE      
##  8 CO2        Antioquia    aceite_III 114    2.12 TRUE       TRUE      
##  9 CO2        Antioquia    aceite_III 116    2.07 TRUE       FALSE     
## 10 CO2        Antioquia    aceite_III 117    2.09 TRUE       FALSE     
## 11 vapor      Antioquia    aceite_I   61     2.64 TRUE       FALSE     
## 12 vapor      Antioquia    aceite_II  83     2.84 TRUE       FALSE     
## 13 CO2        Cundinamarca aceite_II  58     2.44 TRUE       FALSE     
## 14 vapor      Cundinamarca aceite_I   1      3.05 TRUE       FALSE     
## 15 vapor      Cundinamarca aceite_III 6      1.92 TRUE       FALSE     
## 16 vapor      Cundinamarca aceite_III 9      1.88 TRUE       FALSE     
## 17 vapor      Cundinamarca aceite_III 11     1.82 TRUE       FALSE     
## 18 vapor      Cundinamarca aceite_III 16     2.28 TRUE       TRUE

Como se puede apreciar en la tabla, en el aceite III de la variedad Antioquia existen valores atípicos extremos, indicando que se encuentran muy alejados del resto de las observaciones y podrian representar mediciones inusuales.

data_tres_vias%>%
  group_by(Variedad, Extracción, tiempo) %>%
  shapiro_test(score)
## # A tibble: 12 × 6
##    Extracción Variedad     tiempo     variable statistic       p
##    <chr>      <chr>        <fct>      <chr>        <dbl>   <dbl>
##  1 CO2        Antioquia    aceite_I   score        0.938 0.0827 
##  2 CO2        Antioquia    aceite_II  score        0.921 0.0292 
##  3 CO2        Antioquia    aceite_III score        0.943 0.108  
##  4 vapor      Antioquia    aceite_I   score        0.943 0.110  
##  5 vapor      Antioquia    aceite_II  score        0.957 0.266  
##  6 vapor      Antioquia    aceite_III score        0.936 0.0719 
##  7 CO2        Cundinamarca aceite_I   score        0.936 0.0707 
##  8 CO2        Cundinamarca aceite_II  score        0.956 0.250  
##  9 CO2        Cundinamarca aceite_III score        0.930 0.0500 
## 10 vapor      Cundinamarca aceite_I   score        0.864 0.00126
## 11 vapor      Cundinamarca aceite_II  score        0.972 0.605  
## 12 vapor      Cundinamarca aceite_III score        0.916 0.0207

Este análisis se evalúo mediante la prueba de Shapiro- Wilk y se visualizó con gráficos para tener una mejor claridad al respecto. Los valores de p indican que en la mayoria de los casos, se acepta la hipotesis nula de normalidad (p > 0,05), excepto en algunos casos que sugiere que la distribución de los datos en estos podria no ajustarse completamente a una distribución normal.

Visualización gráfica

ggqqplot(data_tres_vias, "score", ggtheme = theme_bw()) + facet_grid(Extracción + Variedad ~ tiempo, labeller = "label_both")

A partir del gráfico anterior, como todos los puntos caen aproximadamente a lo largo de la línea de referencia, podemos suponer normalidad incluso en los casos que se afirmaban que no podian ajustarse a una distribución normal.

  • Supuesto de Esfericidad
res.aov2= anova_test(data = data_tres_vias, dv = score, wid = ID, within = tiempo)
summary(res.aov2)
##                               Length Class      Mode
## ANOVA                         7      data.frame list
## Mauchly's Test for Sphericity 4      data.frame list
## Sphericity Corrections        9      data.frame list
res.aov2$`Mauchly's Test for Sphericity`
##   Effect     W        p p<.05
## 1 tiempo 0.589 2.73e-14     *
res.aov2$`Sphericity Corrections`
##   Effect   GGe       DF[GG]    p[GG] p[GG]<.05   HFe       DF[HF]    p[HF]
## 1 tiempo 0.709 1.42, 168.67 1.53e-97         * 0.715 1.43, 170.12 2.37e-98
##   p[HF]<.05
## 1         *
get_anova_table(res.aov2, correction="GG")#Greenhouse-Geissser
## ANOVA Table (type III tests)
## 
##   Effect  DFn    DFd        F        p p<.05   ges
## 1 tiempo 1.42 168.67 1524.149 1.53e-97     * 0.852

En este caso el valor p fue < 0.05, indicando que la esfericidad no se cumple. Por lo cual, se deben aplicar correciones (greenhouse-Geissser o Huynh-Feldt) para ajustar los grados de libertad y evitar errores en la inferencia estadística. Ádemas la estimación ges indica un efecto muy grande del factor tiempo sobre la variable respuesta.

  • Efectos
res.aov3 = anova_test(data = data_tres_vias, dv = score, wid = ID,
  within =tiempo, between=c(Extracción, Variedad))

get_anova_table(res.aov3)
## ANOVA Table (type II tests)
## 
##                       Effect  DFn    DFd        F         p p<.05   ges
## 1                 Extracción 1.00 116.00  341.263  2.40e-36     * 0.490
## 2                   Variedad 1.00 116.00   53.704  3.37e-11     * 0.131
## 3                     tiempo 1.63 189.18 2661.265 1.34e-131     * 0.939
## 4        Extracción:Variedad 1.00 116.00   13.958  2.92e-04     * 0.038
## 5          Extracción:tiempo 1.63 189.18   12.746  2.96e-05     * 0.069
## 6            Variedad:tiempo 1.63 189.18   71.232  9.64e-21     * 0.293
## 7 Extracción:Variedad:tiempo 1.63 189.18    7.804  1.00e-03     * 0.043
# Gráfico combinado: Tiempo y Variedad
ggplot(data_tres_vias, aes(x = tiempo, y = score, 
                          color = Variedad, group = Variedad)) +
  stat_summary(fun = mean, geom = "line") +
  stat_summary(fun = mean, geom = "point") +
  labs(title = "Interacción entre Tiempo y Variedad")  +
  theme_minimal() +
  theme(
    plot.title = element_text(hjust = 0.5, size = 16, face = "bold"),
    axis.title = element_text(size = 14),
    axis.text = element_text(size = 12),
    strip.text = element_text(size = 12, face = "bold")  )

# Gráfico combinado: Tiempo y Extracción 
ggplot(data_tres_vias, aes(x = tiempo, y = score, 
                           color = Extracción, group = Extracción)) +
  stat_summary(fun = mean, geom = "line") +
  stat_summary(fun = mean, geom = "point") +
  labs(title = "Interacción entre Tiempo y Método de Extracción")  +
  theme_minimal() +
  theme(
    plot.title = element_text(hjust = 0.5, size = 16, face = "bold"),
    axis.title = element_text(size = 14),
    axis.text = element_text(size = 12),
    strip.text = element_text(size = 12, face = "bold")  )

# Gráfico combinado: Extracción y Variedad
ggplot(data_tres_vias, aes(x = Extracción, y = score, 
                           color = Variedad, group = Variedad)) +
  stat_summary(fun = mean, geom = "line") +
  stat_summary(fun = mean, geom = "point") +
  labs(title = "Interacción entre Variedad y Método de Extracción") +
  theme_minimal() +
  theme(
    plot.title = element_text(hjust = 0.5, size = 16, face = "bold"),
    axis.title = element_text(size = 14),
    axis.text = element_text(size = 12),
    strip.text = element_text(size = 12, face = "bold")  )

# Gráfico combinado: Tiempo, Extracción y Variedad
ggplot(data_tres_vias, aes(x = tiempo, y = score, 
                           color = Extracción, group = Extracción)) +
  stat_summary(fun = mean, geom = "line", size = 1) +  
  stat_summary(fun = mean, geom = "point", size = 3) + 
  facet_wrap(~ Variedad) +  
  labs(
    title = "Interacción entre Tiempo, Extracción y Variedad",
    x = "Tiempo",
    y = "Score",
    color = "Extracción"
  ) +
  theme_minimal() +
  theme(
    plot.title = element_text(hjust = 0.5, size = 16, face = "bold"),
    axis.title = element_text(size = 14),
    axis.text = element_text(size = 12),
    strip.text = element_text(size = 12, face = "bold")  )
## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
## ℹ Please use `linewidth` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.

A partir de los resultados anteriores, se puede ver que hay una interacción tridireccional estadísticamente significativa entre la dieta, los ejercicios y el tiempo, p = 0,001, indicando que estas variables influyen de manera notoria en la variable respuesta; no obstante los demás efectos tambien son significativos pues tienen un valor de (p < 0.05).

Pruebas Post-hoc

  • Interacción bidireccional simple
two.way = data_tres_vias %>%
  group_by(Extracción) %>%
  anova_test(dv = score, wid = ID, within = tiempo, between= Variedad)
two.way
## # A tibble: 2 × 2
##   Extracción anova         
## * <chr>      <list>        
## 1 CO2        <anov_tst [3]>
## 2 vapor      <anov_tst [3]>
get_anova_table(two.way)
## # A tibble: 6 × 8
##   Extracción Effect            DFn   DFd       F        p `p<.05`   ges
##   <chr>      <chr>           <dbl> <dbl>   <dbl>    <dbl> <chr>   <dbl>
## 1 CO2        Variedad         1     58      7.02 1   e- 2 *       0.037
## 2 CO2        tiempo           1.52  88.3 1420.   2.67e-63 *       0.943
## 3 CO2        Variedad:tiempo  1.52  88.3   22.8  1.99e- 7 *       0.211
## 4 vapor      Variedad         1     58     56.6  3.83e-10 *       0.245
## 5 vapor      tiempo           1.72  99.7 1262.   1.15e-68 *       0.936
## 6 vapor      Variedad:tiempo  1.72  99.7   54.7  2.35e-15 *       0.386

El análisis de varianza (ANOVA) de dos vías para cada método de extracción mostró efectos significativos tanto del tiempo como de la variedad en el score del aceite. En el método de extracción con CO₂, la variedad presentó un efecto significativo (p = 0.01), mientras que en el método de extracción con vapor, este efecto fue aún más pronunciado (p = 3.83e-10). Asimismo, el tiempo de extracción influyó de manera contundente en ambos métodos, con valores de p extremadamente bajos (p < 0.0001), indicando que la duración de la extracción impacta significativamente en la calidad del aceite. La interacción entre la variedad y el tiempo también resultó significativa en ambos métodos, lo que sugiere que el efecto del tiempo varía dependiendo de la variedad utilizada.

Calcular efecto principal simple simple

  • Efecto de tiempo para Extracción por Variedad
tiempo.efecto =data_tres_vias %>%
  group_by(Extracción, Variedad) %>%
  anova_test(dv = score, wid = ID, within = tiempo)

tiempo.efecto
## # A tibble: 4 × 3
##   Extracción Variedad     anova         
## * <chr>      <chr>        <list>        
## 1 CO2        Antioquia    <anov_tst [3]>
## 2 CO2        Cundinamarca <anov_tst [3]>
## 3 vapor      Antioquia    <anov_tst [3]>
## 4 vapor      Cundinamarca <anov_tst [3]>
#Tabla ANOVA
get_anova_table(tiempo.efecto) %>%
  filter(Extracción == c("vapor","CO2"))
## # A tibble: 2 × 9
##   Extracción Variedad     Effect   DFn   DFd     F        p `p<.05`   ges
##   <chr>      <chr>        <chr>  <dbl> <dbl> <dbl>    <dbl> <chr>   <dbl>
## 1 CO2        Cundinamarca tiempo  1.26  36.6  691. 6.64e-27 *       0.945
## 2 vapor      Antioquia    tiempo  1.57  45.4  580. 4.24e-31 *       0.927

Al analizar el efecto del tiempo dentro de cada combinación de extracción y variedad, se observó que en la variedad Cundinamarca con extracción por CO₂, el tiempo tuvo un impacto altamente significativo (p = 6.64e-27). De manera similar, en la variedad Antioquia con extracción por vapor, el tiempo también tuvo un efecto estadísticamente relevante (p = 4.24e-31). Estos resultados confirman que la duración del proceso de extracción es un factor clave en la determinación del score del aceite, independientemente de la variedad y el método de extracción utilizado

Comparaciones Simples y Sencillas

  • Comparaciones en pares
pwc = data_tres_vias%>%
  group_by(Extracción, Variedad) %>%
  pairwise_t_test(score ~ tiempo, paired = TRUE, p.adjust.method = "bonferroni") %>%
  select(-df, -statistic) # Remove details

pwc %>% filter(Extracción == c("vapor","CO2"), 
               Variedad == c("Antioquia","Cundinamarca")) %>%
  select(-p)     # remove p columns
## # A tibble: 4 × 9
##   Extracción Variedad     .y.   group1  group2    n1    n2    p.adj p.adj.signif
##   <chr>      <chr>        <chr> <chr>   <chr>  <int> <int>    <dbl> <chr>       
## 1 CO2        Cundinamarca score aceite… aceit…    30    30 1.04e-19 ****        
## 2 CO2        Cundinamarca score aceite… aceit…    30    30 8.16e- 6 ****        
## 3 vapor      Antioquia    score aceite… aceit…    30    30 3.36e-13 ****        
## 4 vapor      Antioquia    score aceite… aceit…    30    30 1.56e-16 ****

Las pruebas de comparaciones en pares con ajuste de Bonferroni evidenciaron diferencias significativas entre los distintos niveles de tiempo dentro de cada combinación de extracción y variedad. En la extracción con CO₂ para la variedad Cundinamarca, se encontraron diferencias significativas entre el score del aceite en diferentes tiempos de extracción. De manera similar, en la extracción con vapor para la variedad Antioquia, las comparaciones en pares también mostraron diferencias altamente significativas . Estos resultados sugieren que el rendimiento del aceite varía significativamente en función del tiempo de extracción y que estos cambios son distintos en cada combinación de variedad y método de extracción.

  • Resumen Estadístico ANOVA de Tres Vias
pwc = pwc %>% add_xy_position(x = "Variedad")
pwc.filtered =pwc %>% 
  filter(Extracción == "no", Variedad == "yes")
bxp + 
  stat_pvalue_manual(pwc.filtered, tip.length = 0, hide.ns = TRUE) +
  labs(
    subtitle = get_test_label(res.aov, detailed = TRUE),
    caption = get_pwc_label(pwc))

Este análisis final muestra diferencias significativas en el score del aceite según el método de extracción, la variedad y el tiempo. La extracción con vapor genera un score mayor que CO₂, especialmente en la variedad Antioquia. En CO₂, el score disminuye con el tiempo, mientras que en vapor se mantiene o aumenta. Las pruebas post-hoc confirman que estas diferencias son estadísticamente significativas, indicando que la variedad influye en la eficiencia del método de extracción.