library(readxl)
library(DT)

Tratamiento estadístico de los datos

Al ser esta investigación con un diseño de 4 grupos, es necesario realizar comparaciones entre grupos por cada instrumento utilizado.

El meta análisis propuesto por Breaver y Braver (1988) señala que hay que seguir una secuencia de actividades para determinar si el tratamiento tiene un efecto o no sobre los grupos.

BOXPLOT

datos<-read_excel("resultados100.xls", 
           sheet = "Hoja1", range = "B1:D101")

datos%>%DT::datatable()
library(ggplot2)
library(plotly)
ggplot(datos , aes(x=Pretest, y=Scores, color=Treatment))+
  geom_boxplot()+
  ggtitle('BoxPlot of Posttest Scores')

Grupo 1

summary(datos$Scores[1:25])
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    1.50    2.25    3.25    3.03    3.75    4.00
sd(datos$Scores[1:25])
## [1] 0.8206958

grupo 2

summary(datos$Scores[26:50])
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    1.25    2.00    2.50    2.69    3.50    4.50
sd(datos$Scores[26:50])
## [1] 0.9928914

GRUPO 3

summary(datos$Scores[51:75])
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    2.00    3.00    4.00    3.85    4.50    5.00
sd(datos$Scores[51:75])
## [1] 0.8599903

GRUPO 4

summary(datos$Scores[76:100])
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    1.50    1.75    3.00    2.86    3.50    4.25
sd(datos$Scores[76:100])
## [1] 0.9467048
with(data=datos, expr=tapply(Scores, Treatment, mean))
##    With treatment Without treatment 
##             3.440             2.775
with(data=datos, expr=tapply(Scores, Treatment, sd))
##    With treatment Without treatment 
##         0.9293403         0.9639550
with(data=datos, expr=tapply(Scores, Pretest, mean))
##    With pretest Without pretest 
##           2.860           3.355
with(data=datos, expr=tapply(Scores, Treatment, sd))
##    With treatment Without treatment 
##         0.9293403         0.9639550
with(data=datos, expr=tapply(Scores, list(Treatment, Pretest), mean))
##                   With pretest Without pretest
## With treatment            3.03            3.85
## Without treatment         2.69            2.86

A partir de la representación gráfica y el calculo de las medias se puede intuir que puede existir una diferencia en el efecto de la nota dependiendo de la intervención y el pretest

##.

ggplot(data = datos, aes(x = Pretest, y = Scores, colour =Treatment  , group =Treatment )) + 
  stat_summary(fun = mean, geom = "point") +
  stat_summary(fun = mean, geom = "line") + 
  labs(y = "mean (Scores)") +
  ggtitle('Interaction Plot of Posttest Score')

ggplot(data = datos, aes(x = Treatment, y = Scores, colour =Pretest  , group =Pretest )) + 
  stat_summary(fun = mean, geom = "point") +
  stat_summary(fun = mean, geom = "line") + 
  labs(y = "mean(Scores)") +
  ggtitle('Interaction Plot of Posttest Score')

La nota es

Realizamos la estimación del modelo ANOVA de dos vías:

El modelo ANOVA de dos vías evalúa, además de los efectos de los factores sobre la variable independiente, los efectos de la interacción entre ellas. La hipótesis nula

\[H_0 : \ \ \ \ \text{No hay interacción entre los factores}.\]

Estamos ante un ANOVA de dos vías (varios factores entre sujetos).

  • De dos vías (two-way ANOVA o ANOVA de dos factores): examina la igualdad de las medias de la población para un resultado cuantitativo y dos variables categóricas o factores.

    • La variable dependiente (resultado) es cuantitativa: variable en la que deseamos comparar los grupos. En nuestro caso, la variable dependiente es Nota.

    • Factores (o variables independientes): variables categóricas que definen los grupos que deseamos comparar. En nuestro caso, test (test con dos niveles) y tratamiento (tratamiento con dos niveles).

