#Diseño en medidas repetidas (Repeated Measures ANOVA in R) https://www.datanovia.com/en/lessons/repeated-measures-anova-in-r/

Esta vez vamos a involucrar un diseño que tenga en cuenta el tiempo (Factor intrasujetos = Tiempo). Factores entresujetos = FSCA, FSBA, FCCA, FCBA.

Diseño en medidas repetidas: (i) Una vía, (ii) Dos vías y (iii) Tres vías.

#Datos de una vía

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)
## Warning: package 'tidyr' was built under R version 4.2.3
# install.packages("datarium")
data("selfesteem", package = "datarium")

datos = selfesteem
datos = datos  %>%
  gather(key = "tiempo",
         value = "rto",
         t1, t2, t3) %>%
  mutate_at(vars(id, tiempo), as.factor)
View(datos)

Por ejempo: -Una vía Resp: Aceite(Limonaria) Tiempo 1: Corte 1 (30dds) Tiempo 2: Corte 2 (60dds) Tiempo 3: Corte 3 (90dds) Ho: Miu1 = Miu2 = Miu3

La función gather, reune todos los datos en una sola matríz –> Convertir formato ancho en formato largo

#Resumen estadístico
datos %>%
  group_by(tiempo) %>%
  summarise(media = mean(rto),
            desv = sd(rto),
            n = n(),
            cv = 100*desv/media)
## # A tibble: 3 × 5
##   tiempo media  desv     n    cv
##   <fct>  <dbl> <dbl> <int> <dbl>
## 1 t1      3.14 0.552    10  17.6
## 2 t2      4.93 0.863    10  17.5
## 3 t3      7.64 1.14     10  15.0

Coeficiente de variación > 20% significa que hay problemas en los datos –> Casi siempre asociados a datos que no son normales.

boxplot(datos$rto ~ datos$tiempo)

#Detección de outliers

library(rstatix)
## Warning: package 'rstatix' was built under R version 4.2.3
## 
## Attaching package: 'rstatix'
## The following object is masked from 'package:stats':
## 
##     filter
datos %>%
  group_by(tiempo) %>%
  identify_outliers(rto)
## # A tibble: 2 × 5
##   tiempo id      rto is.outlier is.extreme
##   <fct>  <fct> <dbl> <lgl>      <lgl>     
## 1 t1     6      2.05 TRUE       FALSE     
## 2 t2     2      6.91 TRUE       FALSE
#Supuesto de normalidad
datos %>%
  group_by(tiempo) %>%
  shapiro_test(rto)
## # A tibble: 3 × 4
##   tiempo variable statistic     p
##   <fct>  <chr>        <dbl> <dbl>
## 1 t1     rto          0.967 0.859
## 2 t2     rto          0.876 0.117
## 3 t3     rto          0.923 0.380

En t1 el id si es outlier, pero nos indica que no es extremo. No me preocupo por eliminarlos ya que el coeficiente de varición es menor al 20%.

#Supuesto de esfericidad (relacionado a igualdad de varianzas) Compara si la variabilidad en los tiempos sucesivos es similar.

Primero, corremos ANOVA

res.aov <- anova_test(data = datos,
                      dv = rto,
                      wid = id,
                      within = tiempo)

#Esfericidad
res.aov$`Mauchly's Test for Sphericity`
##   Effect     W     p p<.05
## 1 tiempo 0.551 0.092
get_anova_table(res.aov)
## ANOVA Table (type III tests)
## 
##   Effect DFn DFd      F        p p<.05   ges
## 1 tiempo   2  18 55.469 2.01e-08     * 0.829

Si las varianzas no son iguales, sólo se coloca que de acuerdo con la prueba de Maucly no son iguales y se necesitaría otra metodología.

Se rechaza hipótesis nula.

#Método Bonferroni

datos %>%
  pairwise_t_test(
    rto ~ tiempo,
    paired = TRUE,
    p.adjust.method = "bonferroni")
