Idea

  • Estudiar la asociación entre X e Y
    • Existencia de la asociación. Por ejemplo, rechazar la hipótesis nula en una ANOVA, rechazar la independencia.
    • Medir la fuerza de la asociación. Medidas e intervalos

Estructura de probabilidad en tablas de contingencia

  • \(X\) variable categórica con \(I\) categorías
  • \(Y\) variable categórica con \(J\) categorías

Si \(X\) e \(Y\) son ambas variables respuesta interesa su distribución conjunta que además determina la marginal y condicional. Si \(X\) es explicativa e \(Y\) es respuesta interesa sobretodo la distribución condicional de \(Y|X\).

La tabla de contingencia \(IxJ\) es la tabla de frecuencias observadas en cada combinación de las categorías de las variables \(X\) e \(Y\).

Distribución conjunta

Sea \(\pi_{ij}\) la probabilidad de que \((X,Y)\) ocurra en la celda \(ij\) al distribución de probabilidades \(\left \{ \pi_{ij} \right \}\) en la distribuciónn de probabilidades conjunta de X e Y.

Distrubución margianal

Se refiere a la distribución de los totales por fila (\(\left \{ \pi_{i+} \right \}\)) o columna (\(\left \{ \pi_{+j} \right \}\)).

Distribución condicional

Las probabilidades \(\left \{ \pi_{1|i},...,\pi_{J|i} \right \}\) forman la distribución condicional de \(Y\) dada la categoría \(i\) de \(X\).

Relación entre las tres

\[\pi_{j|i}=\frac{\pi_{ij}}{\pi_{i+}}\] Probabilidades conjunta, marginal y condicional en una tabla de contingencia

Independencia de variables categóricas

Dos variables categóricas respuestas son independientes cuando todas las probabilidades conjuntas son iguales a la multiplicación de las respectivas probabilidades marginales

\[\pi_{ij}=\pi_{i+}\pi_{+j}\]

Esto implica que cada distribución condicional de Y es igual a la distribución marginal de Y. Para todo \(i\),

\[\pi_{j|i}=\frac{\pi_{ij}}{\pi_{i+}}=\frac{\pi_{i+}\pi_{+j}}{\pi_{i+}}=\pi_{+j}\]

Variando i, X e Y son independientes cuando para todo j, \[\pi_{j|1}=...=\pi_{j|I}=\pi_{+j}\]

Lo que se conoce como homogeneidad de las distribuciones condicionales

Probar independencia (Marginal)

Para n grande,

  • Chi² Pearson
  • G² de razón de verosimilitud (Deviance)

Para n pequeño, métodos exactos no paramétricos

  • F de Fisher

Esquemas de muestreo

Poisson sampling

Todas las celdas independientes sin ninguna restricción

\[P(Y_{ij}=n_{ij})=\prod_i\prod_j exp(-\mu_{ij})\mu_{ij}^{n_{ij}}/n_{ij}!\]

Multinomial sampling

  • Cuando el tamaño total de la muestra \(n\) es fijo,

\[P(Y_{ij}=n_{ij})=\frac{n!}{n_{11}!...n_{11}!}\prod_i\prod_j\pi_{ij}^{n_{ij}}\]

Multinomial independent sampling

  • Cuando los margenes por filas (columnas) son fijos e independientes (usamos la notación \(n_i=n_{i+}\)),

\[P(Y_{ij}=n_{ij})=\prod_i \left [ \frac{n_i!}{\prod_j n_{ij}!} \prod_j \pi_{j|i}^{n_{ij}} \right ]\]

Esta distribución también se usa cuando X es una variable explicativa y no se cumplen las dos primeras distribuciones.

Hipergeométrica

Cuando ambos margenes son fijos.

Tipo de estudio

  • Prospectivos: Ensayos clíncios y estudios de cohorte. Se condiciona en los totales \(n_i\) de X. Cada fila de J conteos es Indepentent multi sobre Y.

  • Retrospectivos: Los totales \(\{n_{+j}\}\) son fijos para Y cada columna de I conteos tiene distribución multinomial sobre X.

  • Cross-sectional: El total \(n\) es fijo. Multinomial sampling.