Entre sujetos (between subjects): donde cada factor varía entre los sujetos y cada factor se mide solo una vez para un mismo sujeto. En nuestro caso, la variable edad se mide una vez en cada sujeto, y la edad varía de un sujeto a otro; y cada sujeto pertenece a un solo grupo o nivel de la variable tipoDiet.

anova <- aov(Scores ~ Pretest *Treatment, data = datos)
summary(anova)
##                   Df Sum Sq Mean Sq F value   Pr(>F)    
## Pretest            1   6.13   6.126   7.436 0.007602 ** 
## Treatment          1  11.06  11.056  13.420 0.000408 ***
## Pretest:Treatment  1   2.64   2.641   3.205 0.076547 .  
## Residuals         96  79.08   0.824                     
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Interpretación:

  • La variable Intervencion tiene un efecto significativo (0.0000431).

  • La variable Pretest es significativa ( p valor 0.021368 ).

  • Respecto a la interacción no hay evidencia estadística suficiente para rechazar la hipótesis nula (0.084758 mayor a

Al obtener un valor con significancia estádistica msyor .05, se continua con los pasos propuestos por Braver y Braver,

library(lsr)
etaSquared(anova)
##                       eta.sq eta.sq.part
## Pretest           0.06193326  0.07188804
## Treatment         0.11177812  0.12264864
## Pretest:Treatment 0.02669809  0.03231086
plot(anova, which = 1:1)

#modificar=anova$residuals
#class(modificar)
#b=as.vector(modificar)
#qqnorm(b)
#edit(b)
plot(anova, which = 2:2)

par(mfrow=c(1,2))
plot(anova,which=1:4)

library(ggplot2)
# Solution 1
qplot(sample = anova$residuals)

library(nortest)
hist(anova$residuals)

shapiro.test(anova$residuals)
## 
##  Shapiro-Wilk normality test
## 
## data:  anova$residuals
## W = 0.96607, p-value = 0.01115

Supuestos básicos del ANOVA Para un ANOVA de dos vías se debe comprobar el supuesto de independencia, el supuesto de normalidad y el supuesto de homocedasticidad. Estos supuestos se deben comprobar para el factor Pretest y para el factor Treatment. Esto es, se comprueba la normalidad para todos los niveles de cada factor, y se comprueba la homocedasticidad para ambos factores.

Comprobación de supuestos para el factor Pretest:

SUPUESTO DE NORMALIDAD: Para contrastar la normalidad usamos el test de Shapiro-Wilk, con la función shapiro.test( ).

datos
## # A tibble: 100 x 3
##    Scores Pretest      Treatment     
##     <dbl> <chr>        <chr>         
##  1   4    With pretest With treatment
##  2   2.75 With pretest With treatment
##  3   2.75 With pretest With treatment
##  4   3.5  With pretest With treatment
##  5   3.75 With pretest With treatment
##  6   3    With pretest With treatment
##  7   4    With pretest With treatment
##  8   3.75 With pretest With treatment
##  9   1.75 With pretest With treatment
## 10   3.25 With pretest With treatment
## # … with 90 more rows
shapiro.test( datos$Scores[datos$Pretest == "With pretest"] )
## 
##  Shapiro-Wilk normality test
## 
## data:  datos$Scores[datos$Pretest == "With pretest"]
## W = 0.94019, p-value = 0.01371
shapiro.test( datos$Scores[datos$Pretest == "Without pretest"] )
## 
##  Shapiro-Wilk normality test
## 
## data:  datos$Scores[datos$Pretest == "Without pretest"]
## W = 0.94974, p-value = 0.03328

SUPUESTO DE HOMOCEDASTICIDAD Para contrastarla utilizamos el test de Bartlett con bartlett.test( ), que es más robusto que otros tests cuando los datos son normales.

library(car)
## Loading required package: carData
leveneTest(y =datos$Scores, group = datos$Treatment, center = "median")
## Warning in leveneTest.default(y = datos$Scores, group = datos$Treatment, : datos
## $Treatment coerced to factor.
## Levene's Test for Homogeneity of Variance (center = "median")
##       Df F value Pr(>F)
## group  1  0.4514 0.5033
##       98
bartlett.test( Scores ~ Pretest, 
               data = datos )
## 
##  Bartlett test of homogeneity of variances
## 
## data:  Scores by Pretest
## Bartlett's K-squared = 0.59461, df = 1, p-value = 0.4406
shapiro.test( datos$Scores[datos$Treatment == "With treatment"] )
## 
##  Shapiro-Wilk normality test
## 
## data:  datos$Scores[datos$Treatment == "With treatment"]
## W = 0.96685, p-value = 0.1718
hist(datos$Scores[datos$Treatment == "With treatment"])

shapiro.test( datos$Scores[datos$Treatment == "Without treatment"] )
## 
##  Shapiro-Wilk normality test
## 
## data:  datos$Scores[datos$Treatment == "Without treatment"]
## W = 0.93394, p-value = 0.007813

SUPUESTO DE HOMOCEDASTICIDAD Para contrastarla utilizamos el test de Bartlett con bartlett.test( ), que es más robusto que otros tests cuando los datos son normales.

bartlett.test( Scores ~ Treatment, 
               data = datos )
## 
##  Bartlett test of homogeneity of variances
## 
## data:  Scores by Treatment
## Bartlett's K-squared = 0.064853, df = 1, p-value = 0.799
require(nortest)
by(data = datos,INDICES = datos$Treatment,FUN = function(x){ lillie.test(x$Scores)})
## datos$Treatment: With treatment
## 
##  Lilliefors (Kolmogorov-Smirnov) normality test
## 
## data:  x$Scores
## D = 0.15065, p-value = 0.006272
## 
## ------------------------------------------------------------ 
## datos$Treatment: Without treatment
## 
##  Lilliefors (Kolmogorov-Smirnov) normality test
## 
## data:  x$Scores
## D = 0.1293, p-value = 0.03601
require(nortest)
by(data = datos,INDICES = datos$Pretest,FUN = function(x){ lillie.test(x$Scores)})
## datos$Pretest: With pretest
## 
##  Lilliefors (Kolmogorov-Smirnov) normality test
## 
## data:  x$Scores
## D = 0.13721, p-value = 0.01959
## 
## ------------------------------------------------------------ 
## datos$Pretest: Without pretest
## 
##  Lilliefors (Kolmogorov-Smirnov) normality test
## 
## data:  x$Scores
## D = 0.12864, p-value = 0.03778
anova1 <- aov(Scores ~ Pretest +Treatment, data = datos)
summary(anova1)
##             Df Sum Sq Mean Sq F value   Pr(>F)    
## Pretest      1   6.13   6.126    7.27 0.008265 ** 
## Treatment    1  11.06  11.056   13.12 0.000467 ***
## Residuals   97  81.73   0.843                     
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
anova2 = aov(Scores ~ Pretest, data = datos)
summary(anova2)
##             Df Sum Sq Mean Sq F value Pr(>F)  
## Pretest      1   6.13   6.126    6.47 0.0125 *
## Residuals   98  92.78   0.947                 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
anova3 <- aov(Scores ~ Treatment, data = datos)
summary(anova3)
##             Df Sum Sq Mean Sq F value   Pr(>F)    
## Treatment    1  11.06  11.056   12.33 0.000675 ***
## Residuals   98  87.85   0.896                     
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
interaction.plot( datos$Pretest, # factor en el eje x
                  datos$Treatment, # factor representado en diferentes líneas
                  datos$Scores, # var. dependiente
                  
                  # editar el gráfico 
                  ylim = c( 0, 5 ), # eje y
                  col = c( "#27ae60", "#5499c7", "#e74c3c"), # color de líneas
                  lty = c( 5, 1, 12 ), # tipo de líneas
                  lwd = 3, # grosor de línea
                  ylab = "Media de la nota final final",
                  xlab = "Pretest", 
                  trace.label = "Tratamiento" )

library(lsr)
etaSquared(anova)
##                       eta.sq eta.sq.part
## Pretest           0.06193326  0.07188804
## Treatment         0.11177812  0.12264864
## Pretest:Treatment 0.02669809  0.03231086
par(mfrow = c(1,2))
plot(anova, which = 1:4)