R para Ciencia de Datos de Salud

Author

Ewen Harrison y Riinu Pius / traducido por A.Carolina Ledezma-Carrizalez

Capítulo 6 Trabajar con variables de resultado continuas

Los datos continuos se pueden medir.

Los datos categóricos se pueden contar.

6.1 Datos continuos

Los datos continuos están en todas partes en el cuidado de la salud. Desde medidas fisiológicas en pacientes, como la presión arterial sistólica o las pruebas de función pulmonar, hasta medidas poblacionales como la esperanza de vida o la incidencia de enfermedades, el análisis de medidas de resultado continuas es común e importante.

Nuestro objetivo en la mayoría de las preguntas sobre datos de salud es sacar una conclusión sobre una comparación entre grupos. Por ejemplo, comprender las diferencias en la esperanza de vida entre los años 2002 y 2007 es más útil que simplemente describir la esperanza de vida promedio a lo largo del tiempo.

La base para las comparaciones entre medidas continuas es la distribución de los datos. Esa palabra, como muchas que tienen sabor estadístico, hace sudar a mucha gente. No es necesario. Por distribución, simplemente nos referimos a la forma de los datos.

6.2 La pregunta

Todos los ejemplos de este capítulo utilizan los datos presentados anteriormente del sorprendente proyecto Gapminder . Comenzaremos observando la esperanza de vida de las poblaciones a lo largo del tiempo y en diferentes regiones geográficas.

6.3 Obtener y comprobar los datos

# Cargar paquetes 
library(tidyverse) 
── Attaching packages ─────────────────────────────────────── tidyverse 1.3.2 ──
✔ ggplot2 3.4.0      ✔ purrr   0.3.4 
✔ tibble  3.1.8      ✔ dplyr   1.0.10
✔ tidyr   1.2.0      ✔ stringr 1.4.0 
✔ readr   2.1.2      ✔ forcats 0.5.1 
── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
✖ dplyr::filter() masks stats::filter()
✖ dplyr::lag()    masks stats::lag()
library(finalfit) 
library(gapminder)

# Crear un objeto gapdata a partir del objeto gapminder

gapdata <- gapminder 

Es vital que los conjuntos de datos se inspeccionen cuidadosamente cuando se lean por primera vez (para obtener ayuda para leer datos en R, consulte 2.1 ). Las tres funciones a continuación proporcionan un resumen claro, lo que permite identificar rápidamente los errores o errores de codificación. Es particularmente importante asegurarse de que se identifique cualquier dato faltante (consulte el Capítulo 11 ). ¡Si no haces esto te arrepentirás! Muchas veces, un análisis ha llegado a una etapa relativamente avanzada antes de que el investigador se diera cuenta de que el conjunto de datos estaba lejos de estar completo

glimpse(gapdata) # cada variable como línea, tipo de variable, primeros valores
Rows: 1,704
Columns: 6
$ country   <fct> "Afghanistan", "Afghanistan", "Afghanistan", "Afghanistan", …
$ continent <fct> Asia, Asia, Asia, Asia, Asia, Asia, Asia, Asia, Asia, Asia, …
$ year      <int> 1952, 1957, 1962, 1967, 1972, 1977, 1982, 1987, 1992, 1997, …
$ lifeExp   <dbl> 28.801, 30.332, 31.997, 34.020, 36.088, 38.438, 39.854, 40.8…
$ pop       <int> 8425333, 9240934, 10267083, 11537966, 13079460, 14880372, 12…
$ gdpPercap <dbl> 779.4453, 820.8530, 853.1007, 836.1971, 739.9811, 786.1134, …
missing_glimpse(gapdata) # datos faltantes para cada variable
              label var_type    n missing_n missing_percent
country     country    <fct> 1704         0             0.0
continent continent    <fct> 1704         0             0.0
year           year    <int> 1704         0             0.0
lifeExp     lifeExp    <dbl> 1704         0             0.0
pop             pop    <int> 1704         0             0.0
gdpPercap gdpPercap    <dbl> 1704         0             0.0
ff_glimpse(gapdata) # Estadísticas resumidas para cada variable
$Continuous
              label var_type    n missing_n missing_percent       mean
