14/04/2021

Comparación de variables categóricas

Es común que se requiera comparar la distribución de una variable categórica en una muestra con la de otra muestra.

  • Comparar agentes micóticos entre inmunocompetentes e inmunocomprometidos
  • Comparar tipo de hallazgos radiológicos entre personas que reciben o no un medicamento
  • Comparar resultado del tratamiento para depresión entre personas que reciben un medicamento u otro

Estudio de caso

Ensayo clínico de favipiravir para COVID-19

Aleatorizado

Etiqueta abierta

Desenlaces secundarios del protocolo

  • Incidencia de oxigenoterapia auxiliar
  • Incidencia de admisión a UCI
  • Frecuencia de neumonía por imagen al alta
  • Mortalidad

Características basales por grupo de estudio

CE FV p
n = 99 n = 103 0.87240
Sexo femenino (%) 54.55 52.43 0.87240
Edad (años) 41 (32-48.8) 42 (33-51) 0.32210
1 n = 56 n = 62 0.99350
IMC (kg/m²) 28.9 (26.2-32.9) 29.76 (25.1-32.9) 0.99350
Diabetes (%) 14.14 15.53 0.93600
Hipertensión (%) 12.12 23.30 0.05853
Antecedente de fiebre (%) 51.02 51.46 1.00000
Tos (%) 69.39 70.87 0.93950
Disnea (%) 23.71 17.48 0.35940
Prueba de chi cuadrada para variables cualitativas / Prueba de Wilcoxon para variables cuantitativas

Características basales por grupo de estudio

CE FV p
n = 97 n = 102 0.77460
Frecuencia respiratoria (x’) 18 (16-21) 18 (17.2-20) 0.77460
SaO² (%) 94 (93-95) 94 (93-95) 0.37840
CORADS 4 (3-5) 5 (4-6) 0.02657
Leucocitos (10⁹Xl) 5.25 (4.3-6.6) 5.45 (4.2-7.3) 0.49000
Proteína C reactiva (mg/l) 5.78 (2-18) 3.62 (0.8-12.5) 0.24160
Ferritina (ng/ml) 167.05 (77.9-351.5) 170.55 (59.6-319.4) 0.75040
1 n = 78 n = 79 0.35260
Dímero-D (mg/l) 240.66 (57.5-447) 198 (10.4-373.6) 0.35260
Ferritina (ng/ml)1 167.05 (77.9-351.5) 170.55 (59.6-319.4) 0.75040
Tiempo entre síntomas e ingreso 4 (2.5-5) 4 (2.5-5) 0.84620
Prueba de chi cuadrada para variables cualitativas / Prueba de Wilcoxon para variables cuantitativas

Lectura de variables

library(openxlsx)
favi <- read.xlsx("evolucion_protocolo_favipiravir.xlsx")
dim(favi)
## [1] 189   5
head(favi)
##   grupo uso.de.oxígeno ingreso_UCI                 PATRÓN            Desenlace
## 1    CE           TRUE          SI   Patrón_para_COVID-19            Fallecido
## 2    FV          FALSE          NO Negativo_para_neumonía                 Alta
## 3    FV          FALSE          NO   Patrón_para_COVID-19                 Alta
## 4    FV          FALSE          NO Negativo_para_neumonía                 Alta
## 5    FV          FALSE          NO   Patrón_para_COVID-19                 Alta
## 6    CE          FALSE        <NA>                   <NA> Abandona-Tratamiento

Distribución de variables

usoO2 <- table(favi$uso.de.oxígeno, favi$grupo)
usoO2
##        
##         CE FV
##   FALSE 91 87
##   TRUE   1 10
usoO2 <- table(favi$uso.de.oxígeno, favi$grupo, dnn = c("O2 suplementario", "Tratamiento"))
usoO2
##                 Tratamiento
## O2 suplementario CE FV
##            FALSE 91 87
##            TRUE   1 10

Márgenes de la distribución de variables

addmargins(table(favi$uso.de.oxígeno, favi$grupo))
##        
##          CE  FV Sum
##   FALSE  91  87 178
##   TRUE    1  10  11
##   Sum    92  97 189
usoO2 <- addmargins(table(favi$uso.de.oxígeno, favi$grupo, dnn = c("O2 suplementario", "Tratamiento")))
usoO2
##                 Tratamiento
## O2 suplementario  CE  FV Sum
##            FALSE  91  87 178
##            TRUE    1  10  11
##            Sum    92  97 189

Hipótesis nula de la prueba de \(\chi^2\)

Los valores de las casillas se distribuyen de acuerdo a los valores marginales

marO2 <- usoO2
marO2[1:2,1:2] <- "-"
usoO2; marO2
##                 Tratamiento
## O2 suplementario  CE  FV Sum
##            FALSE  91  87 178
##            TRUE    1  10  11
##            Sum    92  97 189
##                 Tratamiento
## O2 suplementario CE FV Sum
##            FALSE -  -  178
##            TRUE  -  -  11 
##            Sum   92 97 189