Muestras pequeñas y tablas de contingencia de dos vías

Cuando el tamaño de la muestra \(n\) o el número de observaciones en cada celda es pequeño las distribciones de \(X²\) y \(G²\) no se aproximan bien a la distribución Chi-cuadrado y los p-valores no son confiables. En estas situaciones es posible hacer inferencias basandonos en las distribuciones exactas (o aproximaciones) de las celdas luego de escoger un esquema muestral. Como desventaja tenemos que los p-valores excatos pueden ser conservativos (no rechazar).

Podemos usar pruebas exactas cuando,

  • Fomalmente, la indeferencia es incondicional, i.e. cuando el diseño del estudio tiene un esquema muestral hipergeométrico (ambos margenes naturalemente fijos).

  • \(n\) es pequeño.

  • Más del 20% de las celdas tienen un valor esperado de menos de 5 y ningún valor esperado es cero.

Nota: Incluso si la distribución no es hipergeométrica se puede condicionar sobre los margenes y realizar el análisis como si fueran fijos (inferencia condicional) cuando \(n\) es pequeño y las aproximaciones probablemente no funcionen bien. Al condicionar resulta una distribución hipergeométrica (\(s\) especiales en \(m\) lanzamientos sin remplazo de una población finita de tamaño \(P\) que ya continen \(S\) especiales y cuyo soporte es \(s \in \{max[0,m-(P-S)],...,min[m,S]\}\)). Esto es toda una discusión desarrollada en Agresti. Esta aproximación condicional consiste en eliminar los parámetros de ruido de una binomial independiente condicionando en los estadísticos suficientes de dichos parámetros. Brian Caffo habla un poco acerca de ello y otros temas relacionados en este video

Fisher’s Exact Test.

En el caso 2x2, note que todas las tablas que tienen el mismo margen (fijo o condicionado) están unívocamente determinadas por el valor de una de sus celdas (\(n_{11}\) por ejemplo). Ya sea que los margenes sean fijos o se condicione, en general, dicha casilla tendría una distribución que depende del OR. Bajo la hipótesis nula de independencia (OR=1) la distribución es hipergeométrica.

  • P=n, el tamaño de la muestra
  • \(S=n_{1+}\)
  • \(P-S=n_{2+}\)
  • \(m=n_{+1}\)
  • \(s=n_{11}\)

Unilateral

Si \(s=n_{11}\) es un valor muy poco probable significa que los \(m\) conteos no ocurrieron de manera aleatoria y existe una asociación. La independencia es evaluada en término del OR. Por ejemplo, para probar OR>1, El p-valor es calculado como \(P(n_{11} \ge t_0)\), donde \(t_0\) es el valor observado en la casilla.

Ejemplo dama del té y su implementación en R

Bilateral

La aproximación más usada (Irwin 1935) es usar p-valor=\(P[p(n_{11}\leq p(t_0))]\). Esta es la opción implementada en R. Varias otras opciones existen y en R están implementadas en la librería exact2x2

P-valor-medio

Debido a que los datos son discretos pocos, también son relativamente pocos los p-valores posibles. Por lo tanto, las pruebas exactas son conservativas. Agresti propone para esto el uso del p-valor-medio definido como \(1/2*P(n_{11} = t_0) + P(n_{11} = \text{el valor más extremo})\).

OR no nulos

Cuando el OR=1 la distribución es hipergeométrica y se usa la prueba de excata de Fisher. En general, la distribución depende del OR y de los margenes. Desarrollada por Fisher, la distribución (condicional) de la primera casilla de la tabla de contingencia tiene distribución hipergeométrica no-central con parámetro de no-centralidad igual al OR.

Monte Carlo

Se usa cuando el número de tablas más extremas que la observada es muy grande

Test incondicionales

  • Ver Agresti y Caffo
  • Discusión entre Fisher los incondicionales
  • Varias se encuentran implentadas en la librería exact2x2

Medidas de asociación

Considere las probabilidades de éxito por filas \(\pi_{1|i}\) simplificada en notación a \(\pi_i\).

Riesgo realativo

Es la razón de la probabilidades de éxitos (enfermedad).

