9 votos

¿Cómo calcular el valor p de un odds ratio en R?

Tengo la siguiente tabla de valores:

25  75
38  162

El odds ratio es 0,7037 y el log(OR) es -0,3514. Para una tabla de contingencia con los valores a, b, c y d, la varianza de log(OR) es dado por

(1/a + 1/b + 1/c + 1/d)

¿Cómo puedo calcular el valor p de log(OR) a partir de estos datos en R (si es significativamente diferente de 0)?

12voto

RossC Puntos 3725

Puede utilizar la prueba exacta de Fisher, que introduce una tabla de contingencia y proporciona un valor p, con una hipótesis nula de que la razón de momios es 1 y una hipótesis alternativa de que la razón de momios no es igual a 1.

(tab <- matrix(c(38, 25, 162, 75), nrow=2))
#      [,1] [,2]
# [1,]   38  162
# [2,]   25   75
fisher.test(tab)
# 
#   Fisher's Exact Test for Count Data
# 
# data:  tab
# p-value = 0.2329
# alternative hypothesis: true odds ratio is not equal to 1
# 95 percent confidence interval:
#  0.3827433 1.3116294
# sample estimates:
# odds ratio 
#  0.7045301 

En este caso, el valor p es de 0,23.

0 votos

Gracias por una forma inteligente de determinar el valor p. La prueba de chi-cuadrado también se puede utilizar de manera similar.

0 votos

@rnso seguro, aunque la prueba exacta de Fisher es preferible a la Chi-cuadrado cuando tienes tamaños de celda pequeños en tu tabla de contingencia.

4 votos

Se trata de un mito que viene de lejos, pero que desgraciadamente no es cierto. El Pearson ordinario $\chi^2$ proporciona una mayor precisión $P$ -que la llamada prueba "exacta" de Fisher, incluso cuando las frecuencias esperadas son tan bajas como 1,0.

11voto

Ben Bolker Puntos 8729

Otra forma de hacerlo (distinta de la prueba exacta de Fisher) es poner los valores en un GLM binomial:

d <- data.frame(g=factor(1:2),
                s=c(25,75),
                f=c(38,162))
g <- glm(s/(s+f)~g,weights=s+f,data=d,
    family="binomial")
coef(summary(g))["g2",c("Estimate","Pr(>|z|)")]
##   Estimate   Pr(>|z|) 
## -0.3513979  0.2303337 

Para obtener la prueba del cociente de probabilidad (ligeramente más precisa que la de Wald $p$ -(valor mostrado arriba), haga

anova(g,test="Chisq")

que da

##      Df Deviance Resid. Df Resid. Dev Pr(>Chi)
## NULL                     1     1.4178         
## g     1   1.4178         0     0.0000   0.2338

(LRT $p=0.2338 \approx$ Wald $p=0.2303337 \approx$ Fisher $p=0.2329$ en este caso porque la muestra es bastante grande)

5voto

dan90266 Puntos 609

Es mejor generalizar la solución y utilizar el cociente de probabilidades $\chi^2$ prueba de un modelo estadístico como el modelo logístico. La prueba LR proporciona una precisión bastante $P$ -valores. Esto también maneja los casos en los que se necesita probar más de un parámetro, por ejemplo, problemas de 3 grupos, efectos continuos que no son lineales, etc. La prueba LR para el modelo global (que es todo lo que se necesita en este ejemplo, ya que no hay variables de ajuste) puede obtenerse fácilmente en R base o utilizando la herramienta rms paquete, por ejemplo

f <- lrm(y ~ groups, weights=freqs)
f  # prints LR chi-sq, d.f., P, many other quantities

Aquí los modelos anidados son este modelo y un modelo de sólo intercepción.

0 votos

He podido comprobar que la prueba LR (lrtest) se utiliza para comparar modelos anidados. ¿Cómo podemos usarlo aquí? ¿Podría escribir una línea de código R para ello?

0 votos

Por si sirve de algo, este es más o menos el mismo enfoque estadístico (aunque con una mejor explicación) que en mi respuesta anterior. lrm() tiene diferentes valores por defecto, formatos de salida, etc., pero el modelo estadístico (IIUC) es el mismo que glm(...,family="binomial")

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X