## # A tibble: 3 × 10
##   .y.   group1 group2    n1    n2 statistic    df           p    p.adj p.adj.s…¹
## * <chr> <chr>  <chr>  <int> <int>     <dbl> <dbl>       <dbl>    <dbl> <chr>    
## 1 rto   t1     t2        10    10     -4.97     9 0.000772    0.002    **       
## 2 rto   t1     t3        10    10    -13.2      9 0.000000334 0.000001 ****     
## 3 rto   t2     t3        10    10     -4.87     9 0.000886    0.003    **       
## # … with abbreviated variable name ¹​p.adj.signif

#Dos vías

data("selfesteem2", package = "datarium")

datos2 = selfesteem2
datos2$treatment = gl(2, 12, 24, c('con fert', 'sin fert'))
View(datos2)

datos2 = datos2 %>% 
  gather(key='tiempo', value = 'rto',
         t1,t2,t3)
datos2 %>%
  group_by(treatment, tiempo) %>%
  summarise(media = mean(rto),
            desv = sd(rto),
            n = n(),
            cv = 100*desv/media)
## `summarise()` has grouped output by 'treatment'. You can override using the
## `.groups` argument.
## # A tibble: 6 × 6
## # Groups:   treatment [2]
##   treatment tiempo media  desv     n    cv
##   <fct>     <chr>  <dbl> <dbl> <int> <dbl>
## 1 con fert  t1      88    8.08    12  9.18
## 2 con fert  t2      83.8 10.2     12 12.2 
## 3 con fert  t3      78.7 10.5     12 13.4 
## 4 sin fert  t1      87.6  7.62    12  8.70
## 5 sin fert  t2      87.8  7.42    12  8.45
## 6 sin fert  t3      87.7  8.14    12  9.28
library(ggplot2)
## Warning: package 'ggplot2' was built under R version 4.2.3
ggplot(datos2)+
  aes(tiempo, rto, fill=treatment)+
  geom_boxplot()

Datos atípicos

datos2 %>%
  group_by(treatment, tiempo) %>%
  identify_outliers(rto)
## [1] treatment  tiempo     id         rto        is.outlier is.extreme
## <0 rows> (or 0-length row.names)
datos2 %>%
  group_by(treatment, tiempo) %>%
  shapiro_test(rto)
## # A tibble: 6 × 5
##   treatment tiempo variable statistic      p
##   <fct>     <chr>  <chr>        <dbl>  <dbl>
## 1 con fert  t1     rto          0.828 0.0200
## 2 con fert  t2     rto          0.868 0.0618
## 3 con fert  t3     rto          0.887 0.107 
## 4 sin fert  t1     rto          0.919 0.279 
## 5 sin fert  t2     rto          0.923 0.316 
## 6 sin fert  t3     rto          0.886 0.104

La normalidad se le hace a los residuales, no al rendimiento.

Cuando hay interacción, no se mira para arriba. Solo se analiza la interacción.

res.aov <- anova_test(data =datos2,
                      dv = rto,
                      wid = id,
                      within = c(treatment, 
                                 tiempo)
)


get_anova_table(res.aov)
## ANOVA Table (type III tests)
## 
##             Effect  DFn   DFd      F        p p<.05   ges
## 1        treatment 1.00 11.00 15.541 2.00e-03     * 0.059
## 2           tiempo 1.31 14.37 27.369 5.03e-05     * 0.049
## 3 treatment:tiempo 2.00 22.00 30.424 4.63e-07     * 0.050

Gráfico de interacción

interaction.plot(datos2$tiempo,
                datos2$treatment,
                datos2$rto)

datos2 %>% 
  group_by(tiempo, treatment) %>% 
  summarise(mean_rto = mean(rto)) %>% 
  ggplot()+
  aes(tiempo, mean_rto,
      color=treatment,
      group=treatment)+
  geom_point(size=5)+
  geom_line(linewidth=3)
## `summarise()` has grouped output by 'tiempo'. You can override using the
## `.groups` argument.

res.aov$`Mauchly's Test for Sphericity`
##             Effect     W     p p<.05
## 1           tiempo 0.469 0.023     *
## 2 treatment:tiempo 0.616 0.089

Se evidencia la interacción, hay un cre¿uce en el tiempo 1 debido a que las medias no varian significativamente.