\[RR=\frac{\pi_1}{\pi_2}\] ## OR

La razón de odds en ambas categorías

\[OR=\frac{\frac{\pi_1}{1-\pi_1}}{\frac{\pi_2}{1-\pi_2}}\]

curve(expr = x/(1-x), from = 0, to = 1)

curve(expr = log(x/(1-x)), from = 0, to = 1)

estimación de Woolf (1955) de la varianza (revisar),

\[V_f=var(log(OR))=1/n_{11} + 1/n_{12} +1/n_{21} +1/n_{22}\]

Intervalo de confianza

\[exp(log(or) \pm z_{\alpha/2}\sqrt{V_f})\]

Relación entre RR y OR

\[OR=RR\frac{1-\pi_2}{1-\pi_1}\] Son similiares cuando las probablidades de éxito \(\pi_i\) son cercanas a cero en ambos grupos

Aproximación de eventos raros (cuando \(p_2<10%\))

Importante para tamaño de muestra

\[RR = OR * \frac{1+(n_{21}/n_{22})}{1+(n_{11}/n_{12})}=OR/[(1-p_2)+(p_2*OR)]\]

Eventos comunes (comparación de incidencias)

comparar \(p_1\) vs \(p_2\)

Análisis estratificado

La idea es analizar la asociación entre \(X\) e \(Y\) controlando por otra posible variable de confusión \(Z\).

Tablas parciales, marginales y asociaciones condicionales

  • Tablas parciales: Tablas de contingencia de dos vias par \(X\) e \(Y\) en la categoría \(k\) de \(Z\). Las asociaciones en estas tablas son llamdas asociaciones condicionales (en \(k\))

  • Tabla marginal: Tabla de de contingencia entre \(X\) e \(Y\) ignorando \(Z\).

Odds ratios marginales y condicionales

Se refiere a los OR crudos y en cada estrato.

Independencia marginal vs condicional

Se \(X\) e \(Y\) son independientes en la tabla parcial \(k\), entonces se dice que \(X\) e \(Y\) son condicionalmente independientes en el nivel \(k\) de \(Z\) (Independencia en el estrato). Cuando \(X\) e \(Y\) son condicionalmente independientes en todos las categorías \(k\), se dice que \(X\) e \(Y\) son condicionalmente independientes dada \(Z\) (Independencia en todos los estratos).En una tabla \(2*2*K\) esto es uquivalente a que los OR condicionales sean 1.

Independencia condicional no implica indepencia marginal (Yule 1903, mención en agresti). Esto es, independecia en todos los estratos de \(Z\) no implica independencia cruda (ignorando \(Z\)).

Para probarla se usa Cochran-Mantel-Haenszel Test

Asociación Homogénea

Una tabla \(2*2*K\) tiene una asociación XY homogénea si los OR condicionales son iguales

\[\Theta_{XY(1)}=\Theta_{XY(2)}=...=\Theta_{XY(K)}\] La homogeneidad es una propiedad simétrica. Aplica para cualquier par de variables vistas a través de las categorías de una tercera. Cuando ocurre se dice que no hay interacción entre las dos variables en su efecto sobre la tercera. Que haya interacción entre dos variables sobre una tercera significa que los OR condicionales de cualquier par de variables cambian por las categorías de la tercera. Arriba por ejemplo, si no se cumple la igualdad hay una interacción entre X y Z sobre Y. Z es un efecto modificador.

Independencia condicional (dada \(Z\)) es un caso particular cuando \(\Theta_{XY(k)}=1\). De igual manera homogeneidad no implica el Or marginal sea igual al Or común. Esto sucede cuando el Or es colapsable (ver Agresti)

Notas de clase

Marco muestral

  1. Muestra aleatoria estratifica de 2 grupos independientes
  • Ciudad 1 y 2, Problemas ambientales si o no.
  • Dos binomiales independientes
  1. Una muestra aleatoria grupo de personas reponen si asisten al odontólogo, medico o los dos.

Multinomial con respuesta cruzada

  1. Asignación aleatoria de pacientes a dos o más grupos
