Este material es parte de la Unidad 2 del Curso de Epidemiología - Nivel Avanzado del Instituto Nacional de Epidemiología “Dr. Juan H. Jara” - ANLIS v2024


Intervalos de confianza con R por Christian Ballejo bajo licencia CC BY-NC 4.0

Ejemplo de construcción de intervalos de confianza con R

Los difenilos policlorados (PCB) son una clase de sustancias químicas ambientales que poseen una serie de efectos nocivos para la salud, como deterioro intelectual en los niños que se exponen en el utero. Además, los PCB forman parte de los contaminantes más abundantes en la grasa del ser humano.

Tu Binh Minh de la Universidad Nacional de Vietnam y colaboradores, analizaron la concentración de PCB en la grasa de un grupo de adultos.

Los valores de PCB hallados en las personas estudiadas se encuentran almacenadas en el archivo PCB.txt y se nos pide realizar los siguientes items:

  1. Lea el archivo y explore su contenido
  2. Describa estadísticamente las mediciones.
  3. ¿Estos datos parecen tomados de una población de distribución normal?, ¿por qué?
  4. ¿Cuáles son los intervalos de confianza de 90 y 95% para la concentración promedio del difenilpoliclorado (PCB)?

Veamos como llevamos adelante estos pasos mediante el lenguaje R:

  1. Lectura y exploración inicial
library(tidyverse) # activamos paquetes
library(dlookr)

pcb <- read_csv2("PCB.txt")

Visualizamos la estructura de la tabla de datos

glimpse(pcb)
Rows: 14
Columns: 2
$ individuo     <dbl> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14
$ concentracion <dbl> 930, 2300, 2300, 1700, 720, 2500, 560, 1800, 1800, 2600,…

Tenemos una tabla con 14 observaciones (mediciones en individuos) y la variable de interés se llama concentracion (nos informan que está expresada como nanogramo de PCB/gramo de lípido)

  1. Describa estadísticamente las mediciones

Con la función describe() de dlookr podemos obtener los estadísticos de esta variable cuantitativa continua.

pcb %>%
  describe(concentracion)
described_variables n na mean sd se_mean IQR skewness kurtosis p00 p01 p05 p10 p20 p25 p30 p40 p50 p60 p70 p75 p80 p90 p95 p99 p100
concentracion 14 0 1709.29 824.81 220.44 1277.5 0.03 -0.85 520 525.2 546 608 846 1022.5 1263 1700 1750 1800 2300 2300 2380 2570 2810 3122 3200

La media (1709,29 ng/g) y la mediana (1750,0 ng/g) son cercanas. El desvío estandar es de 824,81 ng/g.

  1. A continuación debemos demostrar si los datos se aproximan a una distribución normal.

En el documento Análisis de normalidad y homocedasticidad vimos test estadísticos de R que nos permiten evaluar esta situación y gráficos que nos ayudan a determinar la normalidad.

Test de Shapiro-Wilk

shapiro.test(pcb$concentracion)

    Shapiro-Wilk normality test

data:  pcb$concentracion
W = 0.95246, p-value = 0.5996

Un p-valor mayor a 0,05 habla de un ajuste a la curva normal.

pcb %>%
  plot_normality(concentracion)

Si bien son pocos datos, los puntos se desarrollan “alrededor” a la recta de normalidad.

Con estos dos elementos podemos confirmar que la distribución se acerca a la “Normal” y que la distribución no es demasiado sesgada o tiene colas muy pesadas

Es confiable entonces hacer uso de métodos paramétricos.

  1. Calculo de IC

Estamos frente al calculo de IC de una muestra de \(n\) = 14 (menor a 30 observaciones) y que cumple con el supuesto de normalidad, por lo tanto debemos aplicar un método paramétrico basado en la distribución \(t\) de Student.

La distribución \(t\) de Student se asemeja en gran medida a la distribución normal. Tiene como parámetros la media, la varianza y además incorpora a través de los grados de libertad una modificación que permite flexibilizar las colas en función del tamaño que tenga la muestra.

En la practica, cuando trabajamos sobre inferencia de la media (para IC o para pruebas de hipótesis para comparar) y el tamaño muestral es mayor a 30 igualmente se hace con la distribución \(t\) de Student, dado que con 30 o más grados de libertad es prácticamente igual a una distribución normal.

Podríamos hacer las operaciones y cálculos individuales utilizando las funciones que R tiene sobre esta distribución (familia TDist: qt(), etc), pero la idea de este ejercicio es mostrarles la forma operativa más sencilla de llevarlo a cabo.

Función t.test()

La función t.test(), incluída en el paquete stats de R base, sirve apara ejecutar test de hipótesis de medias de una y dos poblaciones (independientes o pareadas) pero además nos calcula automáticamente el intervalo de confianza requerido, basado en la distribución \(t\) de Student.

Para este ejemplo debemos utilizar como argumentos:

t.test(x = pcb$concentracion, 
       conf.level = 0.95)

    One Sample t-test

data:  pcb$concentracion
t = 7.754, df = 13, p-value = 3.143e-06
alternative hypothesis: true mean is not equal to 0
95 percent confidence interval:
 1233.053 2185.518
sample estimates:
mean of x 
 1709.286 

En la lista de resultados devuelta debemos observar los valores que figuran debajo de “95 percent confidence interval:”. En este caso, el resultado es de una media de 1709,3 IC95%: 1233,0-2185,5 ng/g

Si cambiamos el argumento conf.level a 0.90 obtendremos el IC 90%:

t.test(x = pcb$concentracion, 
       conf.level = 0.90)

    One Sample t-test

data:  pcb$concentracion
t = 7.754, df = 13, p-value = 3.143e-06
alternative hypothesis: true mean is not equal to 0
90 percent confidence interval:
 1318.901 2099.671
sample estimates:
mean of x 
 1709.286 

Este va de 1318,9 a 2099,7 ng/g, lógicamente más estrecho que el anterior porque redujimos el intervalo de confianza.