Las pruebas de hipótesis son procedimientos estadísticos formales que nos sirven para responder a una pregunta central: las diferencias que observamos en los datos se deben a un efecto/ diferencia real o tan sólo al azar?

Nuestro punto de partida es el del escepticismo, es decir, que todo lo que observamos se debe al azar. Por ello en las pruebas de hipótesis partirmos de la hipótesis nula

Por ejemplo, si queremos saber si hay diferencias en inteligencia entre varones y mujeres, nuestro punto de partida es que al restar la prevalencia de varones (100) de la de mujeres (103), el resultado es cero. Si hubiera un diferencia estadísticamente significativa nosotros tenemos la carga de la prueba para demostrarlo. Si la hipótesis nula es que no hay diferencias, la hipótesis alternativa es que sí la hay.

Por lo general, el resultado no es exactamente 0, como en el ejemplo imaginario, donde la diferencia es de 3 (103-100= 3). La pregunta es: ¿El 3 es una diferencia estadísticamente relevante o es producto de la muestra, del error aleatorio? En otras palabras, si el vecino saca otra muestra en un estudio igual al mío: ¿también observa una diferencia a favor de las mujeres? Más aún: cuántos vecinos deben hacer su propia muestra para que yo esté seguro de que consistentemente las mujeres salen con un puntaje superior al de los varones. Esta es la carga de la prueba que tiene la hipótesis alternativa.

La clave, de nuevo, está en apoyarnos en los intervalos de confianza para ver qué captura nuestra red. Desde luego no tendremos certeza, sólo incertidumbre. Pero la estadística nos ayuda a fijar el error a 5%. Utilizando un intervalo al 95% de confianza podríamos obtener los siguientes resultados: diferencia= 3 [IC 95%: -1, 7]. Como el intervalo contempla el 0, entonces concluimos que no hay diferencia.

Las pruebas de hipótesis son un tema con larga tradición en la estadística frecuentista. De hecho, es común aproximarnos a ellas consultando tablas y revisando en un amplio catálogo de pruebas (basadas en los tipos de variables que queremos comparar). Sin embargo, quiero que utilicemos un método computacional basado en los principios del remuestreo, o bootstrap, como ya lo vimos al calcular los intervalos de confianza.

Para seguir este abordaje de las pruebas de hipótesis vamos a utilizar el paquete infer. Lo que hace es que, desde el lenguaje de tidyverse, utiliza un 4 verbos que nos ayudan a estimar varias pruebas:

Y, por supuesto, tiene otras funciones interesantes para entender mejor los resultados. Aquí las funciones completas de infer.

Vamos a verlo en acción con nuestra conocida ENCOVID y la ansiedad

library(tidyverse)
library(infer) #instalen y carguen el paquete
library(readr)
base_covid_abril2020_final <- read_csv("BD/base_covid_abril2020_final.csv")

abril <-base_covid_abril2020_final

abril1 <- abril %>% 
  select("edad", "sexo", "p5_ansiedad", "p6_ansiedad") # me quedo sólo con algunas variables

abril1 <- abril1 %>% 
  mutate(mujer = ordered(sexo, levels = c("0", "1"), labels= c("Varones", "Mujeres")))


abril1 <- abril1 %>% 
  rename(
    nervios= "p5_ansiedad",
    control= "p6_ansiedad")

abril1 <- abril1 %>% 
  mutate(gad2_total= nervios+ control)

abril1 <- abril1 %>% 
  mutate(gad2_level= if_else(gad2_total >= 3, 1, 0))

abril1 <- abril1 %>% 
  mutate(gad2_level2= ordered(gad2_level, levels=c("1", "0"), labels= c("Con síntomas", "Sin síntomas")))

prop.table(table(abril1$gad2_level2))*100
## 
## Con síntomas Sin síntomas 
##     32.65306     67.34694

Ahora vamos a explorar algunas hipótesis

hist(abril1$edad)

summary(abril1$edad)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   18.00   29.00   39.00   40.82   51.00   81.00
median(abril1$edad)
## [1] 39

Ahora con infer

mediana_edad <- abril1 %>%
  specify(response = edad) %>%
  calculate(stat = "median")

mediana_edad

Todo igual.. Pero ahora vamos a ver si es diferente a la que nos dice INEGI. Según ellos la mediana es 37. ¿Le atinamos con el 39?

