Capítulo 4 Diferencias que presenta una variable numérica entre dos grupos

En este capítulo veremos procedimientos para contrastar si las diferencias numéricas obtenidas al comparar dos tratamientos (o dos poblaciones) son lo suficientemente grandes como para que su única causa sea atribuible al azar.

Este tipo de pruebas se suelen usar cuando se elige una muestra de individuos que han seguido cierto tratamiento (por ejemplo, un placebo), y otra muestra que ha recibido otro tratamiento (por ejemplo, un fármaco de pruebas).

Dependiendo de cómo se construyan ambas muestras, clasificamos el experimento en dos clases:

  • Muestras apareadas: Cuando en realidad no hay dos grupos de pacientes, si no que solo hay un grupo de ellos, pero de cada individuo se tienen dos medidas. Esto puede ser debido por ejemplo a que se ha medido cada uno en dos oacasiones (antes y después de un tratamiento) o se ha medido al pacientes con dos aparatos que deberían haber dado un resultado similar.

  • Muestras independientes: Este es el caso más común, en el que realmente si hay dos grupos diferentes de individuos, cada uno con una medición numérica. Se supone que los individuos de un grupo de tratamiento han sido extraídos independientemente de los del otro.

4.1 Muestras apareadas o relacionadas

Aparecen por ejemplo en los estudios de pacientes “antes y después”, es decir, cuando en un una base de datos de de pacientes tenemos dos columnas de datos numéricos, una correspondientes a los valores antes del tratamiento y otra correspondientes al valor después. En este caso también decimos que cada individuo es su propio control.

Hay otros ejemplos de estudios con apareamiento

Se deben realizar de modo apareados los estudios en que al medir una variable sospechamos de más fuentes de variabilidad además del tratamiento. Por ejemplo, si creemos que el sexo de los individuos puede influir notablemente en la variable que medimos y queremos anular el efecto tenemos varias posibilidades:

  • Hacer un estudio con todos los individuos del mismo sexo en cada muestra, y otro con todos los individuos del otro sexo. A esto se le denomina estratificar por sexos. En este caso lo que tenemos son dos estudios con muestras independientes.

  • Asociar a cada individuo del primer grupo, un individuo “que se parezca” del segundo. Por ejemplo, si pensamos que conjuntamente el sexo y la edad pueden influir en el resultado, podemos hacer que por cada individuo del primer grupo, se elija un individuo del segundo, del mismo sexo y de edad similar. A pesar de las dificultades que comporta hacer un estudio con esas características, habremos reducido la posibilidad de que las variables sexo y edad hayan influido mucho en las diferencias observadas entre tratamientos.

4.1.1 Hipótesis nula en estudios apareados

En los contrastes con muestras apareadas, la hipótesis nula es que no la distribución de los valores en una y otra medición son similares. Como en todo contraste de hipótesis, se declara que el efecto es estadísticamente significativo si la significación calculada es inferior a cierta cantidad pequeña (5% o 1% típicamente).

Los contrastes se realizan calculando las diferencias existentes entre cada observación de un grupo y la observación asociada en el segundo. Si las mencionadas diferencias tienen una distribución aproximadamente normal o bien la muestra es grande, la prueba que se suele usar es la t-student para muestras apareadas. Esta prueba funciona del siguiente modo. Si se dan las condiciones de validez (las diferencias son normales), las diferencias deberían ser aproximadamente normales de media cero. Si al calcular la media de las diferencias, el valor obtenido en la muestra no es consistente con una posible media de cero, se rechaza la hipótesis nula. Es decir, si la diferencia entre lo observado y la hipótesis nula no es atribuible al puro azar, aceptamos que hay diferencias entre los grupos.

Una prueba menos exigente es el contraste no paramétrico de Wilcoxon. Este último considera las diferencias entre cada observación y su control. Si la hipótesis nula fuese cierta, las diferencias negativas serían similares en cantidad y tamaño a las diferencias positivas. La prueba de Wilcoxon examina la discrepancia existente entre los resultados observados y la predicción de la hipótesis nula.

Ejemplo