Cálculo de valores esperados

valor casilla = total de la fila / gran total * total de la columna

##                 Tratamiento
## O2 suplementario CE FV Sum
##            FALSE -  -  178
##            TRUE  -  -  11 
##            Sum   92 97 189

Casilla 1,1 (sin oxígeno suplementario, cuidado estándar) =
178 / 189 * 92 = 86.65

Calcular resto de casillas

Valores observados y valores esperados

##                 Tratamiento
## O2 suplementario  CE  FV Sum
##            FALSE  91  87 178
##            TRUE    1  10  11
##            Sum    92  97 189
##                 Tratamiento
## O2 suplementario     CE     FV    Sum
##            FALSE  86.65  91.35 178.00
##            TRUE    5.35   5.65  11.00
##            Sum    92.00  97.00 189.00

Cálculo de \(\chi^2\)

Contraste de valores observados y esperados

##   O_CE  E_CE
## 1   91 86.65
## 2    1  5.35
##   O_FV  E_FV
## 1   87 91.35
## 2   10  5.65
Esperados
O-E
O-E²/E
CE FV CE FV CE FV
sin O2 86.65 91.35 NA NA NA NA
O2 sup 5.35 5.65 NA NA NA NA
Total 92.00 97.00 NA NA NA NA

Resultado de \(\chi^2\)

Esperados
O-E
O-E²/E
CE FV CE FV CE FV
sin O2 86.65 91.35 -4.35 4.35 0.22 0.21
O2 sup 5.35 5.65 4.35 -4.35 3.54 3.35
Total 92.00 97.00 0.00 0.00 3.76 3.56

\(\chi^2\) = 3.76 + 3.56 = 7.32

 p <- dchisq(7.32, df=1)
 round(p, 3)
## [1] 0.004

Calculo directo de \(\chi^2\)

chisq.test(table(favi$uso.de.oxígeno, favi$grupo), correct=FALSE)
## 
##  Pearson's Chi-squared test
## 
## data:  table(favi$uso.de.oxígeno, favi$grupo)
## X-squared = 7.3264, df = 1, p-value = 0.006795
chisq.test(table(favi$uso.de.oxígeno, favi$grupo))
## 
##  Pearson's Chi-squared test with Yates' continuity correction
## 
## data:  table(favi$uso.de.oxígeno, favi$grupo)
## X-squared = 5.7405, df = 1, p-value = 0.01658

Nuevo cálculo

torax <- addmargins(table(favi$PATRÓN, favi$grupo, dnn = c("Resultado imagen", "Tratamiento")))
torax
##                             Tratamiento
## Resultado imagen              CE  FV Sum
##   Negativo_para_neumonía      16  29  45
##   Atípico_para_COVID-19        2   4   6
##   Indeterminado_paraCOVID-19   2   2   4
##   Patrón_para_COVID-19        28  43  71
##   Sum                         48  78 126

Cálculo de valores esperados

valor casilla = total de la fila / gran total * total de la columna

martor
##                             Tratamiento
## Resultado imagen             CE FV Sum
##   Negativo_para_neumonía     -  -  45 
##   Atípico_para_COVID-19      -  -  6  
##   Indeterminado_paraCOVID-19 -  -  4  
##   Patrón_para_COVID-19       -  -  71 
##   Sum                        48 78 126

Casilla 1,1 (Negativo_para_neumonía, cuidado estándar) =
45 / 126 * 48 = 17.14

Calcular resto de casillas

Resultado de \(\chi^2\)

Esperados
O-E
O-E²/E
CE FV CE FV CE FV
Negativo_para_neumonía 17.14 27.86 1.14 -1.14 0.08 0.05
Atípico_para_COVID-19 2.29 3.71 0.29 -0.29 0.04 0.02
Indeterminado_paraCOVID-19 1.52 2.48 -0.48 0.48 0.15 0.09
Patrón_para_COVID-19 27.05 43.95 -0.95 0.95 0.03 0.02
Total 48.00 78.00 0.00 0.00 0.30 0.18

\(\chi^2\) = 0.30 + 0.18 = 0.48

 p <- dchisq(0.48, df=3)
 round(p, 3)
## [1] 0.217

Calculo directo de \(\chi^2\)

chisq.test(table(favi$PATRÓN, favi$grupo), correct=FALSE)
## Warning in chisq.test(table(favi$PATRÓN, favi$grupo), correct = FALSE): Chi-
## squared approximation may be incorrect
## 
##  Pearson's Chi-squared test
## 
## data:  table(favi$PATRÓN, favi$grupo)
## X-squared = 0.47533, df = 3, p-value = 0.9243
chisq.test(table(favi$PATRÓN, favi$grupo))
## Warning in chisq.test(table(favi$PATRÓN, favi$grupo)): Chi-squared approximation
## may be incorrect
## 
##  Pearson's Chi-squared test
## 
## data:  table(favi$PATRÓN, favi$grupo)
## X-squared = 0.47533, df = 3, p-value = 0.9243