Tenemos que probarlo. La hipótesis nula es que no hay diferencia entre INEGI y ENCOVID (37 = 39). La hipótesis alternativa es que sí hay diferencia (37 != 39). Como no sabemos si nos pasamos o si nos quedamos cortos, vamos por una prueba de de dos colas o two-sided. Noten cómo aquí queremos que el resultado es que no haya diferencias significativas

mediana_edad_inegi <- abril1 %>%
  specify(response = edad) %>%
  hypothesize(null = "point", med = 37) %>%
  generate(reps = 1000, type = "bootstrap") %>%
  calculate(stat = "median")

mediana_edad_inegi

Vean. Nuestros 1,000 vecinos hicieron su tarea y nos trajerons sus reportes.

mediana_edad_inegi %>%
  visualize() + 
  shade_p_value(mediana_edad,
                direction = "two-sided")

Esta gráfica ilustra esta idea. Si la verdadera mediana es 37 (Censo INEGI), ¿Qué tan probable es que obtengamos nuestra mediana de 39 (ENCOVID)?

MMM… muy pocos vecinos nos apoyan con el 39…

Ahora vamos a pedir una probabilidad exacta. ¿Sabiendo que la mediana real es 37, si yo repitiera la misma muestra mil veces (como ya hicieron los vecinos), cuál es la probabilidad exacta de obtener una mediana de 39?

p_value_edad <- mediana_edad_inegi %>%
  get_p_value(obs_stat = mediana_edad,
              direction = "two-sided")

p_value_edad

He aquí nuestro primer valor p. La probabilidad de obtener esa mediana es 0.02. La probabilidad va de 0-1; donde .9 es un evento muy probable y .1 es un evento muy improbable. Cuando tenemos .014 hablamos de algo muuuy improbable.

De hecho, si nosotros buscamos una confiabilidad del 95%, lo que aceptamos es un error de 5%. En términos de probabilidad eso es un error de .05 si nuestro valor p es inferior a ese .05, entonces rechazamos la hipótesis nula de no diferencia

En nuestro caso, el valor p de 0.02 es menor a nuestra frontera predefinida de .05. Eso significa que la mediana de edad de la ENCOVID no es igual a la mediana de edad del INEGI. En este caso nos pasamos.

Un bonus cortesía de infer:

mediana_edad_inegi %>%
  get_confidence_interval(
    level = 0.95
  )

No contiene nuestro valor de 39 que obtuvimos en la ENCOVID :(

Esta es la versión tradicional de la prueba de hipótesis:

t_test(abril1, response = edad, med = 37)

Aquí usa el estadístico t. Esto es lo que hubieran ido a buscar a las tablitas. Nos da un valor p de 0 y un intervalo que no incluye el valor del INEGI por lo que rechazamos hipótesis nula.

Ahora comparemos la ansiedad por sexo. Voy a usar el puntaje total: rango 0-6

colnames(abril1)
## [1] "edad"        "sexo"        "nervios"     "control"     "mujer"      
## [6] "gad2_total"  "gad2_level"  "gad2_level2"
table(abril1$gad2_total)
## 
##   0   1   2   3   4   5   6 
## 309 112 140  59  76  34 103

¿Son diferentes? El punto no sólo es la diferencia puntual, queremos saber si sus IC difieren

abril1 %>% 
  group_by(mujer) %>% 
  summarise(media= mean(gad2_total))

Pidamos ayuda a los vecinos…

diferencia_sexo <- abril1 %>%
  specify(gad2_total ~ mujer) %>%
  calculate(stat = "diff in means", order = c("Mujeres", "Varones"))

diferencia_sexo

Viene de aquí:

2.247357 - 1.661111
## [1] 0.586246

Ahora sí la prueba

diferencia_sexo_permute <- abril1 %>%
  specify(gad2_total ~ mujer) %>%
  hypothesize(null = "independence") %>%
  generate(reps = 1000, type = "permute") %>%
  calculate(stat = "diff in means", order = c("Mujeres", "Varones"))

diferencia_sexo_permute

Trabajaron los vecinos!

diferencia_sexo_permute %>%
  ggplot(aes(x= stat))+
  geom_histogram(binwidth = .01, fill= "sea green", color="white")+
  geom_vline(xintercept = 0.586, color= "black") +
  theme_minimal()

diferencia_sexo_permute %>%
  get_p_value(obs_stat = diferencia_sexo, direction = "two-sided")

Es bajo…

diferencia_sexo
diferencia_sexo_permute %>%
  get_confidence_interval(
    level = 0.95
  )

No lo captura….

¿Qué concluimos?