Se estudia si mejoran unos niños su velocidad de lectura en palabras por minuto. Para ellos se les mide al inicio de un estudio, se les vuelve a medir tras una intervención. Se toma nota de la diferencia entre la velocidad final y la inicial. Puede descargar los datos del experimento en la base de datos lectura-anova.sav. La exploración de los primeros casos, ordenados de menor a mayor diferencia nos ofrece:

df=read_sav("datos/lectura-anova.sav", user_na=FALSE) %>% haven::as_factor() 
df %>% head()  %>% knitr::kable(booktabs=T)
Grupo Antes Despues Diferencia gr1 gr2
Control 10.0 19 9.3 0 0
Control 7.0 20 13.0 0 0
Técnica I 6.5 23 16.2 1 0
Técnica I 9.5 19 9.5 1 0
Control 7.5 16 8.5 0 0
Técnica II 7.5 17 9.5 0 1

Ya que los datos están ordenados de forma que los peores resultados se muestran primero, y estos han experimentado mejoría, parece que evidentemente vamos a encontrar gran diferencia en contra de la hipótesis nula. Veamos qué distribución presentan las diferencias:

ggplot(df, aes(x=Diferencia))+geom_histogram(fill="lightblue")+ geom_rug(sides = "b", aes(y = 0), position = "jitter", colour = "blue")+coord_cartesian(xlim=c(0,20))+geom_vline(xintercept = 0,lty=2,col="red")

Se ve que todos los individuos han mejorado. la evidencia contra la hipótesis nula la encontramos en esta tabla

df %>% desc1vn(vNum = "Diferencia",columnas = c("mediaet","p.intra","ic1","ic2")) %>%
  mutate(Variable="Diferencia") %>% select(Variable,everything()) %>%
  knitr::kable(booktabs=T,
                col.names=c("Variable","media±et", "p (signif.)", "ic95%(min)", "ic95%(max)"))
Variable media±et p (signif.) ic95%(min) ic95%(max)
Diferencia 12.15±0.39 <0.001* 11 13

La diferencia observada en los niños representa una mejoría de más de 12 palabras por minuto. Sea cual sea la mejoría media si se aplicase en toda la población de niños similares a estos, los datos observados están en contra de la hipótesis nula de no mejoría (p<0.001). Tenemos una confianza del 95% de que sea cual sea la mejoría media, el valor real está en algún lugar entre 11 y 13 palabras por minuto (redondeando).

En SPSS podemos realizar este calculo seleccionando el menú: “_Analizar - Comparar medias - prueba T para muestras apareadas”. Allí marcamos el par de variables Antes y Después. También podríamos haber elegido el menú”_Analizar - Comparar medias - prueba T para una muestra” y haber trabajado con la variable Dferencia. El resultado es el mismo.

4.2 Dos Muestras independientes

Sirven para tratar problemas como el de si el nivel de hierro es similar en los individuos que padecen determinada enfermedad frente a los individuos sanos. Para ello podríamos elegir una muestra de individuos enfermos y otra de sanos, y comparar si los valores de una muestra tienen tendencia a ser mayores que los de la otra.

En los contrastes con muestras independientes, la hipótesis nula es que los valores obtenidos en una y otra muestra son similares, frente a la hipótesis alternativa de que son diferentes. El valor obtenido en la significación nos permite decidir si se rechaza o no la hipótesis nula.

Hay varias maneras de realizar este tipo de contrastes:

  • Prueba t-student para dos medias: Se basa en contrastar si las medias de cada grupo son similares. Este tipo de contrastes es válido cuando se da alguna de las siguientes condiciones:

  • Las desviaciones típicas/varianzas son similares y las observaciones de cada muestra son normales.

  • Las desviaciones típicas/varianzas son similares y los tamaños muestrales son grandes.

  • Hay diferencia notable entre las varianzas de cada grupo, pero los tamaños de cada muestra son similares y además las muestras son grandes o aproximadamente normales.

  • Pruebas no paramétricas para muestras independientes: No requieren ningún tipo de suposición sobre la distribución de las muestras. Esto permite que se puedan usar con variables discretas u ordinales. Pruebas populares son las de Mann-Whitney, Wilcoxon o la prueba de Kolmogorov-Smirnov de dos muestras.