placepo <-  c(16,48)
experimental <- c(40,20)
tabla <- rbind(placepo,experimental)
colnames(tabla) <- c("Sí", "No")
library(epitools)
round(epitab(tabla, method = "riskratio")$tab, 3)
             Sí    p0 No    p1 riskratio lower upper p.value
placepo      16 0.250 48 0.750     1.000    NA    NA      NA
experimental 40 0.667 20 0.333     0.444 0.302 0.653       0
round(epitab(tabla, method = "oddsratio")$tab, 3)
             Sí    p0 No    p1 oddsratio lower upper p.value
placepo      16 0.286 48 0.706     1.000    NA    NA      NA
experimental 40 0.714 20 0.294     0.167 0.076 0.364       0
  • Caer en cada \(n_{ij}\) casilla sigue una distribución hipergeométrica (N=124)

  • Al analizar por fila la hipótesis nula es que los tratamientos son iguales respecto a los efectos de mejoría.

  • Al analizar por columna probamos la hipótesis nula de que la aleatorización estuvo bien.

\[P(n_{ij}) = \frac{n_{1+}!n_{2+}!n_{+1}!n_{+2}!}{n!n_{11}!n_{12}!n_{21}!n_{22}!}\]

\[E(n_{ij}|H_o)= \frac{n_{i+}n_{+j}}{n}=m_{ij}\]

\[V(n_{ij}|H_o)=\frac{n_{1+}n_{2+}n_{+1}n_{+2}}{n^2(n-1)}=V_{ij}\]

\[n_{ij} \approx N(m_{ij}, V_{ij})\] ## Chi² de M-H para aleatorización

\[Q_{11}=\frac{(n_{11}-m_{11})^2}{V_{11}} \approx \chi_1\]

Chi² de Pearson

\(Q_{ij}\)\(Q_p\)

\[Q_p=\sum_{i=1}^2 \sum_{j=1}^2 \frac{(n_{ij}-m_{ij})^2}{m_{ij}}=n/(n-1)Q\]

Tarea

Encontrar intervalo de confianza para \(p_1-p_2\) Calcular Q de pearson y aleatorización.

Manual

n <- sum(tabla)
M_ij <- rowSums(tabla)%*%t(colSums(tabla))/n
V_ij <- prod(rowSums(tabla))*prod(colSums(tabla))/(n^2*(n-1))

(Q_ij <- (tabla - M_ij)^2/V_ij )
                   Sí       No
placepo      21.53361 21.53361
experimental 21.53361 21.53361
(Q_p <- (tabla - M_ij)^2/M_ij)
                   Sí       No
placepo      5.760369 4.743833
experimental 6.144393 5.060089
sum(Q_p)
[1] 21.70868

\[d=p_1-p_2\] \[E(p1-p2)=\pi_1-\pi_2\] \[V(p1-p2)=\frac{\pi_1(1-\pi_1)}{n_{1+}}+\frac{\pi_2(1-\pi_2)}{n_{2+}}\]

\[V_d=\frac{p_1(1-p_1)}{n_{1+}-1}+\frac{p_2(1-p_2)}{n_{2+}-1}\]

IC \(100(1-\alpha)%\)

\[d \pm \left \{ Z_{\alpha /2 } \sqrt{V_d} + \frac{1}{2} (\frac{1}{n_{1+}}+\frac{1}{n_2+}) \right \}\]

Implementado

chisq.test(tabla, correct = F)

    Pearson's Chi-squared test

data:  tabla
X-squared = 21.709, df = 1, p-value = 3.174e-06
library(DescTools)
MHChisqTest(tabla)

    Mantel-Haenszel Chi-Square

data:  tabla
X-squared = 21.534, df = 1, p-value = 3.477e-06

H1_mh: diferencias en debido a los tratamientos

library(epiR)
res <- epi.2by2(tabla)
print(res)
             Outcome +    Outcome -      Total        Inc risk *
Exposed +           16           48         64              25.0
Exposed -           40           20         60              66.7
Total               56           68        124              45.2
                 Odds
Exposed +       0.333
Exposed -       2.000
Total           0.824