year           year    <int> 1704         0             0.0     1979.5
lifeExp     lifeExp    <dbl> 1704         0             0.0       59.5
pop             pop    <int> 1704         0             0.0 29601212.3
gdpPercap gdpPercap    <dbl> 1704         0             0.0     7215.3
                   sd     min quartile_25    median quartile_75          max
year             17.3  1952.0      1965.8    1979.5      1993.2       2007.0
lifeExp          12.9    23.6        48.2      60.7        70.8         82.6
pop       106157896.7 60011.0   2793664.0 7023595.5  19585221.8 1318683096.0
gdpPercap      9857.5   241.2      1202.1    3531.8      9325.5     113523.1

$Categorical
              label var_type    n missing_n missing_percent levels_n
country     country    <fct> 1704         0             0.0      142
continent continent    <fct> 1704         0             0.0        5
                                                     levels
country                                                   -
continent "Africa", "Americas", "Asia", "Europe", "Oceania"
                    levels_count               levels_percent
country                        -                            -
continent 624, 300, 396, 360, 24 36.6, 17.6, 23.2, 21.1,  1.4

Como se puede observar existen 6 variables, 4 son continuas y 2 categóricas. Las variables categóricas ya están identificadas como factors. No faltan datos. Tenga en cuenta que, de forma predeterminada, se muestra el número máximo de niveles de factores, por lo que no se imprimen 142 nombres de países. Esto se puede ajustar usandoff_glimpse(gapdata, levels_cut = 142)

6.4 Trazar los datos

Comenzaremos comparando la esperanza de vida entre los 5 continentes del mundo en dos años diferentes. Siempre trace sus datos primero. ¡Nunca te saltes este paso! Estamos particularmente interesados ​​en la distribución. Ahí está esa palabra otra vez. La forma de los datos. ¿Es normal? ¿Está sesgado? ¿Difiere entre regiones y años?

Hay tres diagramas útiles que pueden ayudar aquí:

  • Histogramas: examine la forma de los datos y compare grupos;

  • Gráficas QQ: ¿están los datos normalmente distribuidos?

  • Diagramas de caja: identifique valores atípicos, compare formas y grupos.

6.4.1 Histograma

gapdata %>% 
  filter(year %in% c(2002, 2007)) %>%
  ggplot(aes(x = lifeExp)) +       # recuerda aes()
  geom_histogram(bins = 20) +      # histograma con 20 barras
  facet_grid(year ~ continent)     # opcional: Agregar scales = "free"               

FIGURA 6.1: Histograma: Esperanza de vida por país por continente y año.

¿Qué podemos ver? Esa esperanza de vida en África es menor que en otras regiones. Que tenemos pocos datos de Oceanía dado que solo se incluyen dos países, Australia y Nueva Zelanda. Que África y Asia tienen una mayor variabilidad en la esperanza de vida por país que América o Europa. Que los datos siguen una forma razonablemente normal, con África 2002 un poco sesgada a la derecha.

6.4.2 Gráfico cuantil-cuantil (QQ)

Cuantil-cuantil suena más complicado de lo que realmente es. Es un método gráfico para comparar la distribución (piense en la forma) de nuestros propios datos con una distribución teórica, como la distribución normal. En este contexto, los cuantiles son simplemente puntos de corte que dividen nuestros datos en contenedores, cada uno de los cuales contiene el mismo número de observaciones. Por ejemplo, si tenemos la esperanza de vida de 100 países, entonces los cuartiles (nótese el cuartil) para la esperanza de vida son las tres edades que dividen las observaciones en 4 grupos, cada uno de los cuales contiene 25 países. Un gráfico QQ simplemente traza los cuantiles de nuestros datos contra los cuantiles teóricos para una distribución particular (el valor predeterminado que se muestra a continuación es la distribución normal). Si nuestros datos siguen esa distribución (por ejemplo, normal), entonces nuestros puntos de datos caen en la línea recta teórica.