En el caso de que queramos aplicar la prueba t-student, debemos tener en cuenta que esta se ve muy afectada en caso de que las muestras no estén similarmente dispersas, y es necesario hacer una corrección. Debemos comprobar que no existan observaciones anómalas. Disponemos del contraste de Levene para la igualdad de varianzas. De hecho, SPSS lo realiza automáticamente siempre que se desea realizar la prueba t-student, y muestra los resultados para la prueba t-student, tanto en el caso de que el usuario desee admitir la igualdad de varianzas, como rechazarla. Se suele recomendar al usuario elegir un nivel de significación alto para esta prueba (hasta el 15%).

Ejemplo

Se cree que la ingesta de calcio reduce la presión sanguínea. Para contrastarlo se decidió elegir a 21 individuos de características similares para participar en un estudio. A 10 de ellos elegidos al azar, se les asignó un tratamiento consistente en un suplemento de calcio durante 3 meses y se observó la diferencia producida en la presión arterial (la que había “antes” menos la que había “después”). A los 11 individuos restantes se les suministró un placebo y se midió también la diferencia. Los datos podemos encontrarlos en la base de datos [calcio.sav]{datos/calcio.sav}, de la que exploramos las primeras líneas:

df=read_sav("datos/calcio.sav", user_na=FALSE) %>% haven::as_factor()
df %>% head()  %>% knitr::kable(booktabs=T)
Grupo Antes Despues Diferencia
Placebo 110 121 -11
Calcio 111 116 -5
Placebo 114 119 -5
Calcio 110 114 -4
Calcio 112 115 -3
Placebo 102 105 -3

solo nos interesa la variable Diferencia comprarada entre ambos grupos, pero de todas formas vamos a examinar las mediciones Antes. La razón es que al realizar un experimento, repartimos a los individuos en dos grupos, y estamos muy interesados en que los dos grupos sean muy similares en el punto de partida (medición basal):

grid.arrange(
ggplot(df,aes(x=Grupo,y=Antes))+geom_boxplot(fill="lightblue"),
ggplot(df,aes(x=Grupo,y=Diferencia))+geom_boxplot(fill="lightblue"),
ncol=2)

Se aprecia que los dos grupos eran similares al iniciarse el experimento. Sin embargo el grupo de que tomo el Placebo practicamente se quedó igual, y el que tomó Calcio experimentó una mejoría. Nos queda por saber si esta mejoría es explicable por el azar o va más allá (diferencia estadísticamente significativa entre grupos).

df %>% generaTablatTestPorGrupo("Grupo", c("Antes","Diferencia"),
                                columnas = c("n","mediaet","p.t","ci95", "p.w")) %>% 
  knitr::kable( booktabs = T, 
                col.names=c("Variable",
                        "n","media±et", 
                        "n","media±et",
                        "p (parám.)","ic95% dif.", "P (no parám).")) %>%
  add_header_above(c(" " = 1, "Placebo" = 2, "Calcio" = 2, " "=3))
Placebo
Calcio
Variable n media±et n media±et p (parám.) ic95% dif. P (no parám).
Antes 11 113.27±2.85 10 114.90±3.61 0.714 1.63[-7.58,10.83] 0.944
Diferencia 11 -0.27±1.87 10 5.00±2.91 0.129 5.27[-1.71,12.26] 0.323

A la vista de los resultados, entre el grupo Calcio y el Placebo no hay diferencias estadísticamente significativas, no solo al inicio del experimento, si no que el cambio producido en los individuos también es compatible con la hipótesis nula de que obtienen resultados similares. Las significaciones obtenidas se han realizado tanto con la prueba paramétrica de la t-student como con una prueba no paramétrica. Ambas obtienen conclusiones similares.

Podemos realizar la prueba paramétrica en SPSS en el menú: “Analizar - Comparar medias -Prueba t para muestras independientes”. En la variable Grupo hemos de indicar que comparamos los grupos 0 (Placebo), con el grupo 1 (Calcio), pues así es como se han codificado numéricamente las variables. El el campo de Variables de prueba situamos las variables Antes y Diferencia.

La prueba no paramétrica está en un diálogo análogo que obtenemos en el menú “_Analizar - Pruebas no paramétricas - Cuadros de dialogo antiguos - 2 muestras independientes”