Point estimates and 95 % CIs:
-------------------------------------------------------------------
Inc risk ratio                               0.38 (0.24, 0.59)
Odds ratio                                   0.17 (0.08, 0.36)
Attrib risk *                                -41.67 (-57.63, -25.70)
Attrib risk in population *                  -21.51 (-36.30, -6.71)
Attrib fraction in exposed (%)               -166.67 (-322.64, -68.25)
Attrib fraction in population (%)            -47.62 (-72.30, -26.47)
-------------------------------------------------------------------
 X2 test statistic: 21.709 p-value: < 0.001
 Wald confidence limits
 * Outcomes per 100 population units 

Intervalos

Solo para muestras probabilisticas o aleatorización

prop.test(tabla)

    2-sample test for equality of proportions with continuity
    correction

data:  tabla
X-squared = 20.059, df = 1, p-value = 7.509e-06
alternative hypothesis: two.sided
95 percent confidence interval:
 -0.5924430 -0.2408903
sample estimates:
   prop 1    prop 2 
0.2500000 0.6666667 
library(PropCIs)

# Score
diffscoreci(x1 = tabla[2,1], n1 = rowSums(tabla)[2], 
            x2 = tabla[1,1], n2 = rowSums(tabla)[1], .95)



data:  

95 percent confidence interval:
 0.2460145 0.5626554
# Wald
wald2ci(x1 = tabla[2,1], n1 = rowSums(tabla)[2], 
            x2 = tabla[1,1], n2 = rowSums(tabla)[1], .95, adjust = 'Wald') # ejemplo agresti



data:  

95 percent confidence interval:
 0.2570362 0.5762972
sample estimates:
experimental 
   0.4166667 

libros de experimentos clínicos

  • clinical trials, Friedman
  • Clinical trials, Meinnert

Analisis estratificado

En general una tabla \(n_{hij}\), \(n_{h+j}\), \(n_{hi+}\) y total \(n_h\) Para el estrato se usa \(h=1,...,q\).

Mejoría espiratoria en dos centros(Importa el centro -> Sesgo de…),

Distribución hipergeométrica en cada centro, globalmente es el producto de dos hipergeométricas.

placepo <-  c(14,31)
experimental <- c(29,16)
centro1 <- rbind(placepo,experimental)
colnames(centro1) <- c("Sí", "No")

placepo <-  c(24,21)
experimental <- c(37,8)
centro2 <- rbind(placepo,experimental)
colnames(centro2) <- c("Sí", "No")

library(epiR)
res <- epi.2by2(tabla)
print(res)
             Outcome +    Outcome -      Total        Inc risk *
Exposed +           16           48         64              25.0
Exposed -           40           20         60              66.7
Total               56           68        124              45.2
                 Odds
Exposed +       0.333
Exposed -       2.000
Total           0.824

Point estimates and 95 % CIs:
-------------------------------------------------------------------
Inc risk ratio                               0.38 (0.24, 0.59)
Odds ratio                                   0.17 (0.08, 0.36)
Attrib risk *                                -41.67 (-57.63, -25.70)
Attrib risk in population *                  -21.51 (-36.30, -6.71)
Attrib fraction in exposed (%)               -166.67 (-322.64, -68.25)
Attrib fraction in population (%)            -47.62 (-72.30, -26.47)
-------------------------------------------------------------------
 X2 test statistic: 21.709 p-value: < 0.001
 Wald confidence limits
 * Outcomes per 100 population units 
library(epitools)
round(epitab(tabla, method = "riskratio")$tab, 3)
             Sí    p0 No    p1 riskratio lower upper p.value
placepo      16 0.250 48 0.750     1.000    NA    NA      NA
experimental 40 0.667 20 0.333     0.444 0.302 0.653       0
round(epitab(tabla, method = "oddsratio")$tab, 3)
             Sí    p0 No    p1 oddsratio lower upper p.value
placepo      16 0.286 48 0.706     1.000    NA    NA      NA
experimental 40 0.714 20 0.294     0.167 0.076 0.364       0

\(H_0:\) No hay diferencia en los tratamientos

\[E[n_{hij}|h_0]=\frac{n_{hi+}n_{h+j}}{n_h}=m_{hij}\]

\[Var[n_{hij}|h_0]=\frac{n_{hi+}n_{h+j}n_{h+i}n_{hj+}}{n_h²(n_h-1)}=V_{hij}\]