gapdata %>% 
  filter(year %in% c(2002, 2007)) %>%
  ggplot(aes(sample = lifeExp)) +      # Q-Q plot requerimientos 'ejemplo'
  geom_qq() +                          # El valor predeterminado a la distribución normal
  geom_qq_line(colour = "blue") +      # Agregue la línea teórica
  facet_grid(year ~ continent)

FIGURA 6.2: Gráfico QQ: Esperanza de vida por país por continente y año.

¿Qué podemos ver? Estamos buscando para ver si los datos (puntos) siguen la línea recta que incluimos en la gráfica. Estos funcionan razonablemente, excepto África, que está curvada hacia arriba en cada extremo. Este es el sesgo a la derecha que también pudimos ver en los histogramas. Si sus datos no siguen una distribución normal, debe evitar usar una prueba t o ANOVA al comparar grupos. Las pruebas no paramétricas son una alternativa y se describen en la Sección 6.9 .

Con frecuencia nos preguntan sobre las ventajas y desventajas de comprobar la normalidad mediante una prueba estadística, como la prueba de normalidad de Shapiro-Wilk. No lo recomendamos. La prueba a menudo no es significativa cuando el número de observaciones es pequeño pero los datos parecen sesgados y, a menudo, es significativo cuando el número de observaciones es alto pero los datos parecen razonablemente normales en la inspección de las parcelas. Por lo tanto, no es útil en la práctica; debe prevalecer el sentido común.

6.4.3 Diagrama de caja

Los diagramas de caja son nuestro método preferido para comparar una variable continua, como la esperanza de vida, con una variable explicativa categórica. Para datos continuos, los diagramas de caja son mucho más apropiados que los diagramas de barras con barras de error (también conocidos como diagramas de dinamita). Intencionalmente, ni siquiera le mostramos cómo hacer tramas de dinamita.

El cuadro representa la mediana (línea horizontal en negrita en el medio) y el rango intercuartílico (donde se encuentra el 50 % de los datos). Las líneas (bigotes) se extienden hasta los valores más bajo y más alto que todavía están dentro de 1,5 veces el rango intercuartílico. Los valores atípicos (cualquier cosa fuera de los bigotes) se representan como puntos.

Por lo tanto, el hermoso diagrama de caja contiene información no solo sobre la tendencia central (mediana), sino también sobre la variación en los datos y la distribución de los datos, por ejemplo, un sesgo debería ser obvio.

gapdata %>% 
  filter(year %in% c(2002, 2007)) %>%
  ggplot(aes(x = continent, y = lifeExp)) +
  geom_boxplot() +
  facet_wrap(~ year)

FIGURA 6.3: Boxplot: Esperanza de vida por país por continente y año.

¿Qué podemos ver? La esperanza de vida media es más baja en África que en cualquier otro continente. La variación en la esperanza de vida es mayor en África y menor en Oceanía. Los datos en África parecen sesgados, particularmente en 2002: las líneas/bigotes tienen longitudes desiguales.

Podemos añadir más argumentos para ajustar la trama a nuestro gusto. Recomendamos especialmente la inclusión de los puntos de datos reales, aquí usando geom_jitter().

gapdata %>%  
  filter(year %in% c(2002, 2007)) %>%
  ggplot(aes(x = factor(year), y = lifeExp)) +
  geom_boxplot(aes(fill = continent)) +     # Agregarmos color a los gráficos de caja
  geom_jitter(alpha = 0.4) +                # alpha = transparencia
  facet_wrap(~ continent, ncol = 5) +       # extendido por el continente
  theme(legend.position = "none") +         # para eliminar la leyenda
  xlab("Year") +                            # etiqueta x-eje
  ylab("Life expectancy (years)") +         # etiqueta y-eje
  ggtitle(
    "Esperanza de vida por continente entre 2002 v 2007") # añadimos el título