Una representación gráfica de los intervalos de confianza muestra que ambos tienen el común el valor cero. Es decir, ninguno de ellos puede decirse que presente una mejoría significativa. ¿Podría interpretarse como que entre ellos no hay diferencia? Esto es algo que no se deduce directamente mirando a los intervalos de confianza, aunque nuestra intuición nos indique que no deben haber mucha diferencia entre ellas.

resumen=df %>% gather(Variable,Valor,-Grupo) %>% 
  group_by(Grupo,Variable) %>% 
  summarise(Media=mean(Valor),
                n=length(Valor),
               IC=sd(Valor)/sqrt(n)*qt(0.975,n-1))
ggplot(resumen %>% filter(Variable=="Diferencia"), aes(x=Grupo,y=Media)) +
  geom_errorbar(aes(ymin=Media-IC,ymax=Media+IC),width=0.2, size=1, color="navyblue")+
  geom_point( size=4, shape=21, fill="white")+ylab("Diferencia")+
  geom_hline(yintercept=0,lty=2,color="red")

¿Es lo mismo que la diferencia entre dos grupos sea significativa que el que sus respectivos intervalos de confianza para la media no se toquen?

Parecería que es lo mismo, pero no es así. La realidad es que si hay diferencia significativa entre la media de dos grupos, entonces los intervalos de confianza se tocan nada o muy poco. Vamos a ilustrarlo retomando la base de datos 2poblaciones-Mismotrabajo-DiferenteNutricion.sav.

Vamos a usar tanto las pruebas t-student como las no paramétricas para estudiar las diferencias entre los individuos de Málaga y Tanger en todas las variables numéricas.

Normalmente en una publicación científica pondríamos como tabla de resultados algo similar a esto:

vNumericas=names(df) %>% setdiff("Grupo")
df %>% generaTablatTestPorGrupo("Grupo", vNumericas,
                                columnas = c("n","mediaet","p.t","ci95","p.w")) %>% 
  knitr::kable( booktabs = T, 
                col.names=c("Variable",
                        "n","media±et", 
                        "n","media±et",
                        "p dif.","IC95% dif.", "p")) %>%
  add_header_above(c(" " = 1, "Tanger" = 2, "Málaga" = 2,"t-test"=2, "No normal"=1)) %>%
  kable_styling(font_size=12)
Tanger
Málaga
t-test
No normal
Variable n media±et n media±et p dif. IC95% dif. p
Colesterol 30 162.67±8.32 50 209.12±6.06 <0.001* 46.45[26.15,66.76] <0.001*
Trigliceridos 30 82.13±8.39 50 113.22±9.98 0.018* 31.09[5.45,56.72] 0.018*
Glucemia 30 78.03±2.09 50 88.18±2.72 0.004* 10.15[3.40,16.89] <0.001*
PAS 30 119.83±1.86 50 121.70±1.83 0.472 1.87[-3.28,7.01] 0.596
PAD 30 72.50±1.80 50 70.30±1.37 0.329 -2.20[-6.67,2.27] 0.322
Peso 30 72.67±1.46 50 81.38±1.25 <0.001* 8.71[4.94,12.49] <0.001*
Talla 30 170.33±0.86 50 169.48±0.67 0.431 -0.85[-3.01,1.30] 0.611
Consumo 30 1909.17±87.23 50 3528.04±78.71 <0.001* 1618.87[1387.71,1850.04] <0.001*
Gasto 30 1894.20±34.52 50 1880.30±62.59 0.845 -13.90[-154.73,126.93] 0.972

Normalmente no mostraríamos los dos tipos de significación si no que haríamos la elección de usar pruebas paramétricas o no paramétricas según se den las condiciones de validez. Obsérvese que cuando las muestras no son pequeñas y las desviaciones de la normalidad no son grandes, ambos tipos de prueba suelen ofrecer significaciones similares.

Veamos para varias de estas variables como son los ic95% para las medias en cada grupo, y para las diferencias entre ambos grupos. La diferencia entre ambos grupos será significativa cuando el IC)%% para la diferencia no contiene al cero. En ese caso observaremos que los IC95% para cada grupo se tocan nada o muy poco.