\[Q_{mh}=\frac{(\sum_{h=1}^q n_{h11} - \sum_{h=1}^q m_{h11})^2}{\sum_{h=1}^q V_{h11}}\]

equivalentemente

\[Q_{mh}=\frac{\sum_{h=1}^q (n_{h1+}n_{h2+}/n_h)(p_{h11}-p_{h21})^2}{\sum_{h=1}^q V_{h11}}\]

donde \(p_{hi1}=n_{hi1}/n_{hi+}\).

Cuando los tamaño por filas colapsados (tabla global colapsada) son grandes (>30)

  • MH remueve la confusión da dada por variables de estratificación
  • Proporciona un aumento en la potencia para detectar asociación en un estudio aleatorizado
  • En un estudio observacional remueve el sesgo de confusión por solo ese estrato. Puede disminuir la potencia (tamaño de la muestra).

Tarea: Calcular Q

respiracion <-
    as.table(array(c(29,14, 
                     16,31,
                     37,24,
                     8,21),
                   dim = c(2,2, 2),
                   dimnames =
                   list(Grupo =
                        c("Experimento", "Placebo"),
                        "Mejora" =
                        c("Sí", "No"),
                        Centro = c("Centro1", "Centro2"))))

ftable(. ~ Centro + Grupo, respiracion)
                    Mejora Sí No
Centro  Grupo                   
Centro1 Experimento        29 16
        Placebo            14 31
Centro2 Experimento        37  8
        Placebo            24 21
mantelhaen.test(respiracion)

    Mantel-Haenszel chi-squared test with continuity correction

data:  respiracion
Mantel-Haenszel X-squared = 17.119, df = 1, p-value = 3.511e-05
alternative hypothesis: true common odds ratio is not equal to 1
95 percent confidence interval:
 2.105716 7.708353
sample estimates:
common odds ratio 
         4.028846 
respiracion
, , Centro = Centro1

             Mejora
Grupo         Sí No
  Experimento 29 16
  Placebo     14 31

, , Centro = Centro2

             Mejora
Grupo         Sí No
  Experimento 37  8
  Placebo     24 21
library(epiR)
res <- epi.2by2(respiracion)
res
             Outcome +    Outcome -      Total        Inc risk *
Exposed +           66           24         90              73.3
Exposed -           38           52         90              42.2
Total              104           76        180              57.8
                 Odds
Exposed +       2.750
Exposed -       0.731
Total           1.368


Point estimates and 95 % CIs:
-------------------------------------------------------------------
Inc risk ratio (crude)                       1.74 (1.32, 2.28)
Inc risk ratio (M-H)                         1.74 (1.33, 2.27)
Inc risk ratio (crude:M-H)                   1.00
Odds ratio (crude)                           3.76 (2.01, 7.05)
Odds ratio (M-H)                             4.03 (2.11, 7.71)
Odds ratio (crude:M-H)                       0.93
Attrib risk (crude) *                        31.11 (17.41, 44.81)
Attrib risk (M-H) *                          31.11 (16.09, 46.13)
Attrib risk (crude:M-H)                      1.00
-------------------------------------------------------------------
 Test of homogeneity of IRR: X2 test statistic: 6.582 p-value: 0.01
 Test of homogeneity of  OR: X2 test statistic: 0 p-value: 0.99
 Wald confidence limits
 M-H: Mantel-Haenszel
 * Outcomes per 100 population units 
res$res$OR.strata.score
       est    lower    upper
1 4.013393 1.678189  9.59804
2 4.046875 1.565276 10.42107
res$res$OR.homog # Breslow-Day test: Hay homogeneidad
  test.statistic df   p.value
1   0.0001562126  1 0.9900279
DescTools::WoolfTest(respiracion)

    Woolf Test on Homogeneity of Odds Ratios (no 3-Way assoc.)

data:  respiracion
X-squared = 0.00015617, df = 1, p-value = 0.99
res$res$OR.mh.wald # Intervalo para el OR común
       est    lower    upper
1 4.028846 2.105716 7.708353
res$res$chisq.mh # Pero no son independientes
  test.statistic df      p.value