dfResumen=df %>% generaTablatTestPorGrupo("Grupo", vNumericas,
                                columnas = c("ic1","ic2", "ci_min","ci_max")) 

dfResumenTidy = dfResumen %>% select(-ci_min,-ci_max) %>% gather(Clave,Valor,-Variable) %>%
  separate(Clave,c("Concepto","Grupo")) %>% spread(Concepto,Valor)


dfResumen %>% 
  knitr::kable(booktabs=T, 
                col.names=c("Variable",
                        "ic(min)","ic(max)" ,
                        "ic(min)","ic(max)",  
                         "ic.dif.(min)", "ic.dif.(max)")) %>%
  add_header_above(c(" " = 1, "Tanger" = 2, "Málaga" = 2,"Málaga-Tanger"=2))
Tanger
Málaga
Málaga-Tanger
Variable ic(min) ic(max) ic(min) ic(max) ic.dif.(min) ic.dif.(max)
Colesterol 146 180 197 221 26.1 66.8
Trigliceridos 65 99 93 133 5.4 56.7
Glucemia 74 82 83 94 3.4 16.9
PAS 116 124 118 125 -3.3 7.0
PAD 69 76 68 73 -6.7 2.3
Peso 70 76 79 84 4.9 12.5
Talla 169 172 168 171 -3.0 1.3
Consumo 1731 2088 3370 3686 1387.7 1850.0
Gasto 1824 1965 1755 2006 -154.7 126.9

Para el colesterol se ve que el IC95% para la diferencia no contiene al valor cero, es decir, tenemos evidencia estadísticamente significativa en contra de que las medias en ambos grupos sean iguales. Por otro lado, vemos que los IC95% para las medias de colesterol en ambos grupos no se cruzan. Hasta ahora todo coincide con la intuición.

laVariable="Colesterol"
grid.arrange(
ggplot(dfResumenTidy %>% filter (Variable==laVariable), aes(x=Grupo, y=(ic1+ic2)/2)) +
  geom_errorbar(aes(ymin=ic1,ymax=ic2),width=0.2, size=1, color="navyblue")+
  geom_point( size=4, shape=21, fill="white")+ylab(laVariable)+xlab(""),
ggplot(dfResumen %>% filter (Variable==laVariable), aes(x="Málaga-Tanger", y=(ci_max+ci_min)/2)) +
  geom_errorbar(aes(ymin=ci_min,ymax=ci_max),width=0.2, size=1, color="navyblue")+
  geom_point( size=4, shape=21, fill="white")+ylab(str_c("Diferencia de ", laVariable)) +
  xlab("")+geom_hline(yintercept=0,lty=2,color="red"),
ncol=2)

En cuanto a la siguiente variable, Triglicéridos y Glucemia nos encontramos la sorpresa: observamos que el IC95% para la diferencia de medias no contiene (por poco) al cero, es decir, la diferencia de medias es apenas significativamente diferente de cero, sin embargo los intervalos de confianza dentro de cada grupo se cruzan (por poco).

Estudie lo que ocurre en el resto de variables y compruebe si gráficamente es cierto lo de que:

Cuando la diferencia entre dos grupos es estadísticamente significativa, los IC95% de cada grupo se tocan nada o muy poc.o

En las publicaciones suele verse un tipo de gráfico u otro: El que muestra los intervalos de confianza en cada grupo, o el que sirve para estudiar las diferencias entre dos grupos. Existe una tercera posibilidad, usando la libreria emmeans de R, donde además de observarse los intervalos de confianza para la media en cada grupo, una flecha interior indica cuando las comparaciones entre dos grupos son significativas: Ocurre justo cuando no tienen intersección común. Este tipo de gráficos será muy útil cuando haya muchas comparaciones a realizar entre grupos (análisis posthoc de ANOVA).

listaGraficos=vNumericas %>% map( ~ lm(formula(str_c(.," ~ Grupo")),data=df) %>%
              emmeans("Grupo") %>% plot(comparisons=TRUE)+xlab(.x)+ylab("")+coord_flip())
do.call("grid.arrange", c(listaGraficos, ncol=3))