1         17.119  1 3.510936e-05
res$res$chisq.strata # No hay independencia condicional
  test.statistic df     p.value
1      10.019792  1 0.001548669
2       8.598078  1 0.003365180

Tarea - estratos homogéneos - Breslow-Day . Intervalos de confianza para OR-ajustado (o para \(\Phi_{mh}\))

Parcial

tabla <-
    as.table(array(c(15,10, 
                     15,20,
                     25,12,
                     5,18,
                     21,16,
                     9,14),
                   dim = c(2,2, 3),
                   dimnames =
                   list(Grupo =
                        c("Nuevo", "Estandar"),
                        "Mejora" =
                        c("Sí", "No"),
                        Peso = c("Normal", "Sobrepeso", "Obesidad"))))

ftable(. ~ Peso + Grupo, tabla)
                   Mejora Sí No
Peso      Grupo                
Normal    Nuevo           15 15
          Estandar        10 20
Sobrepeso Nuevo           25  5
          Estandar        12 18
Obesidad  Nuevo           21  9
          Estandar        16 14
tabla
, , Peso = Normal

          Mejora
Grupo      Sí No
  Nuevo    15 15
  Estandar 10 20

, , Peso = Sobrepeso

          Mejora
Grupo      Sí No
  Nuevo    25  5
  Estandar 12 18

, , Peso = Obesidad

          Mejora
Grupo      Sí No
  Nuevo    21  9
  Estandar 16 14
mantelhaen.test(tabla)

    Mantel-Haenszel chi-squared test with continuity correction

data:  tabla
Mantel-Haenszel X-squared = 11.081, df = 1, p-value = 0.0008721
alternative hypothesis: true common odds ratio is not equal to 1
95 percent confidence interval:
 1.588472 5.475389
sample estimates:
common odds ratio 
         2.949153 
library(epiR)
res <- epi.2by2(tabla,)
res
             Outcome +    Outcome -      Total        Inc risk *
Exposed +           61           29         90              67.8
Exposed -           38           52         90              42.2
Total               99           81        180              55.0
                 Odds
Exposed +       2.103
Exposed -       0.731
Total           1.222


Point estimates and 95 % CIs:
-------------------------------------------------------------------
Inc risk ratio (crude)                       1.61 (1.21, 2.13)
Inc risk ratio (M-H)                         1.61 (1.22, 2.12)
Inc risk ratio (crude:M-H)                   1.00
Odds ratio (crude)                           2.88 (1.57, 5.29)
Odds ratio (M-H)                             2.95 (1.59, 5.48)
Odds ratio (crude:M-H)                       0.98
Attrib risk (crude) *                        25.56 (11.51, 39.60)
Attrib risk (M-H) *                          25.56 (10.44, 40.68)
Attrib risk (crude:M-H)                      1.00
-------------------------------------------------------------------
 Test of homogeneity of IRR: X2 test statistic: 7.058 p-value: 0.029
 Test of homogeneity of  OR: X2 test statistic: 3.356 p-value: 0.187
 Wald confidence limits
 M-H: Mantel-Haenszel
 * Outcomes per 100 population units 
res$res$RR.strata.score
       est     lower    upper
1 1.500000 0.8214370 2.829757
2 2.083333 1.3634196 3.455927
3 1.312500 0.8766378 2.031651
res$res$OR.homog # Breslow-Day test: Hay homogeneidad
  test.statistic df   p.value
1       3.355565  2 0.1867877
DescTools::WoolfTest(respiracion)

    Woolf Test on Homogeneity of Odds Ratios (no 3-Way assoc.)

data:  respiracion
X-squared = 0.00015617, df = 1, p-value = 0.99
res$res$OR.mh.wald # Intervalo para el OR común
       est    lower    upper
1 2.949153 1.588472 5.475389
res$res$chisq.mh # Pero no son independientes
  test.statistic df      p.value
1        11.0811  1 0.0008721195
res$res$chisq.strata # No hay independencia condicional
  test.statistic df      p.value
1       1.714286  1 0.1904302638
2      11.915394  1 0.0005567197
3       1.762632  1 